1483 lines
23 KiB
ArmAsm
1483 lines
23 KiB
ArmAsm
*GUI Atari ST program for splitting TOS ROM image files
|
|
* By P. Putnik, 2008 April, May
|
|
|
|
|
|
|
|
*First RSC object indices
|
|
|
|
; resource set indices for ROMSPLI2
|
|
;
|
|
MAINDI equ 0 ; form/dialog
|
|
TITLE equ 1 ; BOXTEXT in MAINDI
|
|
LOADIBU equ 2 ; BUTTON in MAINDI
|
|
OPTBOX equ 3 ; BOX in MAINDI
|
|
IN2PLHBU equ 4 ; BUTTON in MAINDI
|
|
IN6PBU equ 5 ; BUTTON in MAINDI
|
|
IN4PTTBU equ 6 ; BUTTON in MAINDI
|
|
OPTTIT equ 7 ; TEXT in MAINDI
|
|
LDEDIST equ 8 ; TEXT in MAINDI
|
|
LOADEDIS equ 9 ; BOXTEXT in MAINDI
|
|
LENGTHT equ 10 ; TEXT in MAINDI
|
|
SPLITBU equ 11 ; BUTTON in MAINDI
|
|
EXITBU equ 12 ; BUTTON in MAINDI
|
|
FIXCRCBU equ 13 ; BUTTON in MAINDI
|
|
|
|
|
|
*Devpac !
|
|
include gemdmacr.s
|
|
include aes2macr.s
|
|
|
|
|
|
|
|
|
|
progbeg
|
|
|
|
|
|
move.l 4(sp),a4
|
|
|
|
pea fin-progbeg+256 *len of program and bss
|
|
move.l (a4),-(sp) *TPA begin
|
|
move.w #0,-(sp)
|
|
move.w #74,-(sp)
|
|
trap #1
|
|
* lea 12(sp),sp
|
|
|
|
lea stack+354,sp
|
|
|
|
|
|
|
|
aplinit
|
|
appl_init
|
|
|
|
*Coordinate conversion-needed by integrated RSC
|
|
coordc
|
|
moveq #0,d0
|
|
|
|
obfloop
|
|
move.w d0,obfia
|
|
move.w d0,-(sp)
|
|
|
|
rsrc_obfix
|
|
obfia dc.w 0
|
|
dc.l form1 *begin adress of objects
|
|
|
|
move.w (sp)+,d0
|
|
addq.b #1,d0
|
|
cmp.b #rsc_obnum,d0 *
|
|
bne.s obfloop
|
|
|
|
|
|
*Calling some supervisor test at start by need
|
|
pea supv(pc)
|
|
move.w #38,-(sp)
|
|
trap #14
|
|
addq.l #6,sp
|
|
|
|
|
|
*Get aktuell drive
|
|
move.w #25,-(sp)
|
|
trap #1
|
|
addq.l #2,sp
|
|
|
|
lea path(pc),a2
|
|
add.b #"A",d0
|
|
move.b d0,(a2)
|
|
|
|
|
|
|
|
mcontrl bsr mctrl *program takes maus controll
|
|
lea form1(pc),a0
|
|
bsr opdial
|
|
bsr resscp *screen part reserve
|
|
bsr drdial
|
|
|
|
*Main loop of dialog
|
|
mcont
|
|
bsr mafing *needed if is PRG (PRG startet with bee)
|
|
bsr fodial
|
|
|
|
move.w excod(pc),d0
|
|
|
|
*Here coming actions by button press
|
|
|
|
|
|
cmp.w #LOADIBU,d0
|
|
beq loadfil
|
|
|
|
cmp.w #SPLITBU,d0
|
|
beq split
|
|
|
|
cmp.w #FIXCRCBU,d0
|
|
beq fixcrc
|
|
|
|
cmp.w #EXITBU,d0
|
|
beq cl2
|
|
|
|
|
|
menu
|
|
* bsr mafing
|
|
bsr exobdes
|
|
bra mcont
|
|
|
|
cl2
|
|
bsr mctab *vrati kontrolu
|
|
|
|
bsr noredr *deselect exit button
|
|
|
|
* bsr backsp
|
|
|
|
|
|
|
|
applex
|
|
appl_exit
|
|
pterm0 *exit PRG
|
|
|
|
|
|
redrdial bsr drdial
|
|
bra menu *back to dialog
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loadfil
|
|
|
|
bsr mabee
|
|
lea initst(pc),a1
|
|
bsr putext *put initial extension
|
|
*Call fileselector:
|
|
pfilesel
|
|
lea fsloadm(pc),a1
|
|
bsr filesel
|
|
tst.b buffr+100
|
|
beq redrdial *dialog if nothing selected
|
|
bsr mabee
|
|
bsr drdial
|
|
|
|
*Open selected file
|
|
move.w #0,-(sp)
|
|
pea buffr+100(pc)
|
|
move.w #61,-(sp) *open file
|
|
trap #1
|
|
addq.l #8,sp
|
|
*Error check
|
|
tst.w d0
|
|
bmi filerr
|
|
* bmi redrdial *no error message so!
|
|
move.w d0,handl
|
|
|
|
* Get filelen with fseek
|
|
|
|
move.w #2,-(sp) *from end mode
|
|
move.w d0,-(sp) *handle
|
|
clr.l -(sp) *end
|
|
move.w #66,-(sp)
|
|
trap #1
|
|
lea 10(sp),sp
|
|
|
|
move.l d0,realfill *real filelen for display
|
|
cmp.l #$40000,d0 *is over 256KB ?
|
|
ble.s max256
|
|
move.l #$40000,d0
|
|
|
|
max256
|
|
move.l d0,filelen *filelen to load
|
|
|
|
*Back to filebegin
|
|
clr.w -(sp) *from start mode
|
|
move.w handl(pc),-(sp) *handle
|
|
clr.l -(sp) *start
|
|
move.w #66,-(sp)
|
|
trap #1
|
|
lea 10(sp),sp
|
|
|
|
|
|
|
|
pea conbuf(pc)
|
|
move.l filelen(pc),-(sp)
|
|
move.w handl(pc),-(sp)
|
|
move.w #63,-(sp)
|
|
trap #1
|
|
lea 12(sp),sp
|
|
tst.l d0
|
|
bmi filerr
|
|
cmp.l filelen(pc),d0 *check for full filelength load
|
|
bne filerr
|
|
bsr closfile
|
|
|
|
|
|
*After it need to put filename to infobox...
|
|
* Filename is at buffr...
|
|
lea text11(pc),a2
|
|
lea buffr(pc),a1
|
|
moveq #12,d2
|
|
teinc1 move.b (a1)+,(a2)+
|
|
dbf d2,teinc1
|
|
|
|
|
|
*Print out filelength in hex:
|
|
|
|
lea text12+1(pc),a1
|
|
move.l realfill(pc),d1
|
|
bsr prhex5
|
|
|
|
|
|
*Copy path and filename for saving:
|
|
|
|
lea buffr+100(pc),a0
|
|
lea savfn(pc),a3
|
|
moveq #102,d2
|
|
safnc move.l (a0)+,(a3)+
|
|
dbf d2,safnc
|
|
|
|
|
|
|
|
|
|
|
|
bra redrdial
|
|
* bra menu
|
|
|
|
|
|
filerr
|
|
lea alertde(pc),a0
|
|
bsr doalert
|
|
* bra menu
|
|
|
|
*Clear 'Loaded is' text:
|
|
lea text11(pc),a2
|
|
move.b #"-",(a2)+
|
|
clr.b (a2)
|
|
|
|
bra redrdial
|
|
|
|
|
|
|
|
|
|
split *3 branches
|
|
|
|
bsr mabee
|
|
|
|
tst.b flag2
|
|
beq to6ortt
|
|
|
|
*1 just to Lo/Hi - 2*128KB
|
|
|
|
*Replace file extension to HI
|
|
|
|
lea hiet(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf(pc),a0
|
|
move.l #$20000,d0
|
|
lp1 move.b (a0)+,(a1)+
|
|
addq.l #1,a0
|
|
subq.l #1,d0
|
|
bne.s lp1
|
|
|
|
bsr save128
|
|
|
|
lea loet(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf(pc),a0
|
|
move.l #$20000,d0
|
|
lp2 addq.l #1,a0
|
|
move.b (a0)+,(a1)+
|
|
subq.l #1,d0
|
|
bne.s lp2
|
|
|
|
bsr save128
|
|
|
|
bra menu
|
|
|
|
|
|
|
|
replfe lea savfn(pc),a1
|
|
*seek 0 terminator:
|
|
|
|
searzt tst.b (a1)+
|
|
bne.s searzt
|
|
*Now search back for \
|
|
searbs2 cmp.b #"\",-(a1)
|
|
bne.s searbs2
|
|
addq.l #1,a1
|
|
|
|
*Point to extension:
|
|
*Max 8 bytes after
|
|
|
|
moveq #7,d2
|
|
seadot cmp.b #".",(a1)
|
|
beq.s dotfou
|
|
tst.b (a1)
|
|
beq.s dotfou *break by 0 terminator
|
|
cmp.b #" ",(a1) *break by space too
|
|
beq.s dotfou
|
|
addq.l #1,a1
|
|
dbf d2,seadot
|
|
|
|
dotfou
|
|
moveq #4,d2 *4 or 5 byte to copy
|
|
extcol move.b (a0)+,(a1)+
|
|
dbf d2,extcol
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
save128
|
|
|
|
move.w #0,-(sp)
|
|
pea savfn(pc)
|
|
move.w #60,-(sp) *Fcreate
|
|
trap #1
|
|
addq.l #8,sp
|
|
*Error check
|
|
tst.w d0
|
|
bmi saerr
|
|
move.w d0,handl
|
|
|
|
|
|
pea tosav
|
|
pea $20000
|
|
move.w d0,-(sp)
|
|
move.w #64,-(sp)
|
|
trap #1
|
|
lea 12(sp),sp
|
|
|
|
cmp.l #$20000,d0 *check for full filelength save
|
|
bne saerr2
|
|
|
|
|
|
bsr closfile
|
|
rts
|
|
|
|
saerr2 bsr closfile
|
|
|
|
saerr *give some alert
|
|
lea alertsav(pc),a0
|
|
bsr doalert
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
to6ortt
|
|
|
|
tst.b flag3
|
|
|
|
beq itstt
|
|
|
|
*Split to 6 parts of 32KB:
|
|
|
|
*Replace file extension to HI0
|
|
|
|
lea hie0(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf(pc),a0
|
|
move.l #$8000,d0
|
|
lp3 move.b (a0)+,(a1)+
|
|
addq.l #1,a0
|
|
subq.l #1,d0
|
|
bne.s lp3
|
|
|
|
bsr save32
|
|
|
|
lea loe0(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf(pc),a0
|
|
move.l #$8000,d0
|
|
lp4 addq.l #1,a0
|
|
move.b (a0)+,(a1)+
|
|
subq.l #1,d0
|
|
bne.s lp4
|
|
|
|
bsr save32
|
|
|
|
lea hie1(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf+$10000,a0
|
|
move.l #$8000,d0
|
|
lp5 move.b (a0)+,(a1)+
|
|
addq.l #1,a0
|
|
subq.l #1,d0
|
|
bne.s lp5
|
|
|
|
bsr save32
|
|
|
|
lea loe1(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf+$10000,a0
|
|
move.l #$8000,d0
|
|
lp6 addq.l #1,a0
|
|
move.b (a0)+,(a1)+
|
|
subq.l #1,d0
|
|
bne.s lp6
|
|
|
|
bsr save32
|
|
|
|
lea hie2(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf+$20000,a0
|
|
move.l #$8000,d0
|
|
lp7 move.b (a0)+,(a1)+
|
|
addq.l #1,a0
|
|
subq.l #1,d0
|
|
bne.s lp7
|
|
|
|
bsr save32
|
|
|
|
lea loe2(pc),a0
|
|
bsr replfe
|
|
|
|
lea tosav,a1
|
|
lea conbuf+$20000,a0
|
|
move.l #$8000,d0
|
|
lp8 addq.l #1,a0
|
|
move.b (a0)+,(a1)+
|
|
subq.l #1,d0
|
|
bne.s lp8
|
|
|
|
bsr save32
|
|
|
|
bra menu
|
|
|
|
|
|
save32
|
|
|
|
move.w #0,-(sp)
|
|
pea savfn(pc)
|
|
move.w #60,-(sp) *Fcreate
|
|
trap #1
|
|
addq.l #8,sp
|
|
*Error check
|
|
tst.w d0
|
|
bmi saerr
|
|
move.w d0,handl
|
|
|
|
|
|
pea tosav
|
|
pea $8000
|
|
move.w d0,-(sp)
|
|
move.w #64,-(sp)
|
|
trap #1
|
|
lea 12(sp),sp
|
|
|
|
cmp.l #$8000,d0 *check for full filelength save
|
|
bne saerr2
|
|
|
|
bsr closfile
|
|
rts
|
|
|
|
|
|
|
|
|
|
itstt
|
|
*do it in 2 stages to not use too much RAM
|
|
|
|
*0
|
|
lea tosav,a1
|
|
lea conbuf(pc),a0
|
|
move.l #$10000,d0
|
|
lp9 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp9
|
|
|
|
*Now load second half
|
|
|
|
bsr lottsh
|
|
|
|
|
|
lea tosav+$10000,a1
|
|
lea conbuf(pc),a0
|
|
move.l #$10000,d0
|
|
lp10 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp10
|
|
|
|
|
|
lea tte0(pc),a0
|
|
bsr replfe
|
|
bsr save128
|
|
|
|
|
|
|
|
*1
|
|
bsr lottfh
|
|
|
|
lea tosav,a1
|
|
lea conbuf+1(pc),a0
|
|
move.l #$10000,d0
|
|
lp11 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp11
|
|
|
|
*Now load second half
|
|
|
|
bsr lottsh
|
|
|
|
|
|
lea tosav+$10000,a1
|
|
lea conbuf+1(pc),a0
|
|
move.l #$10000,d0
|
|
lp12 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp12
|
|
|
|
|
|
lea tte1(pc),a0
|
|
bsr replfe
|
|
bsr save128
|
|
|
|
|
|
|
|
*2
|
|
bsr lottfh
|
|
|
|
lea tosav,a1
|
|
lea conbuf+2(pc),a0
|
|
move.l #$10000,d0
|
|
lp13 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp13
|
|
|
|
*Now load second half
|
|
|
|
bsr lottsh
|
|
|
|
|
|
lea tosav+$10000,a1
|
|
lea conbuf+2(pc),a0
|
|
move.l #$10000,d0
|
|
lp14 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp14
|
|
|
|
|
|
lea tte2(pc),a0
|
|
bsr replfe
|
|
bsr save128
|
|
|
|
|
|
*3
|
|
bsr lottfh
|
|
|
|
lea tosav,a1
|
|
lea conbuf+3(pc),a0
|
|
move.l #$10000,d0
|
|
lp15 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp15
|
|
|
|
*Now load second half
|
|
|
|
bsr lottsh
|
|
|
|
|
|
lea tosav+$10000,a1
|
|
lea conbuf+3(pc),a0
|
|
move.l #$10000,d0
|
|
lp16 move.b (a0)+,(a1)+
|
|
addq.l #3,a0
|
|
subq.l #1,d0
|
|
bne.s lp16
|
|
|
|
|
|
lea tte3(pc),a0
|
|
bsr replfe
|
|
bsr save128
|
|
|
|
|
|
|
|
|
|
|
|
bra menu
|
|
|
|
|
|
lottsh *load second half of TT ROM to buffer
|
|
|
|
move.w #0,-(sp)
|
|
pea buffr+100(pc)
|
|
move.w #61,-(sp) *open file
|
|
trap #1
|
|
addq.l #8,sp
|
|
*Error check
|
|
tst.w d0
|
|
bmi filertt
|
|
|
|
move.w d0,handl
|
|
|
|
clr.w -(sp) *from start mode
|
|
move.w handl(pc),-(sp) *handle
|
|
pea $40000 *at 256KB from start
|
|
move.w #66,-(sp)
|
|
trap #1
|
|
lea 10(sp),sp
|
|
tst.l d0
|
|
bmi filertt2
|
|
|
|
pea conbuf(pc)
|
|
pea $40000
|
|
move.w handl(pc),-(sp)
|
|
move.w #63,-(sp)
|
|
trap #1
|
|
lea 12(sp),sp
|
|
tst.l d0
|
|
bmi filertt2
|
|
cmp.l #$40000,d0 *check for full filelength load
|
|
bne filertt2
|
|
bsr closfile
|
|
|
|
rts
|
|
|
|
|
|
lottfh *load first half of TT ROM to buffer
|
|
|
|
move.w #0,-(sp)
|
|
pea buffr+100(pc)
|
|
move.w #61,-(sp) *open file
|
|
trap #1
|
|
addq.l #8,sp
|
|
*Error check
|
|
tst.w d0
|
|
bmi filertt
|
|
|
|
move.w d0,handl
|
|
|
|
|
|
pea conbuf(pc)
|
|
pea $40000
|
|
move.w handl(pc),-(sp)
|
|
move.w #63,-(sp)
|
|
trap #1
|
|
lea 12(sp),sp
|
|
tst.l d0
|
|
bmi filertt2
|
|
cmp.l #$40000,d0 *check for full filelength load
|
|
bne filertt2
|
|
bsr closfile
|
|
|
|
rts
|
|
|
|
|
|
filertt2
|
|
bsr closfile
|
|
filertt
|
|
*drop caller
|
|
addq.l #4,sp
|
|
|
|
bra filerr
|
|
|
|
|
|
|
|
supv *move.l $42e.w,orgphyst
|
|
|
|
|
|
|
|
*get TOS version too here
|
|
*Good because of different fileselector possible
|
|
|
|
move.l 4.w,d1
|
|
clr.b d1 *on round address always
|
|
move.l d1,a1
|
|
move.b 2(a1),d0 *TOS ver major
|
|
move.b 3(a1),d1 *TOS ver minor
|
|
|
|
cmp.b #2,d0
|
|
blt.s itstos1
|
|
rts *ret immed if TOS 2 or more
|
|
|
|
itstos1 cmp.b #4,d1
|
|
blt.s under14
|
|
rts
|
|
|
|
under14 st oldtos
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
closfile move.w handl(pc),-(sp)
|
|
move.w #62,-(sp)
|
|
trap #1
|
|
addq.l #4,sp
|
|
rts
|
|
|
|
|
|
|
|
prhex5 move.l d1,d5
|
|
swap d5
|
|
and.w #$000f,d5
|
|
bsr.s conv1
|
|
|
|
prhex4 move.w d1,d5
|
|
and.w #$f000,d5
|
|
moveq #12,d4
|
|
bsr.s conv
|
|
prhex3 move.w d1,d5
|
|
and.w #$0f00,d5
|
|
moveq #8,d4
|
|
bsr.s conv
|
|
prhex2 move.w d1,d5
|
|
and.w #$00f0,d5
|
|
moveq #4,d4
|
|
bsr.s conv
|
|
move.w d1,d5
|
|
and.w #$000f,d5
|
|
bra.s conv1
|
|
conv lsr.w d4,d5
|
|
conv1 add.b #"0",d5
|
|
cmp.b #"9",d5
|
|
ble.s notlet
|
|
addq.b #7,d5 *slovo A-F
|
|
notlet move.b d5,(a1)+
|
|
rts
|
|
|
|
|
|
|
|
fixcrc
|
|
*first check is 256KB long file loaded
|
|
|
|
cmp.l #$40000,realfill
|
|
bne loadfia
|
|
|
|
bsr mabee
|
|
bsr maincrc
|
|
|
|
tst.b crcerf
|
|
beq crcwasok
|
|
|
|
*Write last 4 bytes into loaded file:
|
|
|
|
*Open selected file
|
|
move.w #0,-(sp)
|
|
pea buffr+100(pc)
|
|
move.w #61,-(sp) *open file
|
|
trap #1
|
|
addq.l #8,sp
|
|
*Error check
|
|
tst.w d0
|
|
bmi filerr5
|
|
move.w d0,handl
|
|
|
|
|
|
*Seek to CRC write pos
|
|
clr.w -(sp) *from start mode
|
|
move.w handl(pc),-(sp) *handle
|
|
pea $3FFFC
|
|
move.w #66,-(sp)
|
|
trap #1
|
|
lea 10(sp),sp
|
|
|
|
|
|
pea conbuf+$3FFFC
|
|
pea 4
|
|
move.w handl(pc),-(sp)
|
|
move.w #64,-(sp)
|
|
trap #1
|
|
lea 12(sp),sp
|
|
|
|
cmp.l #4,d0 *check save
|
|
bne saerr5
|
|
|
|
bsr closfile
|
|
|
|
lea alertcrcf(pc),a0
|
|
bsr doalert
|
|
bra menu
|
|
|
|
filerr5 lea alertde(pc),a0
|
|
bsr doalert
|
|
bra menu
|
|
|
|
saerr5
|
|
bsr closfile
|
|
lea alertsav(pc),a0
|
|
bsr doalert
|
|
bra menu
|
|
|
|
|
|
*CRC calculation part for TOS 2.06 :
|
|
*It is taken (disassembled) from TOS 2.06
|
|
|
|
|
|
|
|
maincrc clr.b crcerf
|
|
move.l #$1FFFE,d7
|
|
move.w #1,d6
|
|
lea conbuf(pc),a5
|
|
lE0080A move.w #2,-(a7)
|
|
move.l d7,-(a7)
|
|
move.l a5,-(a7)
|
|
bsr.s getcrc
|
|
add.l #$A,a7
|
|
movea.l a5,a0
|
|
adda.l #$3FFFC,a0
|
|
move.b (a0),d1
|
|
lsl.w #8,d1
|
|
move.b 2(a0),d1
|
|
cmp.w d1,d0
|
|
* bne.s $E00858
|
|
beq.s oddcrc
|
|
st crcerf *set flag
|
|
|
|
oddcrc *Write new CRC to buffer :
|
|
|
|
move.b d0,2(a0)
|
|
lsr.w #8,d0
|
|
move.b d0,(a0)
|
|
|
|
addq.l #1,a5
|
|
dbf d6,lE0080A
|
|
rts
|
|
|
|
|
|
|
|
|
|
crcerf dc.w 0 *error flag
|
|
|
|
|
|
getcrc
|
|
movea.l 4(a7),a0
|
|
move.l 8(a7),d2
|
|
movea.w $C(a7),a1
|
|
clr.w d0
|
|
clr.w d1
|
|
clr.w d3
|
|
lea crctable(pc),a2
|
|
lE015CC move.w d0,d1
|
|
lsl.w #8,d0
|
|
lsr.w #8,d1
|
|
move.b (a0),d3
|
|
adda.l a1,a0
|
|
eor.b d3,d1
|
|
add.w d1,d1
|
|
move.w 0(a2,d1.w),d4
|
|
eor.w d4,d0
|
|
subq.l #1,d2
|
|
bne.s lE015CC
|
|
rts
|
|
|
|
|
|
crctable
|
|
DC.B 0,0,$10,$21,$20,$42,$30,$63
|
|
DC.B $40,$84,$50,$A5,$60,$C6,$70,$E7
|
|
DC.B $81,8,$91,$29,$A1,$4A,$B1,$6B
|
|
DC.B $C1,$8C,$D1,$AD,$E1,$CE,$F1,$EF
|
|
DC.B $12,$31,2,$10,$32,$73,$22,$52
|
|
DC.B $52,$B5,$42,$94,$72,$F7,$62,$D6
|
|
DC.B $93,$39,$83,$18,$B3,$7B,$A3,$5A
|
|
DC.B $D3,$BD,$C3,$9C,$F3,$FF,$E3,$DE
|
|
DC.B $24,$62,$34,$43,4,$20,$14,1
|
|
DC.B $64,$E6,$74,$C7,$44,$A4,$54,$85
|
|
DC.B $A5,$6A,$B5,$4B,$85,$28,$95,9
|
|
DC.B $E5,$EE,$F5,$CF,$C5,$AC,$D5,$8D
|
|
DC.B $36,$53,$26,$72,$16,$11,6,$30
|
|
DC.B $76,$D7,$66,$F6,$56,$95,$46,$B4
|
|
DC.B $B7,$5B,$A7,$7A,$97,$19,$87,$38
|
|
DC.B $F7,$DF,$E7,$FE,$D7,$9D,$C7,$BC
|
|
DC.B $48,$C4,$58,$E5,$68,$86,$78,$A7
|
|
DC.B 8,$40,$18,$61,$28,2,$38,$23
|
|
DC.B $C9,$CC,$D9,$ED,$E9,$8E,$F9,$AF
|
|
DC.B $89,$48,$99,$69,$A9,$A,$B9,$2B
|
|
DC.B $5A,$F5,$4A,$D4,$7A,$B7,$6A,$96
|
|
DC.B $1A,$71,$A,$50,$3A,$33,$2A,$12
|
|
DC.B $DB,$FD,$CB,$DC,$FB,$BF,$EB,$9E
|
|
DC.B $9B,$79,$8B,$58,$BB,$3B,$AB,$1A
|
|
DC.B $6C,$A6,$7C,$87,$4C,$E4,$5C,$C5
|
|
DC.B $2C,$22,$3C,3,$C,$60,$1C,$41
|
|
DC.B $ED,$AE,$FD,$8F,$CD,$EC,$DD,$CD
|
|
DC.B $AD,$2A,$BD,$B,$8D,$68,$9D,$49
|
|
DC.B $7E,$97,$6E,$B6,$5E,$D5,$4E,$F4
|
|
DC.B $3E,$13,$2E,$32,$1E,$51,$E,$70
|
|
DC.B $FF,$9F,$EF,$BE,$DF,$DD,$CF,$FC
|
|
DC.B $BF,$1B,$AF,$3A,$9F,$59,$8F,$78
|
|
DC.B $91,$88,$81,$A9,$B1,$CA,$A1,$EB
|
|
DC.B $D1,$C,$C1,$2D,$F1,$4E,$E1,$6F
|
|
DC.B $10,$80,0,$A1,$30,$C2,$20,$E3
|
|
DC.B $50,4,$40,$25,$70,$46,$60,$67
|
|
DC.B $83,$B9,$93,$98,$A3,$FB,$B3,$DA
|
|
DC.B $C3,$3D,$D3,$1C,$E3,$7F,$F3,$5E
|
|
DC.B 2,$B1,$12,$90,$22,$F3,$32,$D2
|
|
DC.B $42,$35,$52,$14,$62,$77,$72,$56
|
|
DC.B $B5,$EA,$A5,$CB,$95,$A8,$85,$89
|
|
DC.B $F5,$6E,$E5,$4F,$D5,$2C,$C5,$D
|
|
DC.B $34,$E2,$24,$C3,$14,$A0,4,$81
|
|
DC.B $74,$66,$64,$47,$54,$24,$44,5
|
|
DC.B $A7,$DB,$B7,$FA,$87,$99,$97,$B8
|
|
DC.B $E7,$5F,$F7,$7E,$C7,$1D,$D7,$3C
|
|
DC.B $26,$D3,$36,$F2,6,$91,$16,$B0
|
|
DC.B $66,$57,$76,$76,$46,$15,$56,$34
|
|
DC.B $D9,$4C,$C9,$6D,$F9,$E,$E9,$2F
|
|
DC.B $99,$C8,$89,$E9,$B9,$8A,$A9,$AB
|
|
DC.B $58,$44,$48,$65,$78,6,$68,$27
|
|
DC.B $18,$C0,8,$E1,$38,$82,$28,$A3
|
|
DC.B $CB,$7D,$DB,$5C,$EB,$3F,$FB,$1E
|
|
DC.B $8B,$F9,$9B,$D8,$AB,$BB,$BB,$9A
|
|
DC.B $4A,$75,$5A,$54,$6A,$37,$7A,$16
|
|
DC.B $A,$F1,$1A,$D0,$2A,$B3,$3A,$92
|
|
DC.B $FD,$2E,$ED,$F,$DD,$6C,$CD,$4D
|
|
DC.B $BD,$AA,$AD,$8B,$9D,$E8,$8D,$C9
|
|
DC.B $7C,$26,$6C,7,$5C,$64,$4C,$45
|
|
DC.B $3C,$A2,$2C,$83,$1C,$E0,$C,$C1
|
|
DC.B $EF,$1F,$FF,$3E,$CF,$5D,$DF,$7C
|
|
DC.B $AF,$9B,$BF,$BA,$8F,$D9,$9F,$F8
|
|
DC.B $6E,$17,$7E,$36,$4E,$55,$5E,$74
|
|
DC.B $2E,$93,$3E,$B2,$E,$D1,$1E,$F0
|
|
DC.B 0,$1B,$31,$32,$33,$34,$35,$36
|
|
DC.B $37,$38,$39,$30,$2D,$3D,8,9
|
|
DC.B $71,$77,$65,$72,$74,$79,$75,$69
|
|
DC.B $6F,$70,$5B,$5D,$D,0,$61,$73
|
|
DC.B $64,$66,$67,$68,$6A,$6B,$6C,$3B
|
|
DC.B $27,$60,0,$23,$7A,$78,$63,$76
|
|
DC.B $62,$6E,$6D,$2C,$2E,$2F,0,0
|
|
DC.B 0,$20,0,0,0,0
|
|
|
|
*CRC part end
|
|
|
|
|
|
loadfia lea alertlof(pc),a0
|
|
crccomo bsr doalert
|
|
bra menu
|
|
|
|
crcwasok lea alertcrcu(pc),a0
|
|
bra.s crccomo
|
|
|
|
|
|
|
|
*AES dialog subrutines
|
|
|
|
|
|
*DRAW DIALOG SUBRUTINE
|
|
*In parameter:a0-tree adress
|
|
|
|
opdial *put tree adress on all places where needed
|
|
lea fca(pc),a1
|
|
move.l a0,(a1)
|
|
* move.l a0,oda-fca(a1)
|
|
move.l a0,fda-fca(a1)
|
|
move.l a0,oca-fca(a1)
|
|
move.l a0,oda2-fca(a1)
|
|
move.l a0,oda2f-fca(a1)
|
|
move.l a0,oda3-fca(a1)
|
|
* move.l a0,oboff+2-fca(a1)
|
|
*centre objekt
|
|
|
|
form_center
|
|
fca ds.l 1
|
|
*Enter coords
|
|
lea cost(pc),a1
|
|
lea intout+2(pc),a0
|
|
bsr.s copint2
|
|
bsr.s copints
|
|
* lea odp(pc),a1
|
|
* bsr.s copints
|
|
lea odp2+4(pc),a1
|
|
bsr.s copints
|
|
lea fdf+2(pc),a1
|
|
bsr.s copints
|
|
bsr.s copints
|
|
lea obnu+4(pc),a1
|
|
|
|
copints lea cost(pc),a0
|
|
copint2 moveq #3,d0
|
|
copil move.w (a0)+,(a1)+
|
|
dbf d0,copil
|
|
rts
|
|
|
|
|
|
|
|
*Reserve screen part
|
|
resscp
|
|
form_dial
|
|
dc.w 0
|
|
cost ds.w 8
|
|
rts
|
|
|
|
|
|
|
|
drdial
|
|
moveq #0,d0
|
|
bra obdr *ret via
|
|
|
|
|
|
*Object exit rutine "Form do"
|
|
|
|
fodial
|
|
form_do
|
|
dc.w 0
|
|
fda ds.l 1
|
|
move.w intout(pc),excod *Save exit button
|
|
rts
|
|
|
|
cldial bsr.s noredr
|
|
|
|
*Back screenpart
|
|
backsp
|
|
form_dial
|
|
fdf dc.w 3
|
|
ds.w 8
|
|
|
|
rts
|
|
|
|
obsel move.w d0,obnu
|
|
move.w #1,status
|
|
bra.s ochl
|
|
obdes move.w d1,obnu
|
|
bra.s clrstat
|
|
|
|
noredr clr.w status+2 *No redraw by leave dialog
|
|
exobdes
|
|
move.w excod(pc),obnu
|
|
clrstat clr.w status *normal status
|
|
ochl
|
|
objc_change
|
|
obnu dc.w 0,0,0,0,0,0
|
|
status dc.w 0,1
|
|
oca ds.l 1
|
|
move.w #1,status+2 * redraw needed after again
|
|
rts
|
|
|
|
|
|
|
|
doalert
|
|
move.l a0,ala
|
|
form_alert
|
|
dc.w 1 *Default
|
|
ala dc.l 0
|
|
move.w intout(pc),d0
|
|
cmp.w #1,d0 *test pressed key
|
|
rts
|
|
|
|
|
|
|
|
obdr move.w d0,odp2
|
|
objc_draw
|
|
odp2 dc.w 0,3 *depth=3 used
|
|
ds.w 4
|
|
oda2 ds.l 1
|
|
rts
|
|
|
|
|
|
clobdr *startobject is mainbox
|
|
objc_draw
|
|
odp3 dc.w 0,2 *depth=2 used
|
|
clip3 ds.w 4
|
|
oda3 ds.l 1
|
|
rts
|
|
|
|
obdrf move.w d0,odp2f
|
|
bsr AEScall
|
|
dc.w 42
|
|
odp2f dc.w 0,0
|
|
ds.w 4
|
|
oda2f ds.l 1
|
|
rts
|
|
|
|
|
|
mctrl
|
|
wind_update
|
|
dc.w 3
|
|
rts
|
|
|
|
mctab
|
|
wind_update
|
|
dc.w 2
|
|
rts
|
|
|
|
mafing moveq #3,d1
|
|
bra.s grafmo
|
|
maarr moveq #0,d1
|
|
bra.s grafmo
|
|
mabee moveq #2,d1
|
|
grafmo move.w d1,mousf
|
|
graf_mouse
|
|
mousf dc.w 3
|
|
dc.l 20000 *not used
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*Central rutine for param. adress serve etc.
|
|
AEScall move.l (sp),a1 *reta
|
|
move.w (a1)+,d0 *function number, a1 now hold intinadr (or reta)
|
|
lea AESct-5(pc),a3
|
|
funsrl addq.l #5,a3
|
|
cmp.b (a3),d0
|
|
bne.s funsrl
|
|
moveq #4,d1
|
|
clr.l d0
|
|
lea contrl(pc),a2
|
|
move.l a2,a0
|
|
fuccl move.b (a3)+,d0
|
|
move.w d0,(a2)+
|
|
dbf d1,fuccl
|
|
|
|
lea AESPB(pc),a2
|
|
move.l a1,8(a2) *pintin
|
|
move.w 2(a0),d0 *# of intin
|
|
lsl.w #1,d0
|
|
add.l d0,a1 *adress of addrin
|
|
move.w 6(a0),d0
|
|
beq.s noadrin
|
|
move.l a1,16(a2) *paddrin
|
|
lsl.w #2,d0 *mult by 4
|
|
add.l d0,a1
|
|
noadrin move.l a1,(sp) *Skip datas! -prepare retadress
|
|
move.l a2,d1
|
|
move.w #200,d0
|
|
trap #2 *Call AES function
|
|
rts
|
|
|
|
|
|
AESPB dc.l contrl * pcontrol
|
|
pglobal dc.l global
|
|
pintin ds.l 1
|
|
pintout dc.l intout
|
|
paddrin ds.l 1
|
|
paddrout dc.l addrout
|
|
|
|
*Tables with AES control blocks of (only) used functions
|
|
AESct *must contents all in prg. used functions
|
|
dc.b 10,0,1,0,0 *APPL init
|
|
dc.b 19,0,1,0,0 *APPL exit
|
|
dc.b 21,3,5,0,0 *EVNT button
|
|
dc.b 23,0,1,1,0 *Evnt message
|
|
dc.b 42,6,1,1,0 *Objc draw
|
|
dc.b 43,4,1,1,0 *Objc find
|
|
dc.b 44,1,3,1,0 *Objc offset
|
|
dc.b 47,8,1,1,0 *Objc change
|
|
dc.b 50,1,1,1,0 *Form do (dialog)
|
|
dc.b 51,9,1,0,0 *Form dial
|
|
dc.b 52,1,1,1,0 *Form alert
|
|
dc.b 54,0,5,1,0 *Form center
|
|
dc.b 78,1,1,1,0 *Graf mouse
|
|
dc.b 79,0,5,0,0 *Graf mkstate
|
|
dc.b 90,0,2,2,0 *Old Fsel for TOS 1.02 and 1.00
|
|
dc.b 91,0,2,3,0 *Fsel input
|
|
dc.b 107,1,1,0,0 *Wind update
|
|
dc.b 114,1,1,1,0 *RSRC obfix
|
|
dc.b 0
|
|
even
|
|
|
|
|
|
filesel clr.l buffr
|
|
|
|
tst.b oldtos
|
|
bne.s fiselold
|
|
|
|
move.l a1,fsmadr
|
|
fsel_i
|
|
* bsr AEScall
|
|
* dc.w 91,0,2,3,0 *Only for new TOS!!!
|
|
dc.l path
|
|
dc.l buffr
|
|
fsmadr ds.l 1
|
|
tst.w intout
|
|
beq.s fisend
|
|
tst.w intout+2
|
|
beq.s fisend
|
|
|
|
fsok lea buffr+100(pc),a1
|
|
lea path(pc),a0
|
|
bsr.s pdcopy
|
|
*Now drop attributes of select
|
|
droat
|
|
subq.l #1,a0
|
|
cmp.b #"\",-(a1) *is subdir end marker
|
|
bne.s droat
|
|
addq.l #1,a1 *move forward
|
|
lea 2(a0),a2 *store ext (with . ) begin from path
|
|
|
|
lea buffr(pc),a0
|
|
tst.b (a0) *check for nothing selected or written
|
|
beq.s fis2
|
|
bra.s pdcopy
|
|
|
|
fisend
|
|
fis2 clr.l buffr+100
|
|
rts
|
|
|
|
|
|
fiselold *AES 90 for older TOS
|
|
|
|
fsel_input
|
|
dc.l path
|
|
dc.l buffr
|
|
|
|
tst.w intout
|
|
beq.s fisend
|
|
tst.w intout+2
|
|
beq.s fisend
|
|
bra.s fsok
|
|
|
|
|
|
|
|
pdcopy
|
|
tst.b (a0)
|
|
beq.s pdret
|
|
move.b (a0)+,(a1)+
|
|
bra.s pdcopy
|
|
|
|
pdret move.b (a0),(a1) *For case that longer was there prior
|
|
rts
|
|
|
|
|
|
*Insert extension on path end
|
|
*a1 - pointer
|
|
putext lea path(pc),a0
|
|
searz tst.b (a0)+
|
|
bne.s searz
|
|
*Now search back for \
|
|
searbs cmp.b #"\",-(a0)
|
|
bne.s searbs
|
|
addq.l #1,a0
|
|
|
|
moveq #5,d1 *copy 4-5 chars and zero term.
|
|
initc move.b (a1)+,(a0)+
|
|
dbf d1,initc
|
|
clr.b (a0)
|
|
rts
|
|
|
|
|
|
*The RSC integrated - source made with RSCTOASM
|
|
|
|
|
|
rsc_obnum equ 14
|
|
|
|
rsc_obs dc.w 13 * 14 objects in RSC *
|
|
|
|
form1 dc.w -1,1,13
|
|
dc.w 20,0,16 *0*
|
|
dc.l $21100
|
|
dc.w 0,$201,46,$50C
|
|
|
|
dc.w 2,-1,-1
|
|
dc.w 22,0,0 *1*
|
|
dc.l ted1
|
|
dc.w 3,$400,39,$401
|
|
|
|
dc.w 3,-1,-1
|
|
dc.w 26,5
|
|
dc.b 0
|
|
flag1 dc.b 0 *2*
|
|
dc.l text1
|
|
dc.w 29,$502,16,$401
|
|
|
|
dc.w 7,4,6
|
|
dc.w 20,0,0 *3*
|
|
dc.l $FF1101
|
|
dc.w 1,$203,27,7
|
|
|
|
dc.w 5,-1,-1
|
|
dc.w 26,17
|
|
dc.b 0
|
|
flag2 dc.b 1 *4* preselected
|
|
dc.l text2
|
|
dc.w 5,1,17,$201
|
|
|
|
dc.w 6,-1,-1
|
|
dc.w 26,17
|
|
dc.b 0
|
|
flag3 dc.b 0 *5*
|
|
dc.l text3
|
|
dc.w 1,$103,25,$301
|
|
|
|
dc.w 3,-1,-1
|
|
dc.w 26,17
|
|
dc.b 0
|
|
flag4 dc.b 0 *6*
|
|
dc.l text4
|
|
dc.w 5,$405,16,$201
|
|
|
|
dc.w 8,-1,-1
|
|
dc.w 21,0,0 *7*
|
|
dc.l ted2
|
|
dc.w 9,$602,11,1
|
|
|
|
dc.w 9,-1,-1
|
|
dc.w 21,0,0 *8*
|
|
dc.l ted3
|
|
dc.w 32,$404,10,1
|
|
|
|
dc.w 10,-1,-1
|
|
dc.w 22,0,0 *9*
|
|
dc.l ted4
|
|
dc.w 30,$505,14,1
|
|
|
|
dc.w 11,-1,-1
|
|
dc.w 21,0,0 *10*
|
|
dc.l ted5
|
|
dc.w 34,$706,6,1
|
|
|
|
dc.w 12,-1,-1
|
|
dc.w 26,5
|
|
dc.b 0
|
|
flag5 dc.b 0 *11*
|
|
dc.l text5
|
|
dc.w 32,$308,11,$201
|
|
|
|
dc.w 13,-1,-1
|
|
dc.w 26,5
|
|
dc.b 0
|
|
flag6 dc.b 0 *12*
|
|
dc.l text6
|
|
dc.w 36,$40A,9,$401
|
|
|
|
dc.w 0,-1,-1
|
|
dc.w 26,37
|
|
dc.b 0
|
|
flag7 dc.b 0 *13*
|
|
dc.l text7
|
|
dc.w 13,11,20,1
|
|
|
|
* Tedinfo blocks *
|
|
|
|
ted1 dc.l text8,null,null
|
|
dc.w 3,6,2,$1113
|
|
dc.w 0,-1,29,1
|
|
|
|
ted2 dc.l text9,null,null
|
|
dc.w 3,6,0,$1180
|
|
dc.w 0,-1,12,1
|
|
|
|
ted3 dc.l text10,null,null
|
|
dc.w 3,6,0,$1180
|
|
dc.w 0,-1,11,1
|
|
|
|
ted4 dc.l text11,null,null
|
|
dc.w 3,6,2,$1180
|
|
dc.w 0,-1,15,1
|
|
|
|
ted5 dc.l text12,null,null
|
|
dc.w 3,6,0,$1180
|
|
dc.w 0,-1,7,1
|
|
|
|
* Text data *
|
|
|
|
text1 dc.b 'LOAD IMAGE FILE',0
|
|
text2 dc.b 'In 2 parts - L/H',0
|
|
text3 dc.b 'In 6 parts L/H <=TOS 1.04',0
|
|
text4 dc.b 'In 4 parts - TT',0
|
|
text5 dc.b ' SPLIT ! ',0
|
|
text6 dc.b ' E X I T ',0
|
|
text7 dc.b 'Fix CRC for TOS 2.06',0
|
|
text8 dc.b 'Atari TOS ROM splitter by PP',0
|
|
text9 dc.b ' Split in: ',0
|
|
text10 dc.b 'Loaded is:',0
|
|
text11 dc.b ' - ',0
|
|
text12 dc.b ' KB',0
|
|
null dc.b 0,0
|
|
|
|
|
|
|
|
|
|
alertde dc.b '[3][Load error!][Damn!]',0
|
|
alertsav dc.b '[3][Save error!][Damn!]',0
|
|
|
|
alertcrcu dc.b '[0][ CRC was OK|Nothing is changed ][Thanks]',0
|
|
|
|
alertcrcf dc.b '[0][CRC is fixed !][Thanks]',0
|
|
|
|
alertlof dc.b '[3][First load ROM!][Yes]',0
|
|
|
|
|
|
|
|
initst dc.b "*.*",0,0
|
|
|
|
|
|
fsloadm dc.b "LOAD ROM...",0
|
|
|
|
*Extensions for save:
|
|
|
|
loet dc.b ".LO",0
|
|
hiet dc.b ".HI",0
|
|
|
|
loe0 dc.b ".LO0",0
|
|
hie0 dc.b ".HI0",0
|
|
loe1 dc.b ".LO1",0
|
|
hie1 dc.b ".HI1",0
|
|
loe2 dc.b ".LO2",0
|
|
hie2 dc.b ".HI2",0
|
|
|
|
tte0 dc.b ".TT0",0
|
|
tte1 dc.b ".TT1",0
|
|
tte2 dc.b ".TT2",0
|
|
tte3 dc.b ".TT3",0
|
|
|
|
|
|
|
|
|
|
|
|
even
|
|
|
|
oldtos dc.w 0
|
|
errflag ds.w 0
|
|
|
|
*Put here current drive.... :
|
|
path dc.b "D:\*.*",0,0,0
|
|
|
|
even
|
|
|
|
SECTION BSS
|
|
|
|
ds.b 512 *place for path
|
|
|
|
savfn ds.b 512 *for save filename
|
|
|
|
excod ds.w 1
|
|
|
|
|
|
contrl ds.w 5
|
|
global ds.l 16
|
|
intout ds.w 7 *max 7
|
|
addrout ds.l 2 *max 2
|
|
emb ds.w 8
|
|
|
|
|
|
filelen ds.l 1
|
|
realfill ds.l 1
|
|
handl ds.w 1
|
|
orgphyst ds.l 1
|
|
buffr ds.b 512
|
|
|
|
conbuf ds.b $40000 *for 256KB
|
|
tosav ds.b $20000 *128K
|
|
|
|
|
|
stack ds.b 368
|
|
|
|
fin
|
|
|
|
|
|
|