home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
beermon
/
bmsourcecode.lha
/
MM.s
< prev
Wrap
Text File
|
1993-08-14
|
314KB
|
16,673 lines
;
; BeerMon sourcecode, FreeWare
;
version=46
rev="c"
chksum=$20630d26 ;the value you get in D0 after 'j chkmon'
;
; note: use ASM-ONE V1.02 (huuu, why doesn't ODD work correctly?)
; or any improved version of it. After assembling, use 'e' to
; include that damn brilliant logo :-) bevor saving the executable.
;
; you may modify as much as you want, but PLEASE don't rape
; it corrupt...
;
; (C) by Carnivore/BeerMacht, Jun 93 - Blessed are the sick.
;
; "With my art I am the fist in the face of god"
>extern "beermon.bitmap",dostrkbuf
CloseLibrary = -414
FindResident = -96
OldOpenLibrary = -408
OpenLibrary = -552
Supervisor = -30
Forbid = -132
GetMsg = -372
ReplyMsg = -378
WaitPort = -384
work512 =$074000
work1mb =$0f4000
work1.5mb =$174000
work2mb =$1f4000
ddmfmwords=$18d0
hdmfmwords=$18e0*2
xchars=80
xpixel=xchars*8
dsksize=hdmfmwords*2 ;bytes
sprsize=76
copsize=16*4
miscsize=dsksize+sprsize+copsize
histnum= 10 ;number of history lines
brkpnum= 10 ;number of breakpoints
mtchnum= 100 ;number of matchbuffer entries
sndintstep=$10
fkeylen=20
retry=3
stepcount = 3000*100/141 ;stepdelay 3ms
settlecount = 15000*100/141 ;settledelay 15ms
time1ms = 1000*100/141 ;disk test intervall 1ms
ImploderID = "IMP!"
LF = 10 ;line feed
movec_sfc.d0 = $4e7a0000
movec_dfc.d0 = $4e7a0001
movec_cacr.d0 = $4e7a0002
movec_cacr.d7 = $4e7a7002
movec_cacr.a5 = $4e7ad002
movec_vbr.d0 = $4e7a0801
movec_vbr.a5 = $4e7ad801
movec_caar.d0 = $4e7a0802
movec_caar.a5 = $4e7ad802
movec_msp.a5 = $4e7ad803
movec_urp.a5 = $4e7ad806 ;68040
movec_d0.sfc = $4e7b0000
movec_d0.dfc = $4e7b0001
movec_d0.cacr = $4e7b0002
movec_d7.cacr = $4e7b7002
movec_a5.cacr = $4e7bd002
movec_a5.vbr = $4e7bd801
movec_a5.caar = $4e7bd802
cinva_bc = $f4d8 ;68040
cpusha_bc = $f4f8 ;68040
fmovem_fp0_7.a2 = $f212f0ff
fmovem_a2.fp0_7 = $f212d0ff
fmovem_fpcx.a2 = $f212bc00 ;fpcr/fpsr/fpiar
fmovem_a2.fpcx = $f2129c00 ;fpcr/fpsr/fpiar
fsave_sp = $f327
frestore_sp = $f35f
fmove.x_a3.fp0 = $f2134800 ;fmove.x (a3),fp0
fmove.p_fp0.a3 = $f2136c11 ;fmove.p fp0,(a3){$11}
fmove_fpsr.d1 = $f201a800 ;fmove.l fpsr,d1
pmovefd_a0.tt0 = $f0100900 ;long
pmovefd_a0.tt1 = $f0100d00 ;long
pmovefd_a0.tc = $f0104100 ;long
pmovefd_a0.srp = $f0104900 ;quad
pmovefd_a0.crp = $f0104d00 ;quad
pmove_a2.tt0 = $f0120800 ;long
pmove_a2.tt1 = $f0120c00 ;long
pmove_a2.tc = $f0124000 ;long
pmove_a2.drp = $f0124400 ;quad ;68851
pmove_a2.srp = $f0124800 ;quad
pmove_a2.crp = $f0124c00 ;quad
pmove_a2.mmusr = $f0126000 ;word
pmove_tt0.a2 = $f0120a00 ;long
pmove_tt1.a2 = $f0120e00 ;long
pmove_tc.a2 = $f0124200 ;long
pmove_drp.a2 = $f0124600 ;quad ;68851
pmove_srp.a2 = $f0124a00 ;quad
pmove_crp.a2 = $f0124e00 ;quad
pmove_mmusr.a2 = $f0126200 ;word
base=*+$c000
run: movem.l a6,-(a7) ;the jmp entry,flags ok
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
movem.l d0-d7/a0-a5,regs-base(a6)
sub.l a1,a1 ;'x' resets/returns to cli
bra.b mutil0
thehit: movem.l a6,-(a7) ;interrupt entry,flags ok
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
movem.l d0-d7/a0-a5,regs-base(a6)
movem.l 4+2(a7),a4 ;the pc
lea -1.w,a1 ;'x' returns into prg
mutil0: movem.w a1,frzflag-base(a6)
movem.l (a7)+,a0 ;a6
movem.l a0/a7,regs+56-base(a6) ;a6/a7
lea $bfe000,a1
lea 3.w,a3 ;don't change any flags
lea 2.w,a2
movem.w a3,$0200(a1) ;$bfe201:lmouse,ovl
movem.w a2,(a1) ;$bfe001
lea stackend-$7ffe-base(a6),a3
lea $7ffe(a3),a7 ;lea $80000,a7 (usp|isp|msp)
bsr.w getvbr
move.l a5,vbreg-base(a6)
move.l a7,a3
lea $10.w,a0 ;illegal vec
add.l vbreg-base(a6),a0
move.l (a0),a1 ;old illegal vec
lea savereg(pc),a2 ;uses d0
movem.l a2,(a0) ;?flags ok
illegal ;store sr,noint,go sv
move.l a7,regs+64+4-base(a6) ;isp
move usp,a7
move.l a7,regs+64-base(a6) ;usp
move.l a3,a7
tst.b frzflag-base(a6)
bne.b setpc
sub.l a4,a4 ;clear pc
setpc: movem.l a4,regs+64+24-base(a6) ;pc
lea $de0000,a2
move.w (a2),timeout-base(a6)
and.w #$7f7f,(a2) ;enable timeout, DSACK
lea illtrap(pc),a2
move.l a2,(a0)
moveq #0,d6 ;68000
dc.l movec_vbr.a5 ;68010?
move.l a5,regs+64+12-base(a6) ;vbr
dc.l movec_sfc.d0
move.b d0,sfcdfc+0-base(a6)
dc.l movec_dfc.d0
move.b d0,sfcdfc+1-base(a6) ;sfcdfc
moveq #1,d6 ;68010
dc.l movec_msp.a5 ;68020
move.l a5,regs+64+8-base(a6) ;msp
dc.l movec_cacr.a5
move.l a5,regs+64+16-base(a6) ;cacr
move.l a5,d7
bset #4,d7
bclr #0,d7
dc.l movec_d7.cacr
dc.l movec_cacr.d7
dc.l movec_a5.cacr ;restore cacr
moveq #2,d6 ;68020
btst #4,d7 ;68020/30
beq.b illt20
moveq #3,d6 ;68030
illt20: dc.l movec_urp.a5
moveq #4,d6 ;68040
illtrap:move.l a3,a7 ;restore isp
move.l a1,(a0) ;restore illegal vec
move.b d6,cpu-base(a6)
subq.b #2,d6 ;68020?
beq.b getcaar
subq.b #1,d6 ;68030?
bne.b nocaar
getcaar:dc.l movec_caar.a5 ;68020/30 only
move.l a5,regs+64+20-base(a6) ;caar
nocaar:
move.w regs+64+28-base(a6),d0 ;start sr
lea regs+60-base(a6),a1 ;ptr start a7
move.l (a1)+,a0 ;start a7
btst #13,d0
beq.b fixa7 ;start usermode
addq.w #4,a1 ;skip usp,set isp
btst #12,d0
beq.b fixa7
addq.w #4,a1 ;skip isp,set msp
fixa7: move.l a0,(a1)
moveq #0,d6 ;no fpu
lea $2c.w,a0 ;line-f vector
add.l vbreg-base(a6),a0
move.l (a0),a1
lea fpuline(pc),a2
move.l a2,(a0)
dc.w fsave_sp ;68881/2
cmp.b #4,cpu-base(a6) ;68040?
bne.b no40fpu
moveq #3,d6 ;68040fpu
bra.b fpurest
no40fpu:moveq #1,d6 ;68881
cmp.b #$18,1(a7) ;68881
beq.b fpurest
moveq #2,d6 ;68882
fpurest:dc.w frestore_sp
fpuline:move.l a3,a7
move.b d6,fpu-base(a6)
moveq #0,d6 ;no mmu
tst.b econflg-base(a6)
bne.b mmuline ;economy cpu
lea mmuline(pc),a2
move.l a2,(a0)
cmp.b #4,cpu-base(a6) ;68040?
bne.b nommu40
moveq #3,d6 ;68040 mmu
bra.b mmuline
nommu40:lea mmutt0-base(a6),a2 ;dummybuf
dc.l pmove_tc.a2 ;dummycmd
moveq #1,d6 ;68851
dc.l pmove_tt0.a2 ;dummycmd
moveq #2,d6 ;68030 mmu
mmuline:move.l a3,a7
move.l a1,(a0) ;restore line-f
move.b d6,mmu-base(a6)
bsr.w savemmu
bsr.w savefpu
move.l regs+64-base(a6),startusp-base(a6)
move.l regs+64+4-base(a6),startisp-base(a6)
move.l regs+64+8-base(a6),startmsp-base(a6)
move.l regs+64+12-base(a6),startvbr-base(a6)
move.l regs+64+16-base(a6),startcacr-base(a6)
move.l regs+64+20-base(a6),startcaar-base(a6)
move.w regs+64+28-base(a6),startsr-base(a6)
move.w sfcdfc-base(a6),startsfcdfc-base(a6)
;init
lea $dff002,a1
wtblt: btst #6,(a1)
bne.b wtblt ;blitter still busy
lea rdff002-base(a6),a0
moveq #7,d0 ;set the setbit
move.w (a1),(a0)+ ;rdff002
bset d0,-2(a0)
move.w $0e(a1),(a0)+ ;rdff010
bset d0,-2(a0)
move.w $1a(a1),(a0)+ ;rdff01c
bset d0,-2(a0)
move.w $1c(a1),(a0)+ ;rdff01e
bset d0,-2(a0)
move.l #$7fff7fff,$98(a1) ;$dff09a
move.w #$7fff,$94(a1) ;$dff096 all dma off
moveq #0,d0
move.w d0,$34(a1) ;$dff036 clr.w forbidden!
move.w d0,$17e(a1) ;$dff180
move.w $7c(a1),d0
cmp.b #$f8,d0 ;aga?
bne.b noaga
move.w #0,$1fc(a1) ;reset sprites
noaga:
moveq #0,d1
move.b modeflg-base(a6),d1
move.b rowstab(pc,d1.w),d0
move.b d0,d1
mulu #xchars*8,d1
move.l d1,scrsize-base(a6)
add.l #miscsize,d1
move.l d1,wrksize-base(a6)
move.b d0,rows-base(a6)
subq.b #1,d0
move.b d0,rowsm1-base(a6)
subq.b #1,d0
move.b d0,rowsm2-base(a6)
bra.b rowsok
rowstab:dc.b 32,64,25,50,60,32
rowsok:
moveq #$08,d3 ;move.l #$80000,d3; 512K chip?
swap d3
move.l d3,himem-base(a6)
move.l #work512,defwork-base(a6)
btst #5,2(a1) ;$dff004
beq.b nobig
bsr.w memtest ;test if 1mb, bufadr useless
beq.b nobig
moveq #$10,d3 ;move.l #$100000,d3; 1M chip
swap d3
move.l d3,himem-base(a6)
move.l #work1mb,defwork-base(a6)
bsr.w memtest
beq.b nobig
moveq #$18,d3 ;move.l #$180000,d3; 1.5M chip
swap d3
move.l d3,himem-base(a6)
move.l #work1.5mb,defwork-base(a6)
bsr.w memtest
beq.b nobig
move.l #$200000,himem-base(a6) ;2M chip
move.l #work2mb,defwork-base(a6)
nobig:
move.l defwork-base(a6),a0 ;in chipmem
lea progend-base,a1
cmp.l a0,a1 ;code/absworkspace overlap?
bls.b memsave
add.l wrksize-base(a6),a0
lea run(pc),a1
cmp.l a0,a1
bcc.b memsave
sub.l wrksize-base(a6),a1
move.l a1,defwork-base(a6)
memsave:
st abswork-base(a6) ;absolute workspace, not memlist
bsr.w chkexec
bne.b absmem
move.l $142(a0),a1 ;memheader
moveq #1,d1 ;chipmem
bsr.w grabmem
beq.b nogchip
move.l himem-base(a6),d0
sub.l wrksize-base(a6),d0
cmp.l d0,a1 ;memlist out of highmem
bhi.b nogchip
move.l a1,defwork-base(a6) ;use entry as workspace
sf abswork-base(a6)
nogchip:clr.l bufadr-base(a6)
move.l $142(a0),a1 ;memheader
moveq #2,d1 ;fastmem
bsr.w grabmem
beq.b nogfast
move.l a1,bufadr-base(a6) ;use entry as buffer
nogfast:
absmem:
st absbuf-base(a6) ;absolute buffer
move.l bufadr-base(a6),d4
move.l #$f00002+progend-run,d3 ;no mousetst if in mod
bsr.b memtest ;modifies bufadr
bne.w mem1
move.l d4,bufadr-base(a6)
mem7: lea $bfe001,a0 ;if left mouse during startup
btst #6,(a0) ;no backup is done
bne.b mem4
clr.l bufadr-base(a6) ;clr bufadr if no buf wanted
lea $dff006,a1
lea $017a(a1),a2 ;$dff180
mem5: move.b (a1),(a2)
btst #6,(a0)
beq.b mem5
bra.w mem1
mem4: tst.l bufadr-base(a6) ;memlist:fastmem?
seq absbuf-base(a6) ;memlist buffer
bne.w mem1
move.l #$274000,d3 ;512k banks
bsr.b memtest
bne.b mem1
move.l #$c74000,d3
bsr.b memtest
bne.b mem1
cmp.w #$8,himem-base(a6);512K chip:work f4000,no backup at all
bne.b mem1
move.l #$f4000,d3 ;buffer on '1MB' A1000s without mod
pea mem1(pc)
memtest:move.l d3,a2 ;datacache must be inactive!
and.l #$f80000,d3
clr.l bufadr-base(a6)
sub.l a1,a1
move.l d3,a0
move.l (a0),d6
move.l (a1),d7
move.l #"beer",d3 ;the ramtest values...
move.l #"gore",d1
move.l d3,(a1)
move.l d1,(a0)
bsr.w pushcache
bsr.w invcache
cmp.l (a0),d1
bne.b memfail
cmp.l (a1),d3
bne.b memfail
move.l a2,bufadr-base(a6)
memfail:move.l d6,(a0)
move.l d7,(a1)
bsr.w pushcache
bsr.w invcache
tst.l bufadr-base(a6)
rts
mem1: move.l bufadr-base(a6),para+8-base(a6)
beq.b mem2
move.l defwork-base(a6),a0
move.l a0,para-base(a6)
add.l wrksize-base(a6),a0
move.l a0,para+4-base(a6)
moveq #3,d3
bsr.w t ;transfer workspace to backupmem
mem2: move.l vbreg-base(a6),a0
lea intvecs-base(a6),a1
moveq #$100/4-1,d0
saveexc:move.l (a0)+,(a1)+
dbf d0,saveexc
lea $bfd100,a0
st $200(a0) ;ddr
st (a0) ;all drives off
nop
move.b #%10000111,(a0)
nop
st (a0)
moveq #-1,d0
move.l d0,drivcyl-base(a6)
lea mtchbuf-base(a6),a0
move.w #mtchnum-1,d0
clrmbuf:clr.l (a0)+ ;init matchbuffer
dbf d0,clrmbuf
lea helptxt-$7ffe(pc),a1
lea $7ffe(a1),a1
move.l a1,helpadr-base(a6)
sf insmode-base(a6)
sf hilight-base(a6)
sf row-base(a6)
move.l defwork-base(a6),d0
bra.w calchip ;jmp warm
warm: lea stackend-4-$7ff8-base(a6),a2
lea $7ff8(a2),a7
move.l regs+64+24-base(a6),para-base(a6) ;set pc for disasm
clr.l breakpc-base(a6)
clr.l lastcmd-base(a6)
lea $dff000,a2
move.l #$7fff7fff,$9a(a2)
move.w #$0c00,$34(a2) ;r. mouse
lea $bfd000,a0 ;set cia regs
move.b #3,$1201(a0) ;$bfe201 l. mouse,ovl
st $1301(a0) ;$bfe301 printer port
st $0300(a0) ;$bfd300 drive port
sf $1c01(a0) ;$bfec01
move.b #$80,$1e01(a0) ;$bfee01
move.b #$88,$1d01(a0) ;$bfed01
tst.b $1d01(a0) ;$bfed01
sf $0e00(a0) ;$bfde00 ciab cra
move.b #$7f,$0d00(a0) ;$bfdd00 ciab icr
tst.b $0d00(a0) ;$bfdd00
lea except(pc),a0
lea $8.w,a1
add.l vbreg-base(a6),a1
moveq #[$100-8]/4-1,d0
setex: move.l a0,(a1)+
add.w #2,a0 ;bsr.b xx
dbf d0,setex
sf ascii-base(a6)
sf dontbuf-base(a6)
lea $68.w,a1
add.l vbreg-base(a6),a1
lea keyint(pc),a3 ;$68
lea vblint(pc),a4 ;$6c
lea audint(pc),a5 ;$70
movem.l a3-a5,(a1)
lea thehit(pc),a0
move.l a0,$14(a1) ;$7c level 7 intvec
lea mousespr-base(a6),a0
move.l spradr-base(a6),a1
moveq #34+4-1,d0 ;34/2=sprhigh
cpspr: move.w (a0)+,(a1)+
dbf d0,cpspr
bsr initcop
bsr gencop
bsr.w pushcache
move.w #$c028,$9a(a2)
waitvbl:btst #5,$1f(a2)
beq.b waitvbl
tst.b frzflag-base(a6) ;set coplist if jmpmode
bne.b mutil4 ;or interruptlist if breakmode
btst #0,modeflg-base(a6)
beq.b nolac
nolong: tst.w 4(a2)
bpl.b nolong
nolac: move.w #$0080,$96(a2) ;cop off
move.l copadr-base(a6),$80(a2)
tst.w $88(a2) ;strobe
move.w #$8080,$96(a2) ;cop on
mutil4: move.w #$8340,$96(a2) ;bpl/blt on
move #$2000,sr ;allow ints
sf hilight-base(a6)
sf col-base(a6)
moveq #0,d3
bsr.w r ;output registers
bsr.b chkmon
lea constend-$7ffe(pc),a0
lea $7ffe(a0),a0
cmp.l (a0),d0
beq.b chkok
lea warntxt(pc),a1
bsr msgout
chkok:
bsr.w rprompt ;>
bsr curson
clr.w buflen-base(a6)
loop: tst.w buflen-base(a6)
beq.b loop
bsr cursoff
clr.w d1
lea keybuf-base(a6),a0
dobuf: move.b (a0,d1.w),d0
bsr prtasc
addq.w #1,d1
cmp.w buflen-base(a6),d1
bcs.b dobuf
clr.w buflen-base(a6)
bsr curson
bra.b loop
chkmon: moveq #0,d0
lea run(pc),a0
move.w #(constend-run)/4-1,d1
chkcorr:add.l (a0)+,d0
dbf d1,chkcorr
rts
warntxt:dc.b "Warning:BeerMon is corrupted"!$80
even
initcop:lea $dff000,a5
move.w rgb0-base(a6),$180(a5)
move.w rgb1-base(a6),$182(a5)
move.w #$0f00,$1a2(a5)
move.w #$0000,$1a4(a5)
move.w #$00f0,$1a6(a5)
lea copdata(pc),a0
moveq #0,d0
move.b modeflg-base(a6),d0
mulu #copdlen,d0
add.l d0,a0
move.l (a0)+,$8e(a5)
move.l (a0)+,$92(a5)
move.w (a0)+,$1dc(a5)
move.w (a0)+,$100(a5)
move.w (a0)+,$108(a5)
move.w #$0000,$102(a5)
move.w #$0000,$1fc(a5)
cmp.b #4,modeflg-base(a6)
bne.w nomscan
move.w #$0071,$1c0(a5)
move.w #$0008,$1c4(a5)
move.w #$000e,$1de(a5)
move.w #$001c,$1c2(a5)
move.w #$001e,$1c6(a5)
move.w #$0046,$1e2(a5)
move.w #$020c,$1c8(a5)
move.w #$0000,$1cc(a5)
move.w #$0003,$1e0(a5)
move.w #$0200,$1e4(a5)
move.w #$0005,$1ca(a5)
move.w #$001d,$1ce(a5)
move.w #$0012,$104(a5)
move.w #$0c21,$106(a5)
movem.w rgb0-base(a6),d0-d1
bsr.w mapcol
move.l d3,$180(a5)
move.l d2,$188(a5)
lea $1a0(a5),a0
moveq #0,d0
cpycols:move.l hmscols(pc,d0.w),(a0)+
addq.w #4,d0
cmp.w #8*4,d0
bne.b cpycols
nomscan:
rts
hmscols:dc.l $00000c00,$000000c0,$03000f00,$030003c0 ;mapped colours
dc.l $00000c00,$000000c0,$0030c030,$00300030 ;multiscan mode
; $008e0090 ,$00920094 ,$01dc,$0100,$108
copdata:dc.w $2c81,$2cc1,$003c,$00d4,$0020,$9200,$00000 ;pal
copdlen=*-copdata
dc.w $2c81,$2cc1,$003c,$00d4,$0020,$9204,xchars ;pal lace
dc.w $2c81,$f4c1,$003c,$00d4,$0000,$9200,$00000 ;ntsc
dc.w $2c81,$f4c1,$003c,$00d4,$0000,$9204,xchars ;ntsc lace
dc.w $2c45,$0ce5,$0020,$0068,$1b88,$1241,$00000 ;multiscan
mapcol: movem.l d4/d6-d7,-(a7)
move.w d0,d6
move.w d1,d7
moveq #4-1,d4
moveq #0,d2
moveq #0,d3
codecol:move.w d7,d0
bsr.b codenib
move.w d0,d1
mulu #5,d0
and.w #$fff0,d7
or.b d0,d7
move.b d0,d3
move.w d6,d0
bsr.b codenib
sub.w d0,d1
mulu #5,d0
and.w #$fff0,d6
or.b d0,d6
move.b d0,d2
add.w d1,d2
ror.l #4,d2
sub.w d1,d3
ror.l #4,d3
ror.w #4,d6
ror.w #4,d7
dbf d4,codecol
move.w d7,d2
move.w d6,d3
swap d3
movem.l (a7)+,d4/d6-d7
rts
codenib:andi.l #$0f,d0
addq.w #2,d0
divu #5,d0
rts
gencop: move.l copadr-base(a6),a0
moveq #-2,d0
move.l scradr-base(a6),d1
move.l a0,a1
swap d1
move.w #$00e0,(a0)+
move.w d1,(a0)+
swap d1
move.w #$00e2,(a0)+
move.w d1,(a0)+
btst #0,modeflg-base(a6)
beq.b genendc
moveq #12,d2
add.l a0,d2
move.w #$0080,(a0)+
swap d2
move.w d2,(a0)+
move.w #$0082,(a0)+
swap d2
move.w d2,(a0)+
move.l d0,(a0)+
add.l #xchars,d1
swap d1
move.w #$00e0,(a0)+
move.w d1,(a0)+
swap d1
move.w #$00e2,(a0)+
move.w d1,(a0)+
move.l a1,d2
move.w #$0080,(a0)+
swap d2
move.w d2,(a0)+
move.w #$0082,(a0)+
swap d2
move.w d2,(a0)+
genendc:move.l d0,(a0)+
rts
exit: moveq #4-1,d2
move.l drivcyl-base(a6),d3
resetcy:tst.b d3
bmi.b noresc
moveq #3,d0
add.b d2,d0
move.b d0,drvbit-base(a6)
bsr motondt
bsr trk0
resetst:subq.b #1,d3
bmi.b noresc2
bsr stepup
bra.b resetst
noresc2:bsr motoff
noresc: ror.l #8,d3
dbf d2,resetcy
move.w #$7fff,$dff096
move.w #$4000,$dff09a
move.w timeout-base(a6),$de0000
move.l bufadr-base(a6),d0
beq.b mem3
move.l d0,para-base(a6)
add.l wrksize-base(a6),d0
move.l d0,para+4-base(a6)
move.l scradr-base(a6),para+8-base(a6)
moveq #3,d3
bsr.w t ;retransfer workspace, if any
mem3:
lea intvecs-base(a6),a0
move.l startvbr-base(a6),a1
moveq #$100/4-1,d0
resetex:move.l (a0)+,(a1)+
dbf d0,resetex
bsr.w loadmmu
bsr.w loadfpu
tst.b frzflag-base(a6) ;freezemode?
bne.w endfrz
lea run(pc),a0 ;in module? then reset
cmp.l #$f00002,a0
beq.w doreset
move #$3700,sr ;use isp|(68020+:msp)
move.l startmsp-base(a6),a7 ;msp
move #$2700,sr ;use isp
move.l startisp-base(a6),a7 ;isp
tst.b cpu-base(a6) ;68010+ ?
beq.b nomsp3
move.l startvbr-base(a6),a5 ;vbr
dc.l movec_a5.vbr
move.b startsfcdfc-base(a6),d0
dc.l movec_d0.sfc
move.b startsfcdfc+1-base(a6),d0
dc.l movec_d0.dfc
cmp.b #2,cpu-base(a6) ;68020+ ?
bcs.b nomsp3
move.l startcacr-base(a6),a5 ;cacr
dc.l movec_a5.cacr
cmp.b #4,cpu-base(a6) ;68040?
beq.b nomsp3
move.l startcaar-base(a6),a5 ;caar
dc.l movec_a5.caar
nomsp3:
move.l startusp-base(a6),a0 ;restore initial? regs
move.l a0,usp
; move.b modeflg-base(a6),d0
; beq.b noforce
; subq.b #3,d0
; beq.b noforce
; bsr.b beamcon ;restore beamcon0 reg
;noforce:
lea $dff000,a4
move.w #$0080,$96(a4)
bsr display
move.w #$8080,$96(a4)
move.w #$83f0,$96(a4)
move.w #$e02c,$9a(a4)
bclr #1,$bfe001
move.l regs-base(a6),d0
subq.l #1,d0
beq.b fakebst ;oh...
addq.l #1,d0
fakebst:move.w startsr-base(a6),sr
movem.l regs+4-base(a6),d1-d7/a0-a6
rts
LoadView=-222
WaitTOF=-270
display:move.l a6,-(a7)
move.l 4.w,a6
lea gfxname(pc),a1
jsr OldOpenLibrary(a6)
move.l d0,a6
tst.l d0
beq.b nogfx
move.l 34(a6),d2 ;ActiView
sub.l a1,a1
jsr LoadView(a6)
jsr WaitTOF(a6)
jsr WaitTOF(a6)
move.l d2,a1
jsr LoadView(a6)
move.l 38(a6),$dff080
move.w d0,$dff088
move.l a6,a1
move.l 4.w,a6
jsr CloseLibrary(a6)
nogfx: move.l (a7)+,a6
rts
gfxname:dc.b "graphics.library",0
even
chkexec:move.l 4.w,a0
move.l a0,d1
btst #0,d1 ;even?
bne.b failexc
add.l $26(a0),d1 ;checkbase
not.l d1
bne.b failexc
lea $22(a0),a1
moveq #($54-$22)/2-1,d0
execsum:add.w (a1)+,d1
dbf d0,execsum
not.w d1
;bne.b failexc
failexc:rts ;bne.b badexec
grabmem:move.l a1,d0 ;a1:execbase,d2:attributebit
nxtmlst:btst #0,d0
bne.b nograb
move.w $0e(a1),d0 ;attributes
btst d1,d0
bne.b memchip
move.l (a1),a1
move.l a1,d0
bne.b nxtmlst
bra.w nograb
memchip:move.l $10(a1),a1
move.l a1,d0
beq.b nograb
scanml: btst #0,d0
bne.b nograb
btst #0,7(a1) ;even size?
bne.b nograb
moveq #8,d0
add.l wrksize-base(a6),d0
cmp.l 4(a1),d0
bls.b useml
move.l (a1),a1
move.l a1,d0
bne.b scanml
bra.b nograb
useml: ;addq.l #8,a1 ;don't trash ptr/size
add.l 4(a1),a1 ;end of chunk
sub.l wrksize-base(a6),a1
moveq #-1,d0
rts
nograb: moveq #0,d0
rts
endfrz: move #$3700,sr ;use isp|(68020+:msp)
move.l startmsp-base(a6),a7 ;msp
move #$2700,sr ;use isp
move.l startisp-base(a6),a7 ;isp
tst.b cpu-base(a6) ;68010+ ?
beq.b nomsp4
move.l startvbr-base(a6),a5 ;vbr
dc.l movec_a5.vbr
move.b startsfcdfc-base(a6),d0
dc.l movec_d0.sfc
move.b startsfcdfc+1-base(a6),d0
dc.l movec_d0.dfc
cmp.b #2,cpu-base(a6) ;68020+ ?
bcs.b nomsp4
move.l startcacr-base(a6),a5 ;cacr
dc.l movec_a5.cacr
cmp.b #4,cpu-base(a6) ;68040?
beq.b nomsp4
move.l startcaar-base(a6),a5 ;caar
dc.l movec_a5.caar
nomsp4:
move.l startusp-base(a6),a0 ;restore initial? regs
move.l a0,usp
lea $dff000,a2
move.w #$7fff,d0
move.w d0,$96(a2)
move.w d0,$9e(a2)
move.w d0,$9a(a2)
move.w d0,$9c(a2)
xxx: move.w $6(a2),$180(a2) ;nice, eh?
dbf d0,xxx
move.w rdff002-base(a6),$96(a2)
move.w rdff010-base(a6),$9e(a2)
move.w rdff01c-base(a6),$9a(a2)
move.w rdff01e-base(a6),$9c(a2)
movem.l regs-base(a6),d0-d7/a0-a6
rte
savereg:move.w (a7),d0 ;the trick to grab the system
move.w #$2700,(a7) ;stay in sv,no ints
move.w d0,regs+64+28-base(a6) ;sr
move.l 2(a7),regs+64+24-base(a6) ;pc
addq.l #2,2(a7) ;skip illegal
rte
savefpu:tst.b fpu-base(a6)
beq.b nofpu0
lea fpuregs-base(a6),a2
dc.l fmovem_fp0_7.a2
lea fpcr-base(a6),a2
dc.l fmovem_fpcx.a2
nofpu0: rts
loadfpu:tst.b fpu-base(a6)
beq.b nofpu1
lea fpuregs-base(a6),a2
dc.l fmovem_a2.fp0_7
lea fpcr-base(a6),a2
dc.l fmovem_a2.fpcx
nofpu1: rts
savemmu:tst.b mmu-base(a6) ;nommu
beq.b savemm0
cmp.b #3,mmu-base(a6) ;68040mmu
beq.b savemm0
cmp.b #1,mmu-base(a6)
beq.b mmu51
lea mmutt0-base(a6),a2
dc.l pmove_tt0.a2
addq.w #mmutt1-mmutt0,a2
dc.l pmove_tt1.a2
bra.b no851
mmu51: lea mmudrp-base(a6),a2 ;68851
dc.l pmove_drp.a2
no851: lea mmutt0+8-base(a6),a2
dc.l pmove_tc.a2
addq.w #mmusrp-mmutc,a2
dc.l pmove_srp.a2
addq.w #mmucrp-mmusrp,a2
dc.l pmove_crp.a2
addq.w #mmusr-mmucrp,a2
dc.l pmove_mmusr.a2
savemm0:rts
loadmmu:tst.b mmu-base(a6) ;nommu
beq.b loadmm0
cmp.b #3,mmu-base(a6) ;68040mmu
beq.b loadmm0
lea $e0.w,a1 ;mmu config error trap
add.l vbreg-base(a6),a1
move.l (a1),-(a7) ;old trapvec
lea mmutrap(pc),a2
move.l a2,(a1)
cmp.b #1,mmu-base(a6)
beq.b mmu512
lea mmutt0-base(a6),a2
dc.l pmove_a2.tt0 ;pmovefd?
addq.w #mmutt1-mmutt0,a2
dc.l pmove_a2.tt1
bra.b no8512
mmu512: lea mmudrp-base(a6),a2 ;68851
dc.l pmove_a2.drp
no8512: lea mmutt0+8-base(a6),a2
dc.l pmove_a2.tc
addq.w #mmusrp-mmutc,a2
dc.l pmove_a2.srp
addq.w #mmucrp-mmusrp,a2
dc.l pmove_a2.crp
addq.w #mmusr-mmucrp,a2
dc.l pmove_a2.mmusr
move.l (a7)+,(a1)
loadmm0:rts
mmutrap:rte ;ignore
getvbr: sub.l a5,a5
bsr.w chkexec
bne.b badexec
move.l a6,d0
move.l 4.w,a6
btst #0,$129(a6)
beq.b novbr
lea getit(pc),a5
jsr Supervisor(a6)
novbr: move.l d0,a6
badexec:rts
getit: dc.l movec_vbr.a5
rte
; well, it looks funny, but there are SOME entries here
except: bsr.b incexc ;08
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc ;3c
bsr.b incexc ;40
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc ;7c
bsr.b incexc ;80
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc ;bc
bsr.b incexc ;c0
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc
bsr.b incexc ;fc
nop
incexc: move.l a6,-(a7)
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
move.l (a7)+,regs+8-base(a6)
movem.l d0-d1,regs-base(a6)
move.l (a7)+,d1 ;return address
lea except(pc),a6
sub.l a6,d1
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
lsr.b #1,d1
move.b d1,excnum-base(a6) ;$08:1,$0c:2...$fc:3e
move.w (a7),d1 ;sr
tst.b cpu-base(a6)
bne.b tp680x0 ;68000 exception?
cmp.b #2,excnum-base(a6) ;adr/bus err
bhi.b sh68000
move.l 2(a7),excadr-base(a6)
move.w 6(a7),excinstr-base(a6)
move.w 8(a7),exceptsr-base(a6)
move.l 10(a7),exceptpc-base(a6)
move.w 8(a7),d1 ;sr
lea $0e(a7),a7
bra.w quitexc
sh68000:move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6)
addq.w #06,a7
bra.w quitexc
; MC68010 + exception processing
tp680x0:move.w 6(a7),d0 ;formatcode
and.w #%1111000000000000,d0
beq.b isshort
cmp.w #%0001000000000000,d0 ;int format
bne.b nshort
isshort:move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6)
addq.w #08,a7
;exception type pc
;interrupt,trap #n next
;format error rte, frestore
;illegal,linea,linef illegal,linea,linef
;privilege violation 1st word causing violation
;fp pre-instruction fp instruction that returned fp pre-instruction
nshort: cmp.w #%0010000000000000,d0 ;instr exception
bne.b ninex
move.w (a7),exceptsr-base(a6)
move.l 8(a7),exceptpc-base(a6) ;address
cmp.b #9,excnum-base(a6) ;linea?
beq.b unimpfp
cmp.b #2,excnum-base(a6) ;address error?
bne.b ninex2
unimpfp:move.l 2(a7),exceptpc-base(a6) ;instruction address
move.l 8(a7),excadr-base(a6) ;referenced address
ninex2: lea $0c(a7),a7
;exception type pc address
;chk,chk2,trapcc,ftrapcc,trapv, next instr address
;trace,zero divide " "
;unimplemented fp instr next calculated fp ea
;address error instr referenced address
ninex: cmp.w #%0011000000000000,d0 ;fp post instr exception (40)
bne.b nfppost
move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6)
move.l 8(a7),excadr-base(a6)
lea $0c(a7),a7
;exception type pc address
;fp post-instruction next referenced address
nfppost:cmp.w #%0111000000000000,d0 ;access error (40)
bne.b naccerr
move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6) ;next instr
move.l 20(a7),excadr-base(a6) ;fault address
lea $3c(a7),a7
;exception type pc
;access fault, bus error next instr
naccerr:cmp.w #%1000000000000000,d0 ;68010 buserror
bne.b n10berr
move.l 10(a7),excadr-base(a6)
move.w 24(a7),excinstr-base(a6)
move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6)
lea $3a(a7),a7
n10berr:cmp.w #%1001000000000000,d0 ;coprocessor midinstr
bne.b ncpmid
move.w (a7),exceptsr-base(a6)
move.l 2(a7),excadr-base(a6) ;next word
move.l 8(a7),exceptpc-base(a6) ;instr address
lea $14(a7),a7
;exception type pc address
;coprocessor mid instr next word instruction address
;protocol violation next word instruction address
;int during copro instr next word instruction address
ncpmid: cmp.w #%1010000000000000,d0 ;short buserror
bne.b nshberr
move.l 20(a7),excadr-base(a6) ;internal reg
move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6)
lea $20(a7),a7
;exception type pc
;address, bus error next instr
nshberr:cmp.w #%1011000000000000,d0 ;long buserror
bne.b nlgberr
move.l 36(a7),excadr-base(a6) ;stage b address
move.w 30(a7),excinstr-base(a6) ;internal reg
move.w (a7),exceptsr-base(a6)
move.l 2(a7),exceptpc-base(a6) ;instruction address
lea $5c(a7),a7
;exception type pc
;address, bus error executed instr when fault occured
nlgberr:
quitexc:and.w #$3fff,d1 ;clr tracebits
move.w d1,sr
lea g1(pc),a6
cmp.l (a7),a6 ;sp changed?
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
bne.b newsp
addq.w #4,a7 ;remove return adr
newsp: move.w d1,ccr
movem.l regs-base(a6),d0-d1/a6
bra.w g1
prtasc:
bsr.b doctrl
tst.b d7
beq.b prtasc0
tst.b insmode-base(a6)
beq.b noinsm
bsr insert
noinsm: bra.w rawchr
prtasc0:rts
doctrl: sf d7 ;no a0,d1,d7 allowed down here
cmp.b #$13,d0
beq.w csright
cmp.b #$12,d0
beq.w csleft
cmp.b #$11,d0
beq.w csdownroll
cmp.b #$10,d0
beq.w csup
cmp.b #1,d0 ;sh-csup
beq.w cstop
cmp.b #2,d0
beq.w csbot
cmp.b #3,d0
beq.w csbeg
cmp.b #4,d0
beq.w csend
cmp.b #$0d,d0
beq.w enter
cmp.b #$0e,d0
beq.w shenter
cmp.b #$07,d0 ;sh-bs
beq.w clrhome
cmp.b #$08,d0 ;bs
beq.w backspc
cmp.b #$09,d0 ;del
beq.w del
cmp.b #$0a,d0 ;sh-del
beq.w insert
cmp.b #6,d0
beq.w help
cmp.b #11,d0
beq.w swapbuf
cmp.b #$05,d0
beq.b tab ;tab
cmp.b #$14,d0
beq.w lnclr ;sh-tab
cmp.b #$15,d0
beq.w histbk
cmp.b #$16,d0
beq.w histfw
cmp.b #$19,d0
beq.w kphome
cmp.b #$1a,d0
beq.w kpend
cmp.b #12,d0 ;sh-ins
beq.b instogl
cmp.b #$80,d0
bcs.b nofkey
cmp.b #$89,d0
bls.b dofkey
nofkey: st d7
rts
instogl:not.b insmode-base(a6)
rts
dofkey: move.w #1,buflen-base(a6) ;funky keys..
lea fkeybuf-base(a6),a5
sub.b #$80,d0
ext.w d0
mulu #fkeylen,d0
lea (a5,d0.w),a5
moveq #fkeylen-1,d2
dofk0: move.b (a5)+,d0
beq.b dofk1
cmp.b #"|",d0 ;more than one cmd?
bne.b dofk2
moveq #13,d0
dofk2: bsr.w bufit
dbf d2,dofk0
dofk1: rts
; moveq #13,d0
; bra.w bufit
tab: bsr.b tab0 ;skips spaces 'til next data
bne.b tab
tab1: cmp.b #xchars-1,col-base(a6)
beq.b tab2
bsr.b tab0
beq.b tab1
cmp.b #"'",(a5)
beq.b tab1
rts
tab2: sf col-base(a6)
tab0: bsr.w csright
bsr.w crsrtxt
cmp.b #" ",(a5)
rts
lnclr: move.w row-base(a6),d3 ;row&col
moveq #xchars-1,d4
sub.b d3,d4 ;col
lnloop: bsr.w del
dbf d4,lnloop
lnend: move.w d3,row-base(a6)
rts
histfw: moveq #1,d2
bra.b hist2
histbk: moveq #-1,d2
hist2: lea histlin-base(a6),a1
move.b (a1),d3
moveq #histnum-1,d0
add.b d2,(a1) ;up/down
bmi.b hist1
move.b (a1),d0
divu #histnum,d0
swap d0
hist1: move.b d0,(a1)
movem.l d1/a0,-(a7)
lea histbuf-base(a6),a0
ext.w d0
mulu #xchars-1,d0
add.l d0,a0
tst.b (a0)
bne.b hist3
move.b d3,(a1) ;histlin
bra.b hist4
hist3: lea linebuf-base(a6),a1
move.b #">",(a1)+
moveq #xchars-1-1,d1
hist0: move.b (a0)+,(a1)+
dbf d1,hist0
bsr.w rawout ;del:d0,d1,a0
hist4: movem.l (a7)+,d1/a0
rts
kphome: bsr.b cstop
csbeg: move.b #1,col-base(a6)
rts
cstop: tst.b row-base(a6)
beq.b pageup
sf row-base(a6)
rts
kpend: bsr.b csbeg
csbot: move.b rowsm1-base(a6),d2
cmp.b row-base(a6),d2
beq.w pagedwn
move.b d2,row-base(a6)
csr0: rts
pageup: move.b col-base(a6),d2
movem.l d1-d2/d7/a0,-(a7)
lea txtscr-base(a6),a5
lea 2(a5),a3 ;addrstart
bsr.w atolong ;get top addr
moveq #$40,d1
cmp.w #">;",(a5) ;ascii dump
lea acore(pc),a4
beq.w dopageu
moveq #$10,d1
cmp.w #">:",(a5) ;hex dump
lea mcore(pc),a4
beq.w dopageu
cmp.b #">",(a5)
bne.b nobpgu
move.b 1(a5),d2
bsr binsize ;returns d1
beq.b nobpgu
lea bincore(pc),a4
bra.b dopageu
nobpgu: moveq #4,d1
cmp.w #">.",(a5) ;copper dump
lea ccore(pc),a4
beq.b dopageu
cmp.w #">_",(a5) ;6502 disasm
lea dis6502(pc),a3
lea pgdis65(pc),a4
beq.b dopcpu
lea disasm(pc),a3
lea pgdis(pc),a4
cmp.w #">,",(a5) ;disasm
bne.b nopageu
btst #0,d0
bne.b nopageu
dopcpu: lea dostrkbuf-base(a6),a0
move.l a0,-(a7)
move.l d0,a5
sub.w #400,a5
move.l a5,d1
bpl.b dpag0
sub.l a5,a5
dpag0: move.l a5,(a0)+
jsr (a3)
cmp.l a5,d0
bhi.b dpag0
moveq #0,d0
move.b rowsm2-base(a6),d0
lsl.w #2,d0
sub.l d0,a0
move.l (a7)+,a1
cmp.l a0,a1
bls.b nounder
move.l a1,a0
nounder:move.l (a0),d0
moveq #0,d1
dopageu:sf row-base(a6)
moveq #0,d6
move.b rowsm2-base(a6),d6
move.w d6,-(a7)
mulu d1,d6
sub.l d6,d0
bpl.b pgupos
moveq #0,d0
pgupos: move.l d0,a5
move.l d0,para-base(a6)
move.w (a7)+,d6
pguloop:jsr (a4)
dbf d6,pguloop
moveq #">",d0
bsr rawchr
nopageu:movem.l (a7)+,d1-d2/d7/a0
move.b d2,col-base(a6)
sf row-base(a6)
rts
pagedwn:lea txtscr-base(a6),a5 ;bottom+1 line
moveq #0,d2
move.b rowsm2-base(a6),d2
mulu #xchars,d2
add.l d2,a5
move.b col-base(a6),d2
movem.l d1-d2/d7/a0,-(a7)
lea 2(a5),a3 ;addrstart
bsr.w atolong ;get top addr
cmp.w #">;",(a5) ;ascii dump
lea acore(pc),a4
beq.b dopage
cmp.w #">:",(a5) ;hex dump
lea mcore(pc),a4
beq.b dopage
cmp.b #">",(a5)
bne.b nobpg
move.b 1(a5),d2
bsr binsize ;returns d1
beq.b nobpg
lea bincore(pc),a4
bra.b dopage
nobpg: cmp.w #">.",(a5) ;copper dump
lea ccore(pc),a4
beq.b dopage
cmp.w #">_",(a5) ;6502 disasm
lea pgdis65(pc),a4
beq.b dopage
btst #0,d0 ;even disasm adr?
bne.b nopage
lea pgdis(pc),a4
cmp.w #">,",(a5) ;disassemble
bne.b nopage
dopage: move.l d0,para-base(a6)
move.l d0,a5
move.b #">",linebuf-base(a6)
bsr rawout
sf row-base(a6)
moveq #0,d6
move.b rowsm2-base(a6),d6
pgloop: move.b rowsm1-base(a6),d0
cmp.b row-base(a6),d0
beq.b pgfull
jsr (a4)
pgfull: dbf d6,pgloop
nopage: movem.l (a7)+,d1-d2/d7/a0
move.b d2,col-base(a6)
rts
pgdis: bsr disasm
bsr hlbrkpt
bsr rawline
bsr hdlline
move.l a5,para-base(a6)
rts
pgdis65:bsr dis6502
move.l a5,para-base(a6)
bra rawline
csright:addq.b #1,col-base(a6)
cmp.b #xchars,col-base(a6)
bne.w csr0
sf col-base(a6)
csdown: addq.b #1,row-base(a6)
move.b rows-base(a6),d0
cmp.b row-base(a6),d0
bne.w csr0
subq.b #1,row-base(a6)
bra.w scroll
csdownroll:
addq.b #1,row-base(a6)
move.b rows-base(a6),d0
cmp.b row-base(a6),d0
bne.w csr0
subq.b #1,row-base(a6)
sf rolltop-base(a6)
bra.b rollscr
csleft: tst.b col-base(a6)
beq.b csl0
subq.b #1,col-base(a6)
rts
csl0: tst.b row-base(a6)
beq.b csl1
subq.b #1,row-base(a6)
move.b #xchars-1,col-base(a6)
csl1: rts
csup: st rolltop-base(a6)
tst.b row-base(a6)
beq.b rollscr ;beq.b csu0
subq.b #1,row-base(a6)
csu0: rts
csend: move.b #xchars,col-base(a6)
bsr crsrtxt
move.l a5,a4
moveq #xchars-3,d0
csend1: cmp.b #";",-(a4)
bne.b csend2
move.l a4,a5
bra.b csend0
csend2: subq.b #1,col-base(a6)
dbf d0,csend1
move.b #xchars,col-base(a6)
subq.w #1,a5
moveq #xchars-3,d0
csend0: subq.b #1,col-base(a6)
cmp.b #" ",-(a5)
dbne d0,csend0
rts
rollscr:tst.b rolltop-base(a6)
beq.b rollsc0
bsr.w scrdown ;scroll screen down
lea txtscr+xchars-base(a6),a5
bra.b rollsc1
rollsc0:bsr.w scroll
move.b rowsm2-base(a6),row-base(a6)
lea txtscr-base(a6),a5 ;*****
moveq #0,d2
move.b rows-base(a6),d2
subq.w #3,d2
mulu #xchars,d2
add.l d2,a5
rollsc1:move.b col-base(a6),d2
movem.l d1-d2/d7/a0,-(a7)
lea 2(a5),a3 ;addrstart
bsr.w atolong ;get top addr
pea endup(pc)
cmp.w #">;",(a5) ;ascii dump
beq.w upascii
cmp.w #">:",(a5) ;hex dump
beq.w uphex
cmp.w #">|",(a5)
beq.w upbinb
cmp.w #">]",(a5)
beq.b upbinw
cmp.w #">[",(a5)
beq.b upbinl
cmp.w #">}",(a5)
beq.b upbint
cmp.w #">{",(a5)
beq.b upbinq
cmp.w #">.",(a5) ;copper dump
beq.b upcop
cmp.w #">_",(a5) ;6502 disasm
beq.w up6502
btst #0,d0 ;even disasm adr?
bne.b noupdis
cmp.w #">,",(a5) ;disassemble
beq.w updis
noupdis:subq.w #4,a7 ;remove endup from stack
membeg: addq.w #8,a7 ;remove endup/subroutine
endup: sf row-base(a6)
tst.b rolltop-base(a6)
bne.b endup2
move.b rowsm1-base(a6),row-base(a6)
endup2: sf col-base(a6)
bsr.w rprompt ;>
movem.l (a7)+,d1-d2/d7/a0
move.b d2,col-base(a6)
rts
upbinq: moveq #8,d1
pea binq(pc)
bra.b setpara
upbint: moveq #6,d1
pea bint(pc)
bra.b setpara
upbinl: moveq #4,d1
pea binl(pc)
bra.b setpara
upbinw: moveq #2,d1
pea binw(pc)
bra.b setpara
upbinb: moveq #1,d1
pea binb(pc)
bra.b setpara
upcop: moveq #4,d1
pea copper(pc)
bra.b setpara
uphex: moveq #16,d1
pea m(pc)
bra.b setpara
upascii:moveq #64,d1
pea a(pc)
setpara:add.l d1,d0
tst.b rolltop-base(a6)
beq.b setpar0
sub.l d1,d0
sub.l d1,d0
bmi.b membeg
setpar0:move.l d0,para-base(a6)
add.l d1,d0
move.l d0,para+4-base(a6)
moveq #2,d3
rts
up6502: tst.b rolltop-base(a6)
beq.b down65
moveq #3*5+3,d1 ;max opcode len 6502: 3 bytes
upred65:subq.w #1,d1
beq.b endup65
move.l d0,a5
sub.l d1,a5
move.l a5,d4 ;start below 0?
bpl.b upd652
sub.l a5,a5
upd652: moveq #3*5-1,d4 ;maxbyte(3):minbyte(1)=3
upd65m: bsr.w dis6502
cmp.l d0,a5 ;disassembly matching?
beq.b upd650
bhi.b upd651
dbf d4,upd65m
upd651: bra.b upred65
upd650: bsr.b downrl
sf row-base(a6)
endup65:rts
down65: move.l d0,a5
bsr.w dis6502
bsr.w dis6502
move.l a5,para-base(a6)
downrl: bra.w rawline
updis: tst.b rolltop-base(a6)
beq.b downdis
moveq #10*5+2,d1 ;max opcode len MC68000: 10 bytes
upredis:subq.w #2,d1
beq.b endupd
move.l d0,a5
sub.l d1,a5
move.l a5,d4 ;start below 0?
bpl.b updis2
sub.l a5,a5
updis2: moveq #5*5-1,d4 ;maxbyte(10):minbyte(2)=5
updsm: move.l a5,para-base(a6)
bsr.w disasm
cmp.l d0,a5 ;disassembly matching?
beq.b updis0
bhi.b updis1
dbf d4,updsm
updis1: bra.b upredis
updis0: bsr hlbrkpt
bsr.w hdltest ;2 lines?
bne.b noline
bsr.w scrdown
noline: bsr.w rawline
bsr.w hdlline
sf row-base(a6)
endupd: rts
downdis:move.l d0,a5
bsr.w disasm
move.l a5,para-base(a6)
bsr.w disasm
bsr hlbrkpt
bsr rawline
bsr hdlline
move.l a5,para-base(a6)
rts
clrhome:pea rprompt(pc) ;>
clrscr: move.l scradr-base(a6),a5 ;the lame stuff...
moveq #0,d0
moveq #0,d5
move.b rows-base(a6),d5
mulu #xchars*8/4,d5
subq.w #1,d5
ch0: move.l d0,(a5)+
dbf d5,ch0
lea txtscr-base(a6),a5
moveq #" ",d0
moveq #0,d5
move.b rows-base(a6),d5
mulu #xchars,d5
subq.w #1,d5
ch1: move.b d0,(a5)+
dbf d5,ch1
lea linebuf-base(a6),a5
moveq #xchars-1,d5
ch2: move.b d0,(a5)+
dbf d5,ch2
sf row-base(a6)
sf col-base(a6)
rts
insert: bsr.w crsrtxt
move.l a5,a4
bsr.w crsrbm
moveq #xchars-1-1,d2
move.b col-base(a6),d3
ext.w d3
sub.w d3,d2
lea (a5,d2.w),a5
lea (a4,d2.w),a4
bcs.b ins2
ins0: moveq #8-1,d3
ins3: move.b (a5),1(a5)
lea xpixel/8(a5),a5
dbf d3,ins3
lea -xpixel-1(a5),a5
move.b (a4)+,(a4)
subq.w #2,a4
dbf d2,ins0
ins2: moveq #8-1,d5
ins1: sf 1(a5)
lea xpixel/8(a5),a5
dbf d5,ins1
move.b #" ",1(a4)
bs0: rts ;two
backspc:;tst.b col-base(a6)
;beq.b bs0
cmp.b #1,col-base(a6)
bls.s bs0
bsr.w csleft
del: bsr.w crsrtxt
move.l a5,a4
bsr.w crsrbm
moveq #xchars-1-1,d2
sub.b col-base(a6),d2
bcs.b del2
del0: moveq #8-1,d5
del4: move.b 1(a5),(a5)
lea xpixel/8(a5),a5
dbf d5,del4
lea -xpixel+1(a5),a5
move.b 1(a4),(a4)+
dbf d2,del0
del2: moveq #8-1,d5
del3: sf (a5)
lea xpixel/8(a5),a5
dbf d5,del3
move.b #" ",(a4)
rts
swapbuf:movem.l d1/a0,-(a7) ;no a0,d1,d7
move.w row-base(a6),-(a7)
lea txtscr-base(a6),a1
moveq #0,d2
move.b rows-base(a6),d2
mulu #xchars/4,d2
subq.w #1,d2
swpbuf: move.l txtback-txtscr(a1),d3
move.l (a1),txtback-txtscr(a1)
move.l d3,(a1)+
dbf d2,swpbuf
sf row-base(a6)
lea txtscr-base(a6),a1
moveq #0,d2
move.b rowsm1-base(a6),d2
swplp: lea linebuf-base(a6),a0
moveq #xchars-1,d0
cpybck: move.b (a1)+,(a0)+
dbf d0,cpybck
bsr.w rawout
addq.b #1,row-base(a6)
dbf d2,swplp
move.w rowback-base(a6),row-base(a6)
move.w (a7)+,rowback-base(a6) ;row,col
movem.l (a7)+,d1/a0
rts
help: movem.l d1/a0,-(a7)
bsr.w clrhome
sf col-base(a6)
moveq #0,d2
move.b rowsm2-base(a6),d2
move.l helpadr-base(a6),a1
hlp0: tst.b (a1)
beq.b endhlp
lea linebuf-base(a6),a0
bsr.w txttobuf
lea linebuf+22-base(a6),a0
bsr.w txttobuf
tst.b (a1)
beq.b endhlp2
lea linebuf+39-base(a6),a0
move.b #"|",(a0)+
bsr.w txttobuf
lea linebuf+62-base(a6),a0
bsr.w txttobuf
endhlp2:bsr.w rawline
dbf d2,hlp0
tst.b (a1)
bne.b hlp2
endhlp: lea helptxt-$7ffe(pc),a1
lea $7ffe(a1),a1
hlp2: move.l a1,helpadr-base(a6)
bsr.w rprompt ;>
movem.l (a7)+,d1/a0
rts
enter: movem.l d1/d7/a0,-(a7)
move.b col-base(a6),d6
sf col-base(a6)
bsr.w csdown
bsr.w crsrtxt ;a5 !
lea -xchars(a5),a5
cmp.b #">",(a5)
bne.w igncmd
lea cmd(pc),a3
lea cmdjmp-2(pc),a4
scanagn:sf d2
lea 1(a5),a0
cmp.b #" ",(a0)
beq.b scancmd
lea lastcmd-base(a6),a1
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0),(a1)
subq.w #3,a0
scancmd:move.b (a3),d0
beq.w igncmd
move.b (a0)+,d1
tst.b d2
bne.b nomatch
bclr #7,d0
cmp.b d0,d1
sne d2
nomatch:btst #7,(a3)+
beq.b scancmd
addq.w #2,a4
tst.b d2
bne.b scanagn
move.w (a4),d3
lea cmdjmp(pc),a4
add.w d3,a4
cmp.b #" ",1(a5)
beq.b inhist1 ;no cmd
lea histcnt-base(a6),a1
lea histbuf-base(a6),a2
moveq #0,d3
move.b (a1),d3 ;histcnt
divu #histnum,d3
swap d3
mulu #xchars-1,d3
add.l d3,a2
moveq #xchars-1-1,d2
inhist: move.b 1(a5,d2.w),(a2,d2.w) ;skip >
dbf d2,inhist
add.b #1,(a1) ;histcnt
cmp.b #histnum,(a1) ;histcnt
bne.b inhist0
sf (a1) ;histcnt
inhist0:move.b (a1),histlin-histcnt(a1) ;histcnt->histlin
inhist1:
lea para-base(a6),a3
sub.l a2,a2
moveq #0,d3
skpblk: lea xchars-1(a5),a1
ah3: cmp.b #"'",(a0)
beq.b ah5
cmp.b #" ",(a0)
bne.b endskip
addq.w #1,a0
cmp.l a0,a1
bne.b ah3
endskip:
moveq #8-1,d2 ;maxlen ; convert cmd data
moveq #0,d0
ah0: cmp.l a0,a1
beq.b endline
move.b (a0)+,d1
cmp.b #" ",d1
beq.b ah1
sub.b #"0",d1
bcs.b ah5
cmp.b #9,d1
ble.b ah2
bclr #5,d1
cmp.b #"A"-"0",d1
blt.b ah5
cmp.b #"F"-"0",d1
bgt.b ah5
subq.b #"A"-"0"-10,d1
ah2: lsl.l #4,d0
or.b d1,d0
dbf d2,ah0
ah1: move.l d0,(a3)+
addq.b #1,d3
ah4: cmp.b #16,d3
bne.b ah3
ah5:
sf d7
subq.w #1,a0
move.l a5,a2
ah6: cmp.b #34,(a2)+
beq.b ah7
cmp.l a2,a1
bne.b ah6
sub.l a2,a2
ah7:
endline:move.l a5,lineend-base(a6)
moveq #xchars,d0
add.l d0,lineend-base(a6)
;d3:#para,d6:oldcol,a0:stop,a2:quote,a5:cmdtxt / st d7:ok
jsr (a4) ;execute cmd...
tst.b d7
bne.b truecmd
moveq #"?",d0
bsr.w rawchr
igncmd: moveq #"?",d0
bsr.w rawchr
shent: bsr.w csdown
sf col-base(a6)
truecmd:tst.b col-base(a6)
bne.b nnspec
bsr.w rprompt ;>
nnspec: movem.l (a7)+,d1/d7/a0
rts
shenter:movem.l d1/d7/a0,-(a7) ;no cmd execution
bra.b shent
cursoff:bset #0,nocrsr-base(a6)
btst #1,nocrsr-base(a6)
beq.b coff0
coff1: bra.w chgcrsr
curson: btst #1,nocrsr-base(a6)
bne.b crson0
bsr.b coff1
crson0: bclr #0,nocrsr-base(a6)
coff0: rts
rawprt: move.l d1,-(a7)
moveq #xchars-1,d1 ;print onto printer if online
lea linebuf-base(a6),a0
rp0: btst #0,$bfd000
bne.b noprt
move.b (a0)+,d0
bsr.b chrprt
dbf d1,rp0
moveq #13,d0 ;CR
bsr.b chrprt
moveq #11,d0 ;LF
bsr.b chrprt
move.l (a7)+,d1
rts
chrprt: move.b d0,$bfe101
moveq #100,d0
waitprt:tst.b 4.w
dbf d0,waitprt
wprt2: btst #0,$bfd000
beq.b noprt
btst #2,$dff016
bne.b wprt2
noprt: rts
rawline:tst.b prtflag-base(a6) ;col = 0 !
beq.b noprint
bsr.b rawprt
noprint: ;del: d0,a0
bsr.b rawout
lea linebuf-base(a6),a0
sf col-base(a6)
bra.w csdown
rawout: movem.l d1/d2/d3/a1-a5,-(a7) ;del: d0,a0
move.l a6,-(a7)
lea linebuf-base(a6),a0
lea font-base(a6),a1
move.l scradr-base(a6),a2
move.l a1,d3
moveq #0,d0
move.b row-base(a6),d0
mulu #xchars,d0
lea txtscr-base(a6),a6
add.w d0,a6
lsl.l #3,d0
add.l d0,a2
lea xpixel/8(a2),a3
lea xpixel/8(a3),a4
lea xpixel/8(a4),a5
moveq #xchars-1,d2
rl0: moveq #0,d0
move.b (a0),d0 ;char
moveq #$60,d1
and.b d0,d1 ;0-1f,80-9f?
bne.b rln1
moveq #" ",d0
rln1: moveq #" ",d1
move.b d0,(a6)+ ;ascii
bpl.b rln2
sub.b d1,d0
rln2: sub.b d1,d0 ;fontindex
move.b d1,(a0)+ ;" ",clr linebuf
lsl.w #3,d0
move.l d3,a1
add.w d0,a1
move.b (a1)+,(a2)+
move.b (a1)+,(a3)+
move.b (a1)+,(a4)+
move.b (a1)+,(a5)+
move.b (a1)+,xpixel/8*4-1(a2)
move.b (a1)+,xpixel/8*4-1(a3)
move.b (a1)+,xpixel/8*4-1(a4)
move.b (a1),xpixel/8*4-1(a5)
dbf d2,rl0
move.l (a7)+,a6
tst.b hilight-base(a6)
beq.b nohighl
moveq #8-1,d2
lea -xchars+2(a2),a2
rlhigh: not.l (a2)
not.l 4(a2)
lea xchars(a2),a2
dbf d2,rlhigh
sf hilight-base(a6)
nohighl:movem.l (a7)+,d1/d2/d3/a1-a5
bra pushcache
crsrtxt:lea txtscr-base(a6),a5 ;gimme pointers
moveq #0,d5
move.b col-base(a6),d5
add.l d5,a5
move.b row-base(a6),d5
mulu #xchars,d5
add.l d5,a5
rts
rprompt:moveq #">",d0
rawchr: movem.l d0-d1/d5/a2/a5,-(a7)
bsr.b crsrtxt
moveq #$60,d1
and.b d0,d1 ;0-1f,80-9f?
bne.b rc1
moveq #" ",d0
rc1: moveq #" ",d1
move.b d0,(a5) ;ascii
bpl.b rc2
sub.b d1,d0
rc2: sub.b d1,d0
and.w #$ff,d0 ;fontindex
bsr.b crsrbm
lea font-base(a6),a2
lsl.w #3,d0
add.w d0,a2
moveq #xpixel/8,d5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2)+,(a5)
add.w d5,a5
move.b (a2),(a5)
bsr.w csright
movem.l (a7)+,d0-d1/d5/a2/a5
bra pushcache
crsrbm: move.l scradr-base(a6),a5 ;more pointers
moveq #0,d5
move.b col-base(a6),d5
add.l d5,a5
move.b row-base(a6),d5
mulu #xpixel/8*8,d5
add.l d5,a5
rts
scroll: movem.l d0/a1-a2,-(a7)
lea $dff000,a2
bsr.w waitblt
waitfrm:btst #0,5(a2) ;$dff005, screen done?
bne.b waitfrm
move.l #$09f00000,$40(a2) ;$dff040 scroll up
moveq #-1,d0
move.l d0,$44(a2) ;$dff044
moveq #0,d0
move.l d0,$64(a2) ;$dff064 clr.l forbidden!
move.l scradr-base(a6),a1
move.l a1,$54(a2) ;$dff054
lea xpixel/8*8(a1),a1
move.l a1,$50(a2) ;$dff050
move.b rowsm1-base(a6),d0 ;word
ror.w #7,d0
add.w #xchars/2,d0
move.w d0,$58(a2) ;$dff058 start blit
lea txtscr-base(a6),a1
moveq #0,d0
move.b rowsm1-base(a6),d0
mulu #xchars/4,d0
subq.w #1,d0
scup2: move.l xchars(a1),(a1)+
dbf d0,scup2
moveq #xchars-1,d0
scup3: move.b #" ",(a1)+
dbf d0,scup3
bsr.b waitblt
moveq #0,d0
move.w d0,$74(a2) ;$dff074 clr.w forbidden
move.l #$01f00000,$40(a2) ;$dff040 clr bottom
move.l scradr-base(a6),a1
moveq #0,d0
move.b rowsm1-base(a6),d0
mulu #xchars*8,d0
add.l d0,a1
move.l a1,$54(a2) ;$dff054
move.w #8*64+40,$58(a2) ;$dff058
bsr.b waitblt
movem.l (a7)+,d0/a1-a2
rts
waitblt:
;move.w #$8400,$96(a2) ;$dff096, we are nasty
waibl: btst #14,$02(a2) ;$dff002
bne.b waibl
;move.w #$0400,$96(a2) ;$dff096, we are neat
rts
scrdown:movem.l d0/a1-a2,-(a7)
lea $dff000,a2
bsr.b waitblt
wfrm0: btst #0,5(a2) ;$dff005, screen done?
bne.b wfrm0
move.l #$09f00002,$40(a2) ;$dff040 scroll down
moveq #-1,d0
move.l d0,$44(a2) ;$dff044
moveq #0,d0
move.l d0,$64(a2) ;$dff064 clr.l forbidden!
move.l scradr-base(a6),a1
move.b rowsm1-base(a6),d0
mulu #xchars*8,d0
subq.w #2,d0
add.l d0,a1
move.l a1,$50(a2) ;$dff050
lea xpixel/8*8(a1),a1
move.l a1,$54(a2) ;$dff054
moveq #0,d0
move.b rowsm1-base(a6),d0 ;word
ror.w #7,d0
add.w #xchars/2,d0
move.w d0,$58(a2) ;$dff058 start blit
lea txtscr-base(a6),a1
moveq #0,d0
move.b rowsm1-base(a6),d0
mulu #xchars,d0
add.l d0,a1
lsr.w #2,d0
subq.w #1,d0
scdw2: move.l -(a1),xchars(a1)
dbf d0,scdw2
moveq #xchars-1,d0
scdw3: move.b #" ",(a1)+
dbf d0,scdw3
bsr.w waitblt
moveq #0,d0
move.w d0,$74(a2) ;$dff074 clr.w forbidden
move.l #$01f00000,$40(a2) ;$dff040 clr top
move.l scradr-base(a6),a1
move.l a1,$54(a2) ;$dff054
move.w #8*64+40,$58(a2) ;$dff058
bsr.w waitblt
movem.l (a7)+,d0/a1-a2
rts
audint: movem.l d0/d1/a0/a1/a6,-(a7) ;the soundint
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
lea $dff000,a0 ;play any length(>128k!)
moveq #127,d0
au0: tst.b 4.w
dbf d0,au0
move.l para+4-base(a6),d1
move.l para-base(a6),d0
sub.l d0,d1
bls.b au1
moveq #sndintstep,d0
cmp.l d0,d1
bls.b au3
move.l d0,d1
au3: move.l para-base(a6),$a0(a0) ;$dff0a0
move.l para-base(a6),$b0(a0) ;$dff0b0
add.l d1,para-base(a6) ;the online counter...
lsr.l #1,d1
move.w d1,$a4(a0) ;$dff0a4
move.w d1,$b4(a0) ;$dff0b4
move.w para+10-base(a6),d0
moveq #124,d1
cmp.w d1,d0
bcc.b au4
move.w d1,d0
au4: move.w d0,$a6(a0) ;$dff0a6
move.w d0,$b6(a0) ;$dff0b6
moveq #64,d0 ;volume
move.w d0,$a8(a0) ;$dff0a8
move.w d0,$b8(a0) ;$dff0b8
move.w #$8003,$96(a0) ;$dff096
bra.b au2
au1: clr.l para+4-base(a6)
move.w #$0080,$9a(a0) ;$dff09a
au2: move.w #$0080,$9c(a0) ;$dff09c clr sndint
movem.l (a7)+,d0/d1/a0/a1/a6
rte
vblint: movem.l d0-d7/a0-a6,-(a7)
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
lea $dff000,a5
tst.b frzflag-base(a6) ;did we freeze?
beq.b mutil3
moveq #0,d0
btst #0,modeflg-base(a6)
beq.b vblnlc
tst.w 4(a5)
bmi.b vblnlc
moveq #xchars,d0
vblnlc: add.l scradr-base(a6),d0
move.l d0,$e0(a5) ;cpu=copper?
bsr initcop
mutil3:
lea $bfe001,a4
move.l spradr-base(a6),a0
lea $120(a5),a1 ;$dff120
move.l a0,(a1)+
lea 72(a0),a0
moveq #7-1,d0
sprptr: move.l a0,(a1)+
dbf d0,sprptr
move.b $0a(a5),d0 ;$dff00a set mousecursor
move.b mousexy+1-base(a6),d1
move.b d0,mousexy+1-base(a6)
sub.b d1,d0
ext.w d0
add.w d0,msypos-base(a6)
move.w d0,d1
muls d0,d0 ;parabolic
cmp.w #25,d0
bhi.b mou6
tst.w d1
bpl.b mou5
neg.w d0
bra.b mou5
mou6: move.w d1,d0
muls #5,d0 ;linear
mou5: muls #xpixel/8,d0
sub.l d0,msycnt-base(a6)
move.b $0b(a5),d0 ;$dff00b
move.b mousexy-base(a6),d1
move.b d0,mousexy-base(a6)
sub.b d1,d0
ext.w d0
ext.l d0
move.l d0,d1
;divs #2,d0
add.w d0,msxpos-base(a6)
sub.l d1,msycnt-base(a6)
bpl.b mou4
clr.l msycnt-base(a6)
mou4: move.w msypos-base(a6),d0
cmp.w #40,d0
bhi.b mou2
moveq #40,d0
mou2: moveq #0,d1
move.b modeflg-base(a6),d1
add.w d1,d1
move.w msymax(pc,d1.w),d1
bra.b moucmp
msymax: dc.w 256+39,256+39,200+39,200+39,480+39
moucmp: cmp.w d1,d0
bls.b mou3
move.w d1,d0
mou3: move.w d0,msypos-base(a6)
move.w msxpos-base(a6),d1
cmp.w #60,d1
bhi.b mou0
moveq #60,d1
mou0: cmp.w #219,d1
bls.b mou1
move.w #219,d1
mou1: move.w d1,msxpos-base(a6)
btst #0,nocrsr-base(a6)
bne.w nosetcs
move.w #$0020,$96(a5) ;$dff096
moveq #0,d0
move.l d0,$144(a5) ;$dff144
move.w $0a(a5),d0 ;$dff00a
cmp.w lastms-base(a6),d0
beq.b noblnk
move.w d0,lastms-base(a6)
move.b #100,msdel-base(a6)
noblnk: tst.b msdel-base(a6)
beq.w nosetcs
subq.b #1,msdel-base(a6)
move.w #$8020,$96(a5) ;$dff096
moveq #-60,d1
add.w msxpos-base(a6),d1
lsr.b #1,d1
moveq #-40,d2
add.w msypos-base(a6),d2
btst #0,modeflg-base(a6)
beq.b mounlc2
add.w d2,d2
mounlc2:lsr.w #3,d2
btst #0,nocrsr-base(a6) ;ignore snap if no cursor blink
bne.b nosnap
btst #10,$16(a5) ;$dff016
bne.b norms
st rmsflag-base(a6)
bra.b nosnap
norms: tst.b rmsflag-base(a6)
beq.b nosnap
bsr.w cursoff
sf rmsflag-base(a6)
mulu #xpixel/8,d2 ;csrrow
snap0: lea txtscr-base(a6),a0
add.w d1,a0 ;csrcol
add.w d2,a0
move.b (a0),d0
cmp.b #" ",d0 ;eot
beq.b noseton
cmp.b #":",d0 ;skip :
beq.b snap1
cmp.b #"$",d0 ;skip $
beq.b snap1
cmp.b #"-",d0 ;skip -
bne.b snap2
moveq #" ",d0
snap2: bsr.w rawchr
snap1: addq.b #1,d1 ;col
cmp.b #xchars-1,d1
bls.b snap0
bsr.w curson
nosnap: btst #6,(a4) ;$bfe001
bne.b nosetcs
bsr.w cursoff
move.b d1,col-base(a6)
move.b d2,row-base(a6)
noseton:bsr.w curson
nosetcs:
move.l spradr-base(a6),a0 ;setspr
move.w msypos-base(a6),d0
sf 3(a0)
btst #8,d0
beq.b mvert0
bset #2,3(a0)
mvert0: move.b d0,(a0)
add.w #17,d0
btst #9,d0 ;multiscan, lower border
beq.b mvert2
move.w #$1ff,d0
mvert2: btst #8,d0
beq.b mvert1
bset #1,3(a0)
mvert1: move.b d0,2(a0)
move.b msxpos+1-base(a6),d0
cmp.b #4,modeflg-base(a6)
bne.b nmsmous
addq.b #4,d0
btst #0,d0
beq.b bit0zer
bset #0,3(a0)
bit0zer:lsr.b #1,d0
nmsmous:move.b d0,1(a0)
move.b ascii-base(a6),d0;keysub,delay and repeat...
beq.b rk0
cmp.b #$1b,d0 ;escape
beq.b rk0
cmp.b prvkey-base(a6),d0
bne.b rk1
cmp.b #20,repdel-base(a6)
beq.b rk2
addq.b #1,repdel-base(a6)
bra.b rk3
rk2: cmp.b #1,d0 ;sh-csup fast key repeat
beq.b rkfast
cmp.b #2,d0 ;sh-csdown fast key repeat
beq.b rkfast
cmp.b #$10,d0 ;csup fast key repeat
beq.b rkfast
cmp.b #$11,d0 ;csdown
beq.b rkfast
cmp.b #$0d,d0 ;return
beq.b rkfast
addq.b #1,keydel-base(a6) ;slow key repeat
move.b rateflg-base(a6),d1
cmp.b keydel-base(a6),d1
bcc.b rk3
rkfast: sf keydel-base(a6)
bsr.b bufit
bra.b rk3
rk1: move.b d0,prvkey-base(a6)
rk0: sf repdel-base(a6)
rk3:
bsr.b cursor
tst.w count-base(a6)
beq.b vbltime
subq.w #1,count-base(a6)
vbltime:move.w #$0070,$9c(a5) ;$dff09c
movem.l (a7)+,d0-d7/a0-a6
rte
cursor: btst #0,nocrsr-base(a6)
bne.b crsr0
subq.b #1,crsrdel-base(a6)
bne.b crsr0
move.b #10,crsrdel-base(a6)
chgcrsr:movem.l d5/a5,-(a7)
bsr.w crsrbm
moveq #8-1,d5
chgcsln:not.b (a5)
lea xpixel/8(a5),a5
dbf d5,chgcsln
bchg #1,nocrsr-base(a6)
movem.l (a7)+,d5/a5
crsr0: rts
bufit: movem.l d0-d1/a0,-(a7)
tst.b dontbuf-base(a6)
bne.b ign0
lea keybuf-base(a6),a0
move.w buflen-base(a6),d1
beq.b bufit0
cmp.w #40,d1
bge.b ign0
cmp.b #1,d0 ;shift-csup?
beq.b bufit1
cmp.b #2,d0 ;shift-csdown?
beq.b bufit1
cmp.b #13,d0
bne.b bufit0
bufit1: cmp.b -1(a0,d1.w),d0
beq.b ign0
bufit0: move.b d0,(a0,d1.w)
addq.w #1,buflen-base(a6)
ign0: movem.l (a7)+,d0-d1/a0
rts
keyint: movem.l d0/d1/a0/a4/a6,-(a7)
lea $dff006,a4
move.w #$0008,$9a-6(a4) ;$dff09a
lea base-$7ffe(pc),a6
lea $7ffe(a6),a6
btst #3,$bfed01 ;ciaa icr sp?
beq.w key0
moveq #0,d0
move.b $bfec01,d0
bset #6,$bfee01 ;cia sp out
st $bfec01
not.b d0
lsr.w #1,d0
bcs.b keyoff
cmp.b #$60,d0 ;any shifting?
blt.b key2
cmp.b #$67,d0
bhi.b key3
bset d0,shflag-base(a6)
bra.b key3
key2: moveq #7,d1
and.b shflag-base(a6),d1
beq.b key4
cmp.b #$45,d0 ;rawcode esc
bne.b key7
cmp.b #"g",lastcmd-base(a6)
bne.b key7
lea gg1(pc),a0 ;stack cleanup
move.l 5*4+2(a7),breakpc-base(a6)
move.l a0,5*4+2(a7)
bra.b key3
key7: add.w #$60,d0
key4: lea keytab-base(a6),a0
move.b (a0,d0.w),d0
beq.b key3
move.b d0,ascii-base(a6)
cmp.b #$1b,d0 ;escape
beq.b key3
bsr.w bufit
bra.b key3
keyoff: cmp.b #$60,d0 ;any shifting?
blt.b key5
cmp.b #$67,d0
bhi.b key3
bclr d0,shflag-base(a6)
bra.b key3
key5: sf ascii-base(a6)
key3: moveq #4-1,d0
key6: move.b (a4),d1
key1: cmp.b (a4),d1
beq.b key1
dbf d0,key6
bclr #6,$bfee01 ;ciaa sp in
key0:
move.w #$0008,$9c-6(a4) ;$dff09c
move.w #$8008,$9a-6(a4) ;$dff09a
movem.l (a7)+,d0/d1/a0/a4/a6
rte
; here come the commands..
dc.b "$VER:BeerMon 0."
dc.b version/10+"0",-version/10*10+version+"0",0
cmd: dc.b "S"!$80
dc.b "L"!$80
dc.b "verify"!$80
dc.b "vc"!$80
dc.b "v"!$80
dc.b "smd2raw"!$80
dc.b "famiplay"!$80
dc.b "rawplay"!$80
dc.b "smdplay"!$80
dc.b "settt0"!$80
dc.b "settt1"!$80
dc.b "settc"!$80
dc.b "setsrp"!$80
dc.b "setcrp"!$80
dc.b "setdrp"!$80
dc.b "setmmusr"!$80
dc.b "s"!$80
dc.b "l"!$80
dc.b "D"!$80
dc.b "accu"!$80
dc.b "index"!$80
dc.b "auto"!$80
dc.b "install"!$80
dc.b "info"!$80
dc.b "imp"!$80
dc.b "i"!$80
dc.b "p"!$80
dc.b "gary"!$80
dc.b "g"!$80
dc.b "h"!$80
dc.b "?"!$80
dc.b "ramsey"!$80
dc.b "r"!$80
dc.b "R"!$80
dc.b "match"!$80
dc.b "mmuon"!$80
dc.b "mmuoff"!$80
dc.b "mmu"!$80
dc.b "mk"!$80
dc.b "megasum"!$80
dc.b "famisum"!$80
dc.b "m"!$80
dc.b ":"!$80
dc.b "a"!$80
dc.b ";"!$80
dc.b "x"!$80
dc.b "X"!$80
dc.b "ow"!$80
dc.b "ol"!$80
dc.b "o"!$80
dc.b "exp"!$80
dc.b "ew"!$80
dc.b "el"!$80
dc.b "e"!$80
dc.b "cd"!$80
dc.b "cls"!$80
dc.b "cop"!$80
dc.b "config"!$80
dc.b "custom"!$80
dc.b "c"!$80
dc.b "format"!$80
dc.b "fi"!$80
dc.b "fmode"!$80
dc.b "f"!$80
dc.b "F"!$80
dc.b "time"!$80
dc.b "type"!$80
dc.b "t"!$80
dc.b "/"!$80
dc.b "V"!$80
dc.b "."!$80
dc.b "W"!$80
dc.b "datasum"!$80
dc.b "del"!$80
dc.b "dir"!$80
dc.b "ds"!$80
dc.b "dm"!$80
dc.b "dv"!$80
dc.b "d"!$80
dc.b "u"!$80
dc.b "_"!$80
dc.b "N"!$80
dc.b "nop"!$80
dc.b ","!$80
dc.b "n"!$80
dc.b "K"!$80
dc.b "B"!$80
dc.b "bootsum"!$80
dc.b "bitsum"!$80
dc.b "binw"!$80
dc.b "]"!$80
dc.b "binl"!$80
dc.b "["!$80
dc.b "bint"!$80
dc.b "}"!$80
dc.b "binq"!$80
dc.b "{"!$80
dc.b "bin"!$80
dc.b "|"!$80
dc.b "bc"!$80
dc.b "bs"!$80
dc.b "bl"!$80
dc.b "b"!$80
dc.b "M"!$80
dc.b "P"!$80
dc.b "kicksum"!$80
dc.b "k"!$80
dc.b " "!$80,0
even
cmdjmp: dc.w save-cmdjmp,load-cmdjmp,verify-cmdjmp
dc.w srcsync-cmdjmp,syncw-cmdjmp
dc.w smd2raw-cmdjmp,famplay-cmdjmp,rawplay-cmdjmp,smdplay-cmdjmp
dc.w settt0-cmdjmp,settt1-cmdjmp,settc-cmdjmp,setsrp-cmdjmp
dc.w setcrp-cmdjmp,setdrp-cmdjmp,setmusr-cmdjmp
dc.w sblk-cmdjmp,lblk-cmdjmp,drive-cmdjmp
dc.w accu-cmdjmp,index-cmdjmp,auto-cmdjmp
dc.w install-cmdjmp,info-cmdjmp,implode-cmdjmp,i-cmdjmp,p-cmdjmp
dc.w gary-cmdjmp,g-cmdjmp,hunk-cmdjmp
dc.w calc-cmdjmp,ramsey-cmdjmp,r-cmdjmp,rfpu-cmdjmp
dc.w match-cmdjmp
dc.w mmuon-cmdjmp,mmuoff-cmdjmp,rmmu-cmdjmp
dc.w makedir-cmdjmp,megasum-cmdjmp,famisum-cmdjmp
dc.w m-cmdjmp,mm-cmdjmp,a-cmdjmp,aa-cmdjmp,x-cmdjmp,xclr-cmdjmp
dc.w ow-cmdjmp,ol-cmdjmp,ob-cmdjmp
dc.w explode-cmdjmp,ew-cmdjmp,el-cmdjmp,eb-cmdjmp
dc.w cd-cmdjmp,cls-cmdjmp,huntcop-cmdjmp
dc.w config-cmdjmp,custom-cmdjmp,c-cmdjmp,format-cmdjmp
dc.w fd-cmdjmp,fmode-cmdjmp,f-cmdjmp,frel-cmdjmp
dc.w time-cmdjmp,type-cmdjmp,t-cmdjmp
dc.w sysinfo-cmdjmp,copper-cmdjmp,copass-cmdjmp
dc.w work-cmdjmp,dtsum-cmdjmp
dc.w delete-cmdjmp,catalog-cmdjmp
dc.w ds-cmdjmp,dm-cmdjmp,dv-cmdjmp,d-cmdjmp
dc.w d6502-cmdjmp,n6502-cmdjmp,nass65-cmdjmp
dc.w nopit-cmdjmp,n-cmdjmp,nass-cmdjmp,setkey-cmdjmp,color-cmdjmp
dc.w btsum-cmdjmp,bisum-cmdjmp
dc.w binw-cmdjmp,edbinw-cmdjmp,binl-cmdjmp,edbinl-cmdjmp
dc.w bint-cmdjmp,edbint-cmdjmp
dc.w binq-cmdjmp,edbinq-cmdjmp,binb-cmdjmp,edbinb-cmdjmp
dc.w bpclr-cmdjmp,bpset-cmdjmp,bplist-cmdjmp,bpl-cmdjmp
dc.w map-cmdjmp,print-cmdjmp,kisum-cmdjmp,setmap-cmdjmp
dc.w spc-cmdjmp
x: bra.w exit
save: lea 2(a5),a0
bsr.w getfilename ;a0:txt>a0:endname,a2:name,d4.w:len
move.w d4,para+12-base(a6)
beq.w svq
cmp.w #30,d4
bhi.w svq
bsr.w skipspc
bhi.w svq
move.l a0,a3
bsr.w atolong
move.l d0,para-base(a6)
move.l a3,a0
bsr.w skipspc
bhi.w svq
move.l a0,a3
bsr.w atolong
move.l d0,para+4-base(a6)
beq.w svq
move.l para-base(a6),d1
cmp.l d0,d1
bhi.w svq
move.l d1,para+8-base(a6)
st wrcmd-base(a6)
st wrflag-base(a6)
bsr.w initdosdrive ;reads root/dir
bne.w sv1
move.l a2,a0
bsr.w fnhash ;a0:str,d4.w:fnlen>d4.w:rootidx,d5:blk
beq.b sv5 ;hash entry zero?
bsr.w searchfile ;d5:1st hash,a2:fname
;>prevchain,a4:header
beq.b sv5
bsr.w fexists
bra.w sv1
sv5: tst.b dskerr-base(a6)
bne.w sv1
bsr.w cntfree
beq.w savfull
movem.l para-base(a6),d0-d1
sub.l d0,d1
beq.b sv19
bsr maxfile
cmp.l d0,d1
bls.b sv19
bsr notenou
bra.w sv1
sv19: bsr.w getfreehead ;fileheader
beq.w savfull
move.l d0,a3 ;headerkey
move.l d0,fheader-base(a6)
clr.w datanum-base(a6) ;cnt datablk
lea header-base(a6),a5
move.l a5,a0
moveq #512/4-1,d6
sv2: clr.l (a0)+
dbf d6,sv2
lea $149(a5),a1 ;bcpl filenote
move.l a1,a0
move.l para-base(a6),d0
bsr.w longtoa_
move.b #"-",(a0)+
move.l para+4-base(a6),d0
bsr.w longtoa_
sub.l a1,a0
move.w a0,d0
move.b d0,-(a1) ;strlen
bsr.w getclok
move.l days-base(a6),$1a4(a5)
move.l mins-base(a6),$1a8(a5)
move.l ticks-base(a6),$1ac(a5)
lea linebuf+1-base(a6),a0
lea savetxt-base(a6),a1
bsr.w txttobuf
move.w para+12-base(a6),d0 ;fnlen!
subq.w #1,d0
lea $1b1(a5),a1 ;copy bcplname
sv4: move.b (a2),(a1)+
move.b (a2)+,(a0)+
addq.b #1,$1b0(a5)
dbf d0,sv4
move.b #34,(a0)+
bsr.w rawline
bsr.w csdown
;;;
move.l roothash-base(a6),a1
clr.l linkkey-base(a6)
move.l (a1),d5 ;root entry free?
beq.b fhroot
sortfh: cmp.l fheader-base(a6),d5 ;root entry higher?
bhi.b fhroot
move.l d5,linkkey-base(a6)
lea rootblk-base(a6),a4
move.l a4,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.w sv1
move.l $1f0(a4),d5 ;hashchain
bne.b sortfh
fhroot: move.l d5,$1f0(a5) ;set hashchain
;;;
move.l dirkey-base(a6),$1f4(a5) ;fileheader parent
move.l para+4-base(a6),d0
sub.l para-base(a6),d0
move.l d0,$144(a5) ;filesize
move.l d0,filesiz-base(a6)
beq.b sv14 ;empty file:no datablk
bsr.w getfree
beq.w savfull
move.l d0,d4
;;;;;;; take care of registers...
sv14: moveq #2,d6
sv18: move.l d6,(a5) ;primary type fheader
moveq #-3,d6
move.l d6,$1fc(a5) ;secondary type fileheader
move.l a3,4(a5) ;own key
lea $134+4(a5),a4 ;1st data
tst.l filesiz-base(a6) ;empty?
move.l para+4-base(a6),a1 ;set eof
beq.w svempty
sv8: move.l d4,-(a4)
addq.l #1,8(a5) ;datas in this header (OFS)
lea rootblk+512-base(a6),a0 ;rootblk=datablkbuffer
moveq #512/4-1,d6
sv9: clr.l -(a0)
dbf d6,sv9
move.l para+4-base(a6),d0
sub.l para+8-base(a6),d0
subq.l #1,d0
divu datasiz-base(a6),d0
tst.w d0 ;another data?
beq.b sv17
bsr.w getfree
beq.w savfull
move.l d0,d4
move.l d4,$10(a0) ;nextdata (OFS)
sv17: move.l para+8-base(a6),a1
move.l a0,a2
moveq #0,d0 ;bytecnt
tst.b ffs-base(a6)
bne.b sv10
lea $18(a0),a2 ;OFS dataoffset
sv10: cmp.l para+4-base(a6),a1
bcc.b sv11
move.b (a1)+,(a2)+
addq.w #1,d0 ;bytes inblk
cmp.w datasiz-base(a6),d0 ;has been cleared
bne.b sv10
sv11: move.l a1,para+8-base(a6)
pea rootblk-base(a6) ;\
move.l (a7)+,d6 ;/
move.l (a4),d5 ;datakey !!
tst.b ffs-base(a6)
bne.b svffs
move.l d0,12(a0) ;# databytes in this blk
moveq #8,d0 ;OFS!
move.l d0,(a0) ;type
addq.w #1,datanum-base(a6)
move.w datanum-base(a6),8+2(a0) ;datanum
move.l fheader-base(a6),4(a0) ;dataownkey=fileheader!
bsr.w datasum
move.l d3,20(a0)
svffs: bsr.w putsec ;save data
tst.b dskerr-base(a6)
bne.w sv1
svempty:lea linebuf+1-base(a6),a0
move.l para-base(a6),d0
move.l para+8-base(a6),d1
bsr.w csup
bsr.w twolong_
bsr.w rawline
bsr.w stopit
beq.w sv1
cmp.l para+4-base(a6),a1 ;next filelist or eof?
beq.b sv15
moveq #72,d6
cmp.l 8(a5),d6 ;(OFS)!
bne.b sv12
bsr.w getfree ;filelist between datablk
beq.w savfull
move.l d0,a3
move.l d0,$1f8(a5) ;filelist
sv15: move.l a5,a0
move.l $134(a0),$10(a0) ;1st data
bsr.w datasum
move.l d3,20(a0)
move.l 4(a0),d5
move.l a0,d6
bsr.w putsec ;save header
tst.b dskerr-base(a6)
bne.b sv1
cmp.l para+4-base(a6),a1 ;eof
beq.b sv16
moveq #512/4-1,d6
sv13: clr.l (a0)+
dbf d6,sv13
move.l fheader-base(a6),$1f4(a5)
moveq #$10,d6 ;primary type:filelist
bra.w sv18
sv12: cmp.l para+4-base(a6),a1 ;eof
bcs.w sv8
sv16: lea rootblk-base(a6),a2
move.l a2,d6 ;rootblk/dirblk
lea rootblk+$1f0-base(a6),a2 ;hashchain
move.l linkkey-base(a6),d5
bne.b sortfhd
move.l roothash-base(a6),a2
move.l dirkey-base(a6),d5
sortfhd:bsr.w getsec
tst.b dskerr-base(a6)
bne.b sv1
move.l fheader-base(a6),(a2) ;insert fileheader
lea rootblk-base(a6),a0 ;root/fheader chk
bsr.w datasum
move.l d3,20(a0)
bsr.w putsec ;write root/fheader
tst.b dskerr-base(a6)
bne.b sv1
bsr.w bitsum
lea bitmap-base(a6),a0
move.l a0,d6
move.l bitsec-base(a6),d5
bsr.w putsec
tst.b dskerr-base(a6)
bne.b sv1
bsr.w updatedisk
sv1: bsr.w motoff
st d7
svq: rts
savfull:bsr.w dskfull
bra.b sv1
freeblk:cmp.l lastkey-base(a6),d0 ;too much is too much...
bhi.b freeb0
lea bitmap-base(a6),a0
subq.l #2,d0
bmi.b freeb0
move.l d0,d1
lsr.w #5,d1
add.w d1,d1
add.w d1,d1 ;lsl.w #2,d1
move.l 4(a0,d1.w),d2
bset d0,d2
bne.b freeb0
move.l d2,4(a0,d1.w)
moveq #-1,d0
rts
freeb0: moveq #0,d0
rts
getfreehead:move.l rootkey-base(a6),d0 ;collect the headers a bit..
bsr.b getf2
beq.b getfree
rts
getfree:moveq #0,d0 ;d0,d1,d2>d0
getf2: move.l a0,-(a7)
lea bitmap-base(a6),a0
getf1: move.w d0,d1
lsr.w #5,d1
add.w d1,d1 ;lsl.w #2,d1
add.w d1,d1
move.l 4(a0,d1.w),d2
bclr d0,d2
bne.b getf0
addq.l #1,d0
cmp.l lastkeym1-base(a6),d0
bne.b getf1
moveq #-2,d0
getf0: move.l d2,4(a0,d1.w)
move.l (a7)+,a0
addq.l #2,d0 ;beq.b nofree
rts
bitsum: lea bitmap-base(a6),a0 ;a0:bitmap
bitsum2:lea 4(a0),a1
moveq #0,d1
moveq #512/4-1-1,d0
bms0: sub.l (a1)+,d1
dbf d0,bms0
move.l d1,(a0)
rts
getfilename:
clr.w d4
bsr.b skipspc
bhi.b fnquo2
move.l a0,a2
cmp.b #34,(a0)
bne.b fnquo0
clr.w d4
addq.w #1,a2
addq.w #1,a0
fnquo1: cmp.b #34,(a0)+
beq.b fnquo2
addq.w #1,d4
bra.b fnquo1
fnquo0: bsr.b findspc
bhi.b fnquo2
move.l a0,d4
sub.l a2,d4 ;fnlen
fnquo2: tst.w d4
rts
skipspc:cmp.b #" ",(a0)
bne.b fnspc0
addq.w #1,a0
bra.b skipspc
findspc:cmp.b #" ",(a0)
beq.b fnspc0
addq.w #1,a0
bra.b findspc
fnspc0: cmp.l lineend-base(a6),a0 ;bhi.b eol
rts
type: st typeflg-base(a6)
lea 5(a5),a0 ;type a file
bra.b dotype
load: sf typeflg-base(a6)
lea 2(a5),a0 ;load a file, usual stuff...
dotype: bsr.b getfilename ;a0:txt>a0:endname,a2:name,d4.w:len
move.w d4,para+12-base(a6)
beq.w ldq
cmp.w #30,d4
bhi.w ldq
moveq #1,d0 ;dummy destadr
tst.b typeflg-base(a6)
bne.b dotype0
bsr.b skipspc
bhi.w ldq
move.l a0,a3
bsr.w atolong
dotype0:move.l d0,para-base(a6)
move.l d0,para+4-base(a6)
beq.w ldq
sf wrcmd-base(a6)
sf wrflag-base(a6)
bsr.w initdosdrive ;reads root/dir
bne.w ld1
move.l a2,a0
bsr.w fnhash ;a0:str,d4.w:fnlen>d4.w:rootidx,d5:blk
beq.b ld5 ;hash entry zero?
bsr.w searchfile ;d5:1st hash,a2:fname
;>prevchain,a4:header
bne.b ld3
ld5: bsr.w fnotfnd
bra.w ld1
ld3: tst.b dskerr-base(a6)
bne.w ld1
move.l $1fc(a4),d0
subq.l #2,d0 ;2:dir
beq.b ld12
subq.l #2,d0 ;4:linked dir
beq.b ld12
addq.l #7,d0 ;-3:file
beq.b ld2
addq.l #1,d0 ;-4:linked file
bne.w ld1 ;illegal type
move a4,d6 ;header
move.l $1d4(a4),d5 ;hardlink
bsr.w getsec
tst.b dskerr-base(a6)
bne.w ld1
bra.b ld2
ld12: bsr.w fisdir
bra.w ld1
ld2: lea linebuf+1-base(a6),a0
lea typetxt-base(a6),a1
tst.b typeflg-base(a6)
bne.b dotype3
lea loadtxt-base(a6),a1
dotype3:bsr.w txttobuf
move.w para+12-base(a6),d0 ;fnlen!
subq.w #1,d0
move.l a2,a1
ld4: move.b (a1)+,(a0)+
dbf d0,ld4
move.b #34,(a0)+
bsr.w rawline
bsr.w csdown
move.l $144(a4),filesiz-base(a6)
ld6: moveq #72,d3 ;max #datablk in header
lea $134+4(a4),a3 ;blkmap
ld8: tst.b typeflg-base(a6)
bne.b dotype1
lea linebuf+1-base(a6),a0
move.l para-base(a6),d0
move.l para+4-base(a6),d1
bsr.w twolong_
bsr.w csup
bsr.w rawline
dotype1:bsr.w stopit
beq.w ld1
subq.l #1,d3
bmi.w ld7
move.l -(a3),d5
lea rootblk-base(a6),a0
move.l a0,d6 ;databuf
bsr.w getsec
tst.b dskerr-base(a6)
bne.w ld1
move.l filesiz-base(a6),d0 ;filesize
beq.w ld1 ;empty file
sub.l para+4-base(a6),d0 ;\
add.l para-base(a6),d0 ;/loaded bytes
beq.w ld1
subq.l #1,d0
divu datasiz-base(a6),d0
tst.w d0
bne.b ldblk
swap d0
addq.w #1,d0
bra.b ldrest
ldblk: move.w datasiz-base(a6),d0
ldrest:
tst.b ffs-base(a6)
bne.b ldffs
lea $18(a0),a0 ;datastart
ldffs: tst.b typeflg-base(a6)
beq.b doload
ext.l d0
add.l d0,para+4-base(a6)
move.l d0,d1
ldtype0:subq.w #1,d1
bmi.b ldtype1
bsr.w stopit
beq.b ld1
cmp.b #xchars,col-base(a6)
bne.b ldtype5
addq.w #1,d1
bra.b ldtype4
ldtype5:move.b (a0)+,d0
cmp.b #LF,d0
bne.b ldtype2
ldtype4:sf col-base(a6)
bsr csdown
bra.b ldtype3
ldtype2:bsr.w rawchr
ldtype3:bra.b ldtype0
ldtype1:
bra.w ld8
doload: move.l para+4-base(a6),a1
ld10: subq.w #1,d0
bmi.b ld11
move.b (a0)+,(a1)+
bra.b ld10
ld11: move.l a1,para+4-base(a6)
bra.w ld8
ld7: move.l $1f8(a4),d5 ;file extension
beq.b ld1
move.l a4,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.b ld1
bra.w ld6
ld1: tst.b typeflg-base(a6)
beq.b dotype2
sf col-base(a6)
bsr csdown
dotype2:bsr.w motoff
st d7
ldq: rts
searchfile: ;d5:1st hash,a2:fname
lea header-base(a6),a4 ;>prevchain,a4:header
move.l a4,d6
clr.l prevchain-base(a6) ;rootchain!
srfile2:bsr.w getsec
tst.b dskerr-base(a6) ;!!
bne.b srerr
lea $1b0(a4),a0 ;filename
move.b (a0)+,d0
move.l a2,a1
srfile0:subq.b #1,d0
bmi.b srfile1
move.b (a0)+,d2
bsr.w upcase
move.b d2,d3
move.b (a1)+,d2
bsr.w upcase
cmp.b d2,d3
beq.b srfile0
move.l 4(a4),prevchain-base(a6) ;prevchain
move.l $1f0(a4),d5
bne.b srfile2
srerr: moveq #0,d0 ;beq.b notfnd
rts
srfile1:moveq #-1,d0
rts
bmaperr:lea bittxt-base(a6),a1 ;the errors are cummin'
bra.b fnf0
notenou:lea nenotxt-base(a6),a1
bra.b fnf0
dskfull:lea dskftxt-base(a6),a1
bra.b fnf0
dnotmt: lea dnmtxt-base(a6),a1
bra.b fnf0
dexists:lea dextxt-base(a6),a1
bra.b fnf0
disfile:lea diftxt-base(a6),a1
bra.b fnf0
dnotfnd:lea dnftxt-base(a6),a1
bra.b fnf0
fexists:lea fextxt-base(a6),a1
bra.b fnf0
fisdir: lea fidtxt-base(a6),a1
bra.b fnf0
fnotfnd:lea fnftxt-base(a6),a1
fnf0:
msgout: lea linebuf+1-base(a6),a0 ;a1:txt->a0:linebuf
bsr.w txttobuf
bra.w rawline
fnhash: move.l d4,d0
clr.w d2
subq.w #1,d0
fn1: mulu #13,d4
move.b (a0)+,d2
bsr.b hashcnv
add.w d2,d4
and.w #$7ff,d4
dbf d0,fn1
divu #72,d4
swap d4
addq.w #6,d4
add.w d4,d4 ;lsl.w #2,d4
add.w d4,d4
lea rootblk-base(a6),a0
lea (a0,d4.w),a0
move.l a0,roothash-base(a6)
move.l (a0),d5
rts
hashcnv:tst.b int-base(a6)
beq.b upcase
cmp.b #$f7,d2 ;international filenames
beq.b hashcv0
movem.l d0/d1,-(a7)
move.b d2,d0
move.l #"~`za",d1 ;$7e607a61
bclr #7,d2
beq.b hashcv1
swap d1
hashcv1:cmp.b d1,d2
blt.b hashcv2
lsr.l #8,d1
cmp.b d1,d2
bgt.b hashcv2
bclr #5,d0
hashcv2:move.b d0,d2
movem.l (a7)+,d0/d1
hashcv0:rts
upcase: cmp.b #"a",d2
bcs.b upcas0
cmp.b #"z",d2
bhi.b upcas0
bclr #5,d2
upcas0: rts
syncw: cmp.b #1,d3 ;yo, we have a new syncword
bhi.b syq
tst.b d3
beq.b sy0
move.w para+2-base(a6),sync-base(a6)
sy0: lea linebuf+1-base(a6),a0
lea synctxt(pc),a1
bsr.w txttobuf
move.w sync-base(a6),d0
move.w d0,d4
bsr.w wordtoa_
moveq #15-1,d0
moveq #%11,d2
bra.b sy5
sy6: add.w d2,d2
sy5: move.w d4,d1
not.w d1
and.w d2,d1
dbeq d0,sy6
beq.b sy3 ;%11 invalid
moveq #13-1,d0
moveq #%1111,d2
bra.b sy7
sy8: add.w d2,d2
sy7: move.w d4,d1
and.w d2,d1
dbeq d0,sy8
beq.b sy3 ;%0000 invalid
moveq #14-1,d0
moveq #%111,d2 ;a valid sync?
bra.b sy4
sy1: add.w d2,d2
sy4: move.w d4,d1
and.w d2,d1
dbeq d0,sy1
beq.b sy2 ;%000 suitable
sy3: lea invltxt(pc),a1
bsr.w txttobuf
sy2: bsr.w rawline
st d7
syq: rts
srcsync:moveq #0,d5 ;default trk0
subq.b #1,d3 ;vc
bmi.b sync11
bhi.w syq
move.l para-base(a6),d5
cmp.l #82*2-1,d5
bhi.w syq
sync11:
bsr.w motondt ;stays selected
bsr.w stepup
bsr.w stepdwn
sf dskerr-base(a6)
bsr.w trk0
tst.b dskerr-base(a6)
bne.w sync7
sf wrflag-base(a6)
bsr.w testindrive ;wrflag?
bne.w sync7
move.l d5,d1
bsr.w dotrk
move.l dskadr-base(a6),a3
moveq #-1,d0
move.w readlen-base(a6),d1
lsr.w #1,d1
bra.b sync2
sync8: move.l d0,(a3)+
sync2: dbf d1,sync8
bsr.w readmfmindex
moveq #16-1,d5
rotloop:
move.l dskadr-base(a6),a3
move.w readlen-base(a6),d0
add.w d0,d0
lea (a3,d0.w),a4 ;dmaend
lea linebuf-base(a6),a0
move.b #"-",(a0)+
sync1: cmp.l a4,a3
bcc.b sync4
cmp.w #$aaaa,(a3)+ ;find $aaaa
bne.b sync1
sync5: cmp.w #$aaaa,(a3) ;skip $aaaa
bne.w sync3
addq.w #2,a3
bra.b sync5
sync3: move.w (a3)+,d3
moveq #%111,d2
moveq #7-1,d1
syncmsk:move.w d3,d0
and.w d2,d0
beq.b issync1
add.w d2,d2
add.w d2,d2
dbf d1,syncmsk
bra.b sync1
issync1:tst.w d1 ;last mask?
beq.b issync
issync0:add.w d2,d2
add.w d2,d2
move.w d3,d0 ;more than 1 sync pattern?
and.w d2,d0
beq.b sync1 ;skip
dbf d1,issync0
issync: cmp.l a4,a3
bhi.b sync4
lea linebuf+xchars-6-base(a6),a1
cmp.l a1,a0 ;too many 'syncs' = trash
bhi.b sync9
move.w d3,d0
bsr.w wordtoa
addq.w #1,a0
bra.b sync1
sync4: lea linebuf+1-base(a6),a1
cmp.l a1,a0
beq.b sync6
bsr.w rawline
sync9: lea linebuf-base(a6),a0
move.b #"-",(a0)+
sync6: move.l dskadr-base(a6),a3
move.w readlen-base(a6),d0
move.w -2(a4),d1
lsr.w #1,d1
bra.w sync0
rotate: roxr.w (a3)+
sync0: dbf d0,rotate
dbf d5,rotloop
sync7: bsr.w motoff
bsr.b clrlbuf
st d7
rts
clrlbuf:lea linebuf-base(a6),a0
moveq #xchars-1,d0
clrlb0: move.b #" ",(a0)+
dbf d0,clrlb0
rts
megasum:subq.l #1,d3
bne.b megaq
move.l para-base(a6),d4
btst #0,d4
bne.b megaq
move.l d4,a0
move.l $1a4(a0),d1 ;endaddress
cmp.l #$1fffff,d1 ;max 16Mbit
bhi.b nomod
addq.l #1,d1
move.l d1,d0
and.w #$1fff,d0 ;min 8kb
bne.b nomod
sub.l #$200,d1
moveq #0,d3
lea $200(a0),a1
megchk: add.w (a1)+,d3
subq.l #2,d1
bne.b megchk
move.w $18e(a0),d2
move.w d3,$18e(a0)
lea linebuf+1-base(a6),a0
lea chktxt1(pc),a1
bsr.w txttobuf
move.w d2,d0
bsr.w wordtoa_
lea chktxt2(pc),a1
bsr.w txttobuf
move.w d3,d0
bsr.w wordtoa_
bsr.w rawline
nomgd: st d7
megaq: rts
nomod: lea nmgdtxt(pc),a1
bsr.w msgout
bra.b nomgd
famiq: rts
famisum:subq.l #1,d3
bne.b famiq
move.l para-base(a6),d0
btst #0,d0
bne.b famiq
move.l d0,a2
cmp.w #$aabb,8(a2) ;header?
bne.b nohead
lea $200(a2),a2 ;skip header
nohead: lea linebuf+1-base(a6),a0
lea nametxt(pc),a1
bsr.w txttobuf
lea $7fc0(a2),a3
moveq #22-1,d0
famitit:move.b (a3)+,(a0)+
dbf d0,famitit
addq.w #1,a0
move.b (a3)+,d5 ;$7fc0+22=$7fd6
moveq #0,d1
move.b (a3)+,d1 ;$7fd7 romsize
moveq #10,d0
add.b d1,d0
moveq #0,d4
bset d0,d4 ;romlen
moveq #0,d0
bset d1,d0
bsr.w hextod
lea mromtxt(pc),a1
bsr.w txttobuf
move.b (a3)+,d1 ;$7fd8 ramsize
subq.b #1,d5 ;type
bmi.b faminf1
lea mramtxt(pc),a1
beq.b faminf2
lea backtxt(pc),a1
faminf2:moveq #0,d0
bset d1,d0
bsr.w hextod
move.b #"K",(a0)+
move.b #"B",(a0)+
bsr.w txttobuf
faminf1:lea manutxt(pc),a1
bsr.w txttobuf
move.b (a3)+,d0 ;$7fd9
lsl.w #8,d0
move.b (a3)+,d0 ;$7fda
bsr.w wordtoa_
bsr.w txttobuf
move.b (a3)+,d0 ;$7fdb
bsr.w bytetoa_
bsr.w rawline
move.l (a3),d2 ;$7fdc checksum
clr.l (a3)
not.w (a3)
moveq #0,d0
moveq #0,d1
move.l a2,a0
famis1: add.b (a0)+,d0
bcc.b famis0
addq.b #1,d1
famis0: subq.l #1,d4
bne.b famis1
lsl.w #8,d0
move.b d1,d0
move.w d0,d3
not.w d3
swap d3
move.w d0,d3
move.l d3,(a3)
bra.b sumout
btsum: lea bootsub(pc),a2
bra.b check
dtsum: lea datasub(pc),a2
bra.b check
bisum: lea bitsub(pc),a2
bra.b check
kisum: lea kicksub(pc),a2
check: subq.l #1,d3 ;lets calc some checksums
bne.b chkq
move.l para-base(a6),d4
btst #0,d4
bne.b chkq
move.l d4,a0
jsr (a2)
sumout: lea linebuf+1-base(a6),a0
lea chktxt1(pc),a1
bsr.w txttobuf
move.l d2,d0
bsr.w longtoa_
lea chktxt2(pc),a1
bsr.w txttobuf
move.l d3,d0
bsr.w longtoa_
chk2: bsr.w rawline
st d7
chkq: rts
bootsub:bsr.b bootsum ;d2:old,d3:new
move.l d3,4(a0)
rts
datasub:bsr.w datasum
move.l d3,20(a0) ;d2:old,d3:new
rts
bitsub: move.l (a0),d2 ;old
bsr.w bitsum2 ;2! d1:new
move.l d1,d3
rts
kicksub:moveq #-6,d0
and.w (a0),d0
cmp.w #$1110,d0 ;$1111,$1114
bne.b kicks1
moveq #4,d3
swap d3
cmp.l -20(a0,d3.l),d3
beq.b kicks0
add.l d3,d3
cmp.l -20(a0,d3.l),d3
beq.b kicks0
kicks1: st d7
addq.w #4,a7
lea nkicktx(pc),a1
bra.w msgout
kicks0: move.l -24(a0,d3.l),d2
moveq #24,d0
moveq #0,d5
kicks2: cmp.l d0,d3
beq.b kicks3
sub.l (a0),d5
bcc.b kicks3
subq.l #1,d5
kicks3: addq.w #4,a0
subq.l #4,d3
bne.b kicks2
move.l d5,d3
cmp.l -24(a0),d3 ;not changed
beq.b kicks4
move.l d3,-24(a0) ;d2:old,d3:new
kicks4: rts
bootsum:move.l a0,-(a7)
move.l (a0)+,d3
move.l (a0),d2
clr.l (a0)+
move.w #$ff-2,d1
boots0: add.l (a0)+,d3
bcc.b boots1
addq.l #1,d3
boots1: dbf d1,boots0
not.l d3
move.l (a7)+,a0
rts
sblk: st wrcmd-base(a6) ; we want to load/save tracks
bra.b rds6
lblk: sf wrcmd-base(a6)
rds6: cmp.b #1,d3
bls.w rdsq
cmp.b #3,d3
bhi.w rdsq
move.l para-base(a6),d6 ;loadadr
btst #0,d6
bne.w rdsq
move.l para+4-base(a6),d5
moveq #1,d4
cmp.b #3,d3
bne.b rds0
move.l para+8-base(a6),d4
rds0: move.w cylsec-base(a6),d0 ;22/44
cmp.b #"s",(a0) ;para=sectors?
beq.b rds9
mulu d0,d4 ;numcyl
mulu d0,d5 ;1st cyl
rds9: moveq #83,d3
mulu d0,d3
cmp.l d3,d5
bcc.b rdsq
add.l d5,d4
cmp.l d3,d4
bls.b rds1
move.l d3,d4
rds1:
bsr.w motondt ;stays selected
bsr.w stepup
bsr.w stepdwn
sf dskerr-base(a6)
bsr.w trk0
tst.b dskerr-base(a6)
bne.b rds7
sf truebuf-base(a6)
clr.l secinbuf-base(a6)
move.b wrcmd-base(a6),wrflag-base(a6)
bsr.w testindrive
bne.b rds7
rds3: cmp.l d5,d4
bls.b rds2
tst.b wrcmd-base(a6)
bne.b rds4
bsr.w getsec ;d5.l:blk,d6:adr ;del:d0,d1,a1;dskerr
bra.b rds5
rds4: bsr.w putsec ;d5.l:blk,d6:adr
rds5:
tst.b dskerr-base(a6)
bne.b rds7
move.l d6,d0 ;loadadr
bsr.b thsinfo
lea $200.w,a0
add.l a0,d6
addq.l #1,d5
bsr.w stopit
bne.b rds3
rds2: bsr.w updatedisk
rds7: bsr.w motoff ;deselect
st d7
rdsq: rts
thsinfo:move.l d0,d1
lea $200.w,a0
add.l a0,d1
lea linebuf+1-base(a6),a0
bsr.w twolong_
bsr.b thsbuf
lea blktxt(pc),a1
bsr.w txttobuf
move.w d5,d0
bsr.w wordtoa_
move.b #"=",(a0)+
bsr.w wordtod
bra.w rawline
thsbuf: lea trktxt(pc),a1
bsr.w txttobuf
move.b trk-base(a6),d0
lsr.b #1,d0
bsr.w bytetod
lea hedtxt-base(a6),a1
bsr.w txttobuf
move.b trk-base(a6),d0
and.b #1,d0
add.b #"0",d0
move.b d0,(a0)+
lea sectxt(pc),a1
bsr.w txttobuf
move.b sec-base(a6),d0
bra.w bytetod
calcts: move.l d5,d0
divu trksec-base(a6),d0 ;11/22
move.b d0,d1 ;trk
cmp.b trk-base(a6),d1
beq.b cal1
sf truebuf-base(a6)
cal1: swap d0
move.b d0,sec-base(a6)
rts
testindrive:
btst #2,$bfe001
bne.b tid0
lea nodisk(pc),a1
tid2: lea linebuf-base(a6),a0
bsr.w drvnum
bsr.w txttobuf
bsr.w rawline
moveq #-1,d0
rts ;bne.b error
tid0: tst.b wrflag-base(a6)
beq.b tid1
lea wrdisk(pc),a1
btst #3,$bfe001
beq.b tid2
tid1: moveq #0,d0
rts ;bne.b error
testdosdsk:
lea rootblk-base(a6),a0
move.l a0,d6
moveq #0,d5 ;bootblock
bsr.w getsec
tst.b dskerr-base(a6)
bne.b tdd3
move.l rootblk-base(a6),d0
move.w #488,d5
bclr #0,d0
sne ffs-base(a6) ;FFS
beq.b tdd5
move.w #512,d5
tdd5: bclr #1,d0
sne int-base(a6) ;"DOS",2|"DOS",3
cmp.l dosofs-base(a6),d0
beq.b tdd0
nodos: lea ndostxt(pc),a1
nodos2: lea linebuf-base(a6),a0
bsr.w drvnum
bsr.w txttobuf
bsr.w rawline
tdd3: moveq #-1,d0 ;bne.b error
rts
tdd0: move.w d5,datasiz-base(a6)
move.l rootkey-base(a6),d5
bsr.w getsec
tst.b dskerr-base(a6)
bne.b tdd3
move.b rootblk+$138+3-base(a6),valflag-base(a6) ;save bitmapflag
move.l d6,a0
bsr.b datasum ;d2:old,d3:new
cmp.l d3,d2
lea chktxt(pc),a1
bne nodos2
cmp.l lastchk-base(a6),d2
beq.b tdd4
move.l d2,lastchk-base(a6)
move.l rootkey-base(a6),dirkey-base(a6) ;rootdir on diskchange
tdd4: tst.b wrcmd-base(a6)
beq.b tdd1
tst.l $138(a0)
lea dskvtxt(pc),a1
beq.b nodos2
tdd1: move.l $13c(a0),d5 ;read bitmap blk
move.l d5,bitsec-base(a6)
lea bitmap-base(a6),a1
move.l a1,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.b tdd3
moveq #0,d0 ;bne.b error
rts
datasum:move.l a0,-(a7)
moveq #512/4-1,d1
move.l 20(a0),d2
clr.l 20(a0)
moveq #0,d3
datsum0:sub.l (a0)+,d3
dbf d1,datsum0
move.l (a7)+,a0
rts
putsec: movem.l d0-d7/a0-a6,-(a7) ;puts sectors into buffer
sf dskerr-base(a6)
st wrflag-base(a6)
move.l d5,d0 ;blk
divu trksec-base(a6),d0 ;11/22
cmp.b trk-base(a6),d0 ;do we change tracks?
beq.b puts1
tst.l secinbuf-base(a6)
beq.b puts1 ;nutin' to write
bsr.w updatedisk ;sets dskerr
clr.l secinbuf-base(a6)
puts1: move.l d6,a0
move.l d5,d4
divu trksec-base(a6),d4 ;11/22
swap d4
move.l secinbuf-base(a6),d0
bset d4,d0
move.l d0,secinbuf-base(a6)
move.w #$200,d0
mulu d4,d0
lea dostrkbuf-base(a6),a1
add.l d0,a1
moveq #512/4-1,d0
puts5: move.l (a0)+,(a1)+
dbf d0,puts5
puts4: bsr.w calcts ;d5
bsr.w dotrk
movem.l (a7)+,d0-d7/a0-a6
rts
updatedisk:movem.l d0-d7/a0-a6,-(a7)
st wrflag-base(a6)
sf truebuf-base(a6)
sf dskerr-base(a6)
tst.l secinbuf-base(a6) ;reads in missing sectors and writes
beq.b updat3
lea dostrkbuf-base(a6),a1
move.l a1,d6
moveq #0,d5
move.b trk-base(a6),d5
mulu trksec-base(a6),d5 ;11/22
moveq #0,d4
updat0: bsr.w calcts ;d5.l>d1.b=trk;del:d0
bsr.w dotrk ;del:a1,d1,d0
tst.b dskerr-base(a6) ;removed?
bne.b updat3
move.l secinbuf-base(a6),d0
btst d4,d0
bne.b updat2
bsr.w readsec ;d6:adr
tst.b dskerr-base(a6)
bne.b updat3
updat2: addq.l #1,d5
lea $200.w,a1
add.l a1,d6
addq.w #1,d4
cmp.w trksec-base(a6),d4 ;11/22
bne.b updat0
bsr writeit ;sets dskerr
bsr.w stepdel ;wait >2.0 ms before sel/step/...
updat3: movem.l (a7)+,d0-d7/a0-a6
rts
getsec: tst.l secinbuf-base(a6) ;get a sector (and write buffer)
beq.b gets1
bsr.w updatedisk
clr.l secinbuf-base(a6)
gets1: sf wrflag-base(a6)
bsr.w calcts ;d5.l>d1.b=trk;del:d0
bsr.w dotrk ;del:a1,d1,d0
tst.b dskerr-base(a6)
beq.b readsec ;d6:adr
rts
cmpsec: movem.l d0-d7/a0-a3,-(a7)
moveq #1,d5 ;$80000000:1 try
ror.l #1,d5
bra.b cmps0
readsec:cmp.b #30,dskerr-base(a6)
bne.b iscall
movem.l d0-d3/a1,-(a7)
move.b trk-base(a6),d3
sf dskerr-base(a6)
bsr trk0 ;recal
; tst.b dskerr-base(a6)
; bne.b rsnocal ;keep cyl unchanged
move.b d3,d1
bsr dotrk
movem.l (a7)+,d0-d3/a1
iscall: bsr rdsec
tst.b dskerr-base(a6)
beq.b rdsnerr
movem.l d0/a0-a1,-(a7)
lea rerrtxt-base(a6),a1
lea linebuf+1-base(a6),a0
bsr txttobuf
move.b dskerr-base(a6),d0
bsr.w bytetod
move.b #")",(a0)+
bsr thsbuf
addq.w #8,a0
lea retrytx(pc),a1
bsr txttobuf
bsr rawline
movem.l (a7)+,d0/a0-a1
bsr mstest
beq.b readsec ;retry
bpl.b rdsnerr ;abort
; bmi.b rdsigno ;ignore
rdsigno:sf dskerr-base(a6)
rdsnerr:rts
rdsec: movem.l d0-d7/a0-a3,-(a7)
moveq #retry,d5
cmps0: move.l mask55-base(a6),d7
rsec7: tst.b truebuf-base(a6)
bne.b rsec1
bsr.w readmfm ;del:d0,a2
tst.b truebuf-base(a6)
beq.w rsec0
rsec1: move.l dskadr-base(a6),a2
move.w readlen-base(a6),a3
add.w a3,a3
add.l a2,a3
move.w trksecm1-base(a6),d2 ;#10/21
rsec2: move.w sync-base(a6),d0
cmp.l a3,a2
bhi.w rsec8 ;no sync found
cmp.w (a2)+,d0
bne.b rsec2
cmp.w (a2),d0
beq.b rsec2
bsr.w getlong
move.l d0,d1
move.l d0,d4 ;save for chksum
rol.l #8,d1
not.b d1
beq.b rsfbok
sf truebuf-base(a6)
move.b #23,dskerr-base(a6) ;(BadSecID)
rsfbok: rol.l #8,d1
cmp.b trk-base(a6),d1
beq.b rstrkok
sf truebuf-base(a6)
move.b #30,dskerr-base(a6) ;(SeekError)
rstrkok:
lsr.w #8,d0
;cmp.b #10,d0,bhi.b >11 sec
cmp.b sec-base(a6),d0
beq.b rsec4
lea $43c-8(a2),a2 ;skip blk
bra.b rsec5
rsec4: subq.w #8,a2 ;format,trk,sec,secgap
moveq #0,d4
moveq #10-1,d3
rslabel:move.l (a2)+,d0 ;header chk
and.l d7,d0
eor.l d0,d4
dbf d3,rslabel
bsr.b getlong
cmp.l d0,d4
beq.b rshead
sf truebuf-base(a6)
move.b #24,dskerr-base(a6) ;(BadHdrSum)
rshead: bsr.b getlong ;data chk
move.l d0,-(a7)
move.l d6,a0
moveq #128-1,d3
moveq #0,d4
lea 512(a2),a1
tst.l d5
bpl.b rsec3
tst.l (a7)+
cmps3: move.l (a1)+,d1
eor.l d1,d4
and.l d7,d1
move.l (a2)+,d0
eor.l d0,d4
and.l d7,d0
add.l d0,d0
or.l d1,d0
cmp.l (a0)+,d0
dbne d3,cmps3
beq.b rsec0
move.b #20,dskerr-base(a6) ;verify error (NotSpecified)
bra.b rsec6
rsec3: move.l (a1)+,d1
eor.l d1,d4
and.l d7,d1
move.l (a2)+,d0
eor.l d0,d4
and.l d7,d0
add.l d0,d0
or.l d1,d0
move.l d0,(a0)+
dbf d3,rsec3
and.l d7,d4
cmp.l (a7)+,d4 ;chk
beq.b rsec0
move.b #25,dskerr-base(a6) ;data chksum wrong (BadSecSum)
bra.b rsec6
rsec5: dbf d2,rsec2
rsec8: move.b #21,dskerr-base(a6) ;no sync found (NoSecHdr)
rsec6: sf truebuf-base(a6)
dbf d5,rsec7
rsec0: movem.l (a7)+,d0-d7/a0-a3
rts
getlong:movem.l (a2)+,d0-d1
and.l d7,d0 ;convert some gore
add.l d0,d0
and.l d7,d1
or.l d1,d0
rts
codemfm:movem.l d0-d7/a0-a4,-(a7) ;haha, this builds mfmbuffer
move.l dskadr-base(a6),a1
move.w #$440,d0
mulu trksec-base(a6),d0 ;11/22
addq.w #4,d0
neg.w d0
add.w readlen-base(a6),d0
add.w readlen-base(a6),d0
lsr.w #2,d0
move.l maskaa-base(a6),d1
bra.b mfmlp3
mfmlp2: move.l d1,(a1)+
mfmlp3: dbf d0,mfmlp2
clr.b d1 ;startsecnum
move.w trksecm1-base(a6),d3 ;10/21
move.w trksec-base(a6),d2 ;sec till gap 11/22
mfmlp1: move.l maskaa-base(a6),(a1)+
move.w sync-base(a6),(a1)+
move.w sync-base(a6),(a1)+
; st d7 ;format byte
; lsl.w #8,d7
moveq #$ffffffff,d7 ;format byte
move.b trk-base(a6),d7 ;track 0-159
lsl.l #8,d7
move.b d1,d7 ;secnum
lsl.l #8,d7
move.b d2,d7 ;sec till gap
move.l a1,a2
bsr.b makelong
move.l d6,(a1)+
move.l d7,(a1)+
moveq #1,d5
bsr.w setclock ;we DO need clockbits...
eor.l d6,d7
move.l a1,a2
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
bsr.b makelong
move.l d6,(a1)+ ;headerchk
move.l d7,(a1)+
moveq #5,d5
bsr.b setclock
move.l a1,a3
addq.w #8,a1 ;skip datachk
move.l a1,a4
lea 512(a1),a2
move.l mask55-base(a6),d0
moveq #512/4-1,d5
moveq #0,d4
mfmlp0: move.l (a0)+,d7 ;get data
move.l d7,d6
and.l d0,d7
move.l d7,(a2)+
eor.l d7,d4
lsr.l #1,d6
and.l d0,d6
move.l d6,(a1)+
eor.l d6,d4 ;build chksum
dbf d5,mfmlp0
move.l d4,d7
bsr.w makelong
move.l a3,a2
move.l d6,(a3)+ ;write datachk
move.l d7,(a3)
moveq #1,d5
bsr.b setclock
move.l a4,a2
move.w #512/4,d5
bsr.b setclock
addq.b #1,d1
subq.b #1,d2
lea $200(a1),a1
dbf d3,mfmlp1
move.l maskaa-base(a6),(a1) ;famous last words
movem.l (a7)+,d0-d7/a0-a4
rts
makelong:move.l d7,d6
lsr.l #1,d6
and.l mask55-base(a6),d6
and.l mask55-base(a6),d7
rts
setclock:movem.l d0-d6/a2,-(a7) ;well this is quite nasty down here
add.w d5,d5
subq.w #1,d5
move.l mask55-base(a6),d6
move.b -1(a2),d0
setclk0:move.l (a2),d4
move.l d4,d1
move.l d4,d2
not.l d1
and.l d6,d1
add.l d1,d1 ;asl.l #1,d1
move.l d1,d3
roxr.b #1,d0
roxr.l #1,d4 ;you know what I do?
eor.l d4,d1
and.l d3,d1
or.l d1,d2
move.l d2,(a2)+
move.b d2,d0
dbf d5,setclk0
movem.l (a7)+,d0-d6/a2
rts
writeit:movem.l d6/a0/a1,-(a7)
write1: lea dostrkbuf-base(a6),a0
bsr codemfm
bsr writemfm
tst.b dskerr-base(a6)
bne.b write0
btst #4,langflg-base(a6) ;verify?
bne.b write0 ;no
sf truebuf-base(a6)
move.w trksecm1-base(a6),d1
wmf1: move.b d1,sec-base(a6)
move.w #$200,d6
mulu d1,d6
lea dostrkbuf-base(a6),a0
add.l a0,d6
bsr cmpsec
tst.b dskerr-base(a6)
beq.b write2
lea veritxt-base(a6),a1
lea linebuf+1-base(a6),a0
bsr txttobuf
move.b dskerr-base(a6),d0
bsr.w bytetod
move.b #")",(a0)+
bsr thsbuf
addq.w #8,a0
lea retrytx(pc),a1
bsr txttobuf
bsr rawline
bsr.b mstest
beq.b write1 ;retry
bpl.b write0 ;abort
; bmi.b write2 ;ignore
write2: sf dskerr-base(a6)
dbf d1,wmf1
write0: movem.l (a7)+,d6/a0/a1
rts
mstest: st dontbuf-base(a6)
clr.w buflen-base(a6)
mst2: cmp.b #"r",ascii-base(a6)
beq.b mst0 ;beq retry
cmp.b #$1b,ascii-base(a6)
beq.b mst1
cmp.b #"a",ascii-base(a6)
beq.b mst1
cmp.b #"i",ascii-base(a6)
bne.b mst2
move.w #8,ccr ;bmi ignore
bra.b mst0
mst1: move.w #0,ccr ;bne abort
mst0: sf dontbuf-base(a6)
rts
writemfm:
move.b #29,dskerr-base(a6)
lea $dff09e,a2
bsr.w dskrdy
tst.w d0
beq.w rmfm0
move.w #$4000,d0
move.w #$7fff,(a2) ;$dff09e
move.w #$9100,(a2) ;$dff09e syncwait off
bra.b wmfm
readmfmindex:
move.b #29,dskerr-base(a6)
lea $dff09e,a2
bsr.w dskrdy ;timeout
tst.w d0
beq.w rmfm0
clr.w d0
move.w #$7fff,(a2) ;$dff09e
move.w #$9100,(a2) ;$dff09e syncwait off
dindex: btst #4,$bfdd00
bne.b dindex
bra.b wmfm
readmfm:move.b #29,dskerr-base(a6)
lea $dff09e,a2
bsr.w dskrdy ;timeout
tst.w d0
beq.b rmfm0
clr.w d0
move.w #$7fff,(a2) ;$dff09e
move.w #$9500,(a2) ;$dff09e syncwait on
wmfm: cmp.b #80,trk-base(a6)
bls.b precomp ;precomp00
move.w #$a000,(a2) ;precomp01
precomp:bsr.w pushcache
move.w #$4000,$24-$9e(a2) ;$dff024
move.w #$8010,$96-$9e(a2) ;$dff096 disk dma on
move.l dskadr-base(a6),$20-$9e(a2) ;$dff020
move.w sync-base(a6),$7e-$9e(a2) ;$dff07e
move.w #$0002,$9c-$9e(a2) ;$dff09c
or.w readlen-base(a6),d0
bset #15,d0
move.w d0,$24-$9e(a2) ;$dff024
move.w d0,$24-$9e(a2) ;$dff024
move.b #26,dskerr-base(a6)
move.w #300,d0 ;timeout 300ms
tst.b hddrive-base(a6)
beq.b rmfm2
add.w d0,d0 ;150rpm drive
rmfm2: bsr.b wait1ms
subq.w #1,d0
beq.b rmfm1
btst #1,$1f-$9e(a2) ;$dff01f
beq.b rmfm2
rmfm1: move.w #$4000,$24-$9e(a2) ;$dff024
bsr.w invcache
tst.w d0 ;timeout error?
beq.b rmfm0
sf dskerr-base(a6)
st truebuf-base(a6)
rmfm0: rts
wait1ms:move.l a1,-(a7)
lea $bfdd00,a1
move.b #$7f,(a1) ;$bfdd00 clr int
bclr #5,$e00-$d00(a1) ;$bfde00 count 02
bset #3,$e00-$d00(a1) ;$bfde00 oneshot
move.b #time1ms&255,$400-$d00(a1) ;$bfd400 timerlo
move.b #time1ms/256,$500-$d00(a1) ;$bfd500 timerhi
w1ms0: btst #0,(a1) ;$bfdd00 wait timerint
beq.b w1ms0
move.l (a7)+,a1
rts
initdosdrive: ;do some init stuff
bsr.w motondt
bsr.w stepup
bsr.w stepdwn
sf dskerr-base(a6)
bsr.w trk0
tst.b dskerr-base(a6)
bne.b inidd0
clr.l secinbuf-base(a6)
sf truebuf-base(a6)
bsr.w testindrive
bne.b inidd0
bsr.w testdosdsk ;reads root
bne.b inidd0
pea rootblk-base(a6)
move.l (a7)+,d6
move.l dirkey-base(a6),d5
bsr.w getsec
tst.b dskerr-base(a6)
inidd0: rts ;bne.b error
cd: lea 3(a5),a0
bsr.w getfilename
beq.b cdqq
cmp.w #30,d4
bhi.b cdqq
cmp.b #":",(a2) ;back to the roots..
bne.b cd3
move.l rootkey-base(a6),dirkey-base(a6)
addq.w #1,a2
subq.w #1,d4
beq.b cdq
cd3: sf wrflag-base(a6)
sf wrcmd-base(a6)
bsr.b initdosdrive
bne.b cdq
move.l a2,a0
bsr.w fnhash ;a0:str,d4.w:len>d4.w:rootidx,d5:blk
beq.b cd1 ;hash entry zero?
bsr.w searchfile ;d5:1st hash,a2:fname
;>prevchain,a4:header
beq.b cd1
move.l $1fc(a4),d0
addq.l #3,d0 ;-3:file
beq.b cd4
addq.l #1,d0 ;-4:linked file
beq.b cd4
move.l 4(a4),d1 ;ownkey/dirkey
subq.l #6,d0 ;2:dir
beq.b cd2
move.l $1d4(a4),d1 ;hardlink/dirkey
subq.l #2,d0
beq.b cd2
bra.b cdq ;illegal type
cd4: bsr.w disfile
bra.b cdq
cd2: move.l d1,dirkey-base(a6)
cdq: bsr.w motoff
st d7
cdqq: rts
cd1: bsr.w dnotfnd
bra.b cdq
delete: lea 4(a5),a0
bsr.w getfilename
move.w d4,para+12-base(a6)
beq.w deleteq
cmp.w #30,d4
bhi.w deleteq
st wrflag-base(a6)
st wrcmd-base(a6)
bsr.w initdosdrive
bne.w delete0
move.l a2,a0
clr.l prevchain-base(a6);default:fh in root
bsr.w fnhash ;a0:str,d4.w:len>d4.w:rootidx,d5:blk
beq.b delete1 ;hash entry zero?
bsr.w searchfile ;d5:1st hash,a2:fname
;>prevchain,a4:header
bne.b delete2
delete1:bsr.w fnotfnd
bra.w delete0
delete2:move.l 4(a4),d0
bsr.w freeblk
beq.w delbm
move.l $1fc(a4),d0
subq.l #2,d0 ;2:userdir?
beq.b delmain
addq.l #5,d0 ;-3:file
beq.b delmain
subq.l #7,d0 ;4:linked dir
beq.b islink
addq.l #8,d0 ;-4:linked file
bne.w delete0 ;illegal type
islink: move.l 4(a4),d4 ;ownkey
lea rootblk-base(a6),a5 ;temp buffer
move.l $1d4(a4),d5 ;true header
delink: move.l a5,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.w delete0
move.l $1d8(a5),d0
cmp.l d4,d0
bne.b notme
move.l $1d8(a4),$1d8(a5) ;delink header
move.l a5,a0
bsr.w datasum
move.l d3,20(a0) ;chksum
bsr.w putsec
tst.b dskerr-base(a6)
bne.w delete0
bra.w delete8
;move.l $1fc(a4),d0 ;remove header from hashchain
;subq.l #4,d0 ;4:linked dir
;beq.w delete8
;addq.l #8,d0 ;-4:linked file
;bne.b delete0 ;illegal type
;bra.b delfile
notme: move.l d0,d5
bra.b delink
delmain:move.l $1d8(a4),d5 ;hardlink
beq.b nolnkhd
move.l d5,d4 ;new main file/dir
lea rootblk-base(a6),a5
move.l a5,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.w delete0
lea 8(a4),a0
lea 8(a5),a1
moveq #($1a4-8)/4-1,d0
cpyhead:move.l (a0)+,(a1)+
dbf d0,cpyhead
move.l $1f8(a4),$1f8(a5) ;fhextension|reserved
move.l $1fc(a4),$1fc(a5) ;type:no linked
clr.l $1d4(a5) ;main hardlink
move.l a5,a0
fixlink:bsr.w datasum
move.l d3,20(a0)
bsr.w putsec ;write new main hd
tst.b dskerr-base(a6)
bne.w delete0
move.l $1d8(a5),d5
beq.b endlink
bsr.w getsec
tst.b dskerr-base(a6)
bne.w delete0
move.l d4,$1d4(a5) ;main hardlink
bra.b fixlink
endlink:bra.b delete8 ;delink old header
nolnkhd:move.l $1fc(a4),d0
subq.l #2,d0 ;2:userdir?
beq.b delete5
;addq.l #5,d0 ;-3:file
;bne.b delet0
delfile:move.l a4,a5
delete9:lea $134+4(a5),a3
moveq #72,d3 ;max #datablk (FFS)
tst.b ffs-base(a6)
bne.b delete7
move.l 8(a5),d3 ;#datablk in this file (OFS)
delete7:subq.l #1,d3
bmi.b delete6
move.l -(a3),d0
beq.b delete7 ;empty entry (FFS)
bsr.w freeblk
beq.w delbm
bra.b delete7
delete6:move.l $1f8(a5),d5 ;extension block?
beq.b delete8 ;eof
lea rootblk-base(a6),a5
move.l a5,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.b delete0
move.l d5,d0
bsr.w freeblk
beq.b delbm
bra.b delete9
delete5:lea $18(a4),a0 ;dir empty?
moveq #72-1,d0
delete4:tst.l (a0)+
bne.b delnmt
dbf d0,delete4
delete8:lea rootblk-base(a6),a0
move.l a0,d6
lea $1f0(a0),a3
move.l prevchain-base(a6),d5 ;filehd in chain or root?
bne.b ischain
move.l dirkey-base(a6),d5
move.l roothash-base(a6),a3
ischain:bsr.w getsec
tst.b dskerr-base(a6)
bne.b delete0
move.l $1f0(a4),(a3) ;hashchain/roothash
move.l d6,a0
bsr.w datasum
move.l d3,20(a0)
bsr.w putsec
tst.b dskerr-base(a6)
bne.b delete0
bsr.w bitsum ;>a0:bitmap
move.l a0,d6
move.l bitsec-base(a6),d5
bsr.w putsec
tst.b dskerr-base(a6)
bne.b delete0
bsr.w updatedisk
delete0:bsr.w motoff
st d7
deleteq:rts
delnmt: bsr.w dnotmt
bra.b delete0
delbm: bsr.w bmaperr
bra.b delete0
makedir:lea 3(a5),a0
bsr.w getfilename
move.w d4,para+12-base(a6)
beq.w mdq
cmp.w #30,d4
bhi.w mdq
st wrflag-base(a6)
st wrcmd-base(a6)
bsr.w initdosdrive
bne.w md0
move.l a2,a0
bsr.w fnhash ;a0:str,d4.w:len>d4.w:rootidx,d5:blk
beq.b md1 ;hash entry zero?
bsr.w searchfile ;d5:1st hash,a2:fname,
;>prevchain,a4:header
beq.b md1
bsr.w dexists
bra.w md0
md1: bsr.w getfreehead
beq.w mdfull
move.l d0,d4
lea header-base(a6),a4
move.l a4,a0
moveq #512/4-1,d6
md2: clr.l (a0)+
dbf d6,md2
;;
move.l roothash-base(a6),a1
clr.l linkkey-base(a6)
move.l (a1),d5 ;root entry free?
beq.b usdroot
sortus: cmp.l d4,d5 ;root entry higher?
bhi.b usdroot
move.l d5,linkkey-base(a6)
lea rootblk-base(a6),a5
move.l a5,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.w md0
move.l $1f0(a5),d5 ;hashchain
bne.b sortus
usdroot:move.l d5,$1f0(a4) ;set hashchain
;;
bsr.w getclok
move.l days-base(a6),$1a4(a4)
move.l mins-base(a6),$1a8(a4)
move.l ticks-base(a6),$1ac(a4)
moveq #2,d6
move.l d6,(a4) ;type
move.l (a4),$1fc(a4) ;type
move.l d4,4(a4) ;ownkey
move.l dirkey-base(a6),$1f4(a4) ;parent key
lea $1b1(a4),a0
move.w para+12-base(a6),d0
subq.w #1,d0
md3: move.b (a2)+,(a0)+
addq.b #1,$1b0(a4)
dbf d0,md3
move.l a4,a0
bsr.w datasum
move.l d3,20(a0)
move.l 4(a4),d5
move.l a4,d6
bsr.w putsec
tst.b dskerr-base(a6)
bne.b md0
;;
lea rootblk-base(a6),a2
move.l a2,d6 ;rootblk/dirblk
lea rootblk+$1f0-base(a6),a2 ;hashchain
move.l linkkey-base(a6),d5
bne.b sortusr
move.l roothash-base(a6),a2
move.l dirkey-base(a6),d5
sortusr:bsr.w getsec
tst.b dskerr-base(a6)
bne.b md0
move.l d4,(a2) ;insert userdir
lea rootblk-base(a6),a0 ;root/userdir chk
bsr.w datasum
move.l d3,20(a0)
bsr.w putsec ;write root/userdir
tst.b dskerr-base(a6)
bne.b md0
;;
bsr.w bitsum ;>a0:bitmap
move.l a0,d6
move.l bitsec-base(a6),d5
bsr.w putsec
tst.b dskerr-base(a6)
bne.b md0
bsr.w updatedisk
md0: bsr.w motoff
st d7
mdq: rts
mdfull: bsr.w dskfull
bra.b md0
info: sf d7
bra.b domap
map: st d7 ;bitmap
domap: sf wrflag-base(a6)
sf wrcmd-base(a6)
bsr.w initdosdrive
bne.w mapq
tst.b d7
bne.w domap0
lea linebuf+1-base(a6),a0
lea maptxt(pc),a1
bsr.w txttobuf
moveq #"D",d0
tst.b hddrive-base(a6)
beq.b domap1
moveq #"H",d0
domap1: move.b d0,-14(a0)
tst.b valflag-base(a6) ;from TestDosDsk
beq.b isnval
addq.w #2,a1 ;inValid
isnval: bsr.w txttobuf
move.l bitsec-base(a6),d0
bsr.w wordtoa_
move.b #"=",(a0)+
bsr.w wordtod
move.b #")",(a0)+
move.b #",",(a0)+
bsr.w numfree ;a0:txtbuf;->d4:free blk
addq.w #1,a0
lea filesys(pc),a1
bsr.w txttobuf
tst.b int-base(a6)
beq.b isnoint
addq.w #4,a1
isnoint:bsr.w txttobuf
moveq #"O",d0
tst.b ffs-base(a6)
beq.b isoldfs
moveq #"F",d0
isoldfs:move.b d0,-5(a0) ;xFS
bsr maxfile
lea dskftxt(pc),a1
beq.b dskful0
bsr.w hextoa_
move.b #"=",(a0)+
bsr.w hextod
lea bytetxt(pc),a1
dskful0:bsr txttobuf
bsr rawline
bra.w mapq
domap0: bsr.w clrscr
lea linebuf-base(a6),a0
sf d2
bsr.b maphead
st d2
pea map0(pc)
maphead:moveq #80-1,d1
maphd0: moveq #79,d0
sub.l d1,d0
divu #10,d0
tst.b d2
beq.b maphd1
swap d0
maphd1: add.b #"0",d0
move.b d0,(a0)+
dbf d1,maphd0
bra.w rawline
map0:
move.l scradr-base(a6),a0
lea xchars*8*2(a0),a0
move.w cylsecm1-base(a6),d4 ;21/43
map7: moveq #80-1,d3
move.w cylsecm1-base(a6),d0 ;21/43
ext.l d0
subq.w #2,d0
sub.w d4,d0
bpl.b map5
moveq #%00101010,d6
move.b d6,(a0)+
move.b d6,xchars*2-1(a0)
add.w d6,d6
bra.b map1
map5: moveq #%01111110,d6
move.b d6,(a0)+
move.b d6,xchars*2-1(a0)
bsr.b tstfree
beq.b map1
moveq #%01000010,d6
map1: move.b d6,xchars-1(a0)
map6: add.w cylsec-base(a6),d0 ;22/44
dbf d3,map5
lea xchars*3(a0),a0
cmp.w trksec-base(a6),d4 ;11/22
bne.w map8
lea xchars(a0),a0
map8: dbf d4,map7
move.w trksec-base(a6),d0
add.b d0,row-base(a6)
mapq: bsr.w motoff
st d7
rts
tstfree:move.l a0,-(a7)
lea bitmap-base(a6),a0
move.l d0,d1
lsr.w #5,d1
add.w d1,d1 ;lsl.w #2,d1
add.w d1,d1
move.l 4(a0,d1.w),d2
btst d0,d2
move.l (a7)+,a0
rts
maxfile:movem.l d1/d4,-(a7)
moveq #0,d0 ;d4:free blocks;->d0:free bytes
maxfil2:subq.l #1,d4
bmi.b maxfil1
beq.b maxfil1
moveq #72-1,d1
maxfil0:addq.w #1,d0
subq.l #1,d4
beq.b maxfil1
dbf d1,maxfil0
bra.b maxfil2
maxfil1:movem.l (a7)+,d1/d4
mulu datasiz-base(a6),d0 ;beq.b diskfull
rts
catalog:move.l a5,a0
move #xchars-1,d0
fndfopt:cmp.b #"f",(a0)+
dbeq d0,fndfopt
move.b d0,catopt-base(a6) ;bmi.b noopt
clr.l lastcmd-base(a6)
sf wrflag-base(a6)
sf wrcmd-base(a6)
bsr.w initdosdrive
bne.w catq
lea rootblk-base(a6),a3
lea linebuf+2-base(a6),a0
lea voltxt(pc),a1
bsr.w txttobuf
lea $1b0(a3),a1
bsr.w bcpltobuf
move.b #34,(a0)
lea linebuf+41-base(a6),a0
bsr.w numfree
lea header-base(a6),a4
lea 24(a3),a2
moveq #72-1,d2
cat0: move.l (a2)+,d5
beq.w cat1
cat2: move.l a4,d6
bsr.w getsec
tst.b dskerr-base(a6)
bne.w catq
move.b #">",(a0)+
addq.w #4,a0
move.b #34,(a0)+
lea $1b0(a4),a1
bsr.w bcpltobuf ;file/dirname
move.b #34,(a0)+
lea linebuf+38-base(a6),a0
move.l $1fc(a4),d3 ;type
subq.l #2,d3 ;+2:dir
beq.b notlink
addq.l #5,d3 ;-3:fileheader
beq.b notlink
subq.l #7,d3 ;+4:linked dir
lea dlnktxt(pc),a1
beq.b filelnk
addq.l #8,d3 ;-4:linked fileheader
lea flnktxt(pc),a1
bne.w catq ;illegal type
filelnk:bsr.w txttobuf
lea bitmap-base(a6),a1
move.l a1,d6 ;buffer for linksec
move.l $1d4(a4),d5 ;hardlink
bsr.w getsec
tst.b dskerr-base(a6)
bne.w catq
lea bitmap+$1b0-base(a6),a1
bsr.w bcpltobuf ;file/dirname
move.b #34,(a0)
move.b bitmap+$143-base(a6),$143(a4) ;copy protection flags
bra.w cat3
notlink:lea $148(a4),a1 ;filecomment
bsr.w bcpltobuf
lea linebuf+38-base(a6),a0
cmp.b #"$",(a0)
bne.b nocomm
moveq #" ",d0 ;strip "$xx-$" if saved with bm
move.b d0,(a0)
move.b d0,9(a0)
move.b d0,10(a0)
nocomm:
lea linebuf+60-base(a6),a0
move.l $1fc(a4),d3
moveq #-3,d0
cmp.l d0,d3 ;file
bne.b cat4
move.l $144(a4),d0 ;filesize, use only 24 bit
bsr.w adrtoa_
addq.w #1,a0
bsr.w hextod
lea linebuf+75-base(a6),a0
tst.l d0
beq.b catempt
subq.l #1,d0
divu datasiz-base(a6),d0
move.w d0,d3
ext.l d3
beq.b catnols ;filled datablk?
divu #72,d3 ;datablk/fileheader/list
add.w d3,d0
catnols:addq.w #1,d0 ;rest of datablk
catempt:addq.w #1,d0 ;fileheader
ext.l d0
bsr.w hextod
cat4: moveq #2,d0
cmp.l d0,d3 ;dir
bne.b cat3
lea dirtxt(pc),a1
bsr.w txttobuf
cat3: bsr.w rawline
tst.b catopt-base(a6)
bmi.w nocatop
lea linebuf+1-base(a6),a0
move.l $1a4(a4),d0
bsr.w todate
lea linebuf+25-base(a6),a0
move.l $1a8(a4),d0
divu #60,d0
bsr.w bytetod
swap d0
move.b #":",(a0)+
bsr.w bytetod
move.l $1ac(a4),d0
divu #50,d0
move.b #":",(a0)+
bsr.w bytetod
lea linebuf+34-base(a6),a0
move.b $143(a4),d0
eor.b #%1111,d0 ;hspa:1=set,rwed:0=set
move.l #"hspa",d3
bsr.w protcnv
move.l #"rwed",d3
bsr.w protcnv
lea linebuf+43-base(a6),a0
move.l 4(a4),d0 ;fileheader/userdir
bsr.w longtoa_
addq.w #1,a0
move.l $1f8(a4),d0 ;fileheaderextension
beq.b nofhext
bsr.w longtoa_
nofhext:move.l $10(a4),d0 ;first data
beq.b noentry
lea linebuf+63-base(a6),a0
bsr.w longtoa_
noentry:bsr.w rawline
nocatop:bsr.w stopit
beq.b cat5
move.l $1f0(a4),d5 ;follow hashchain
bne.w cat2
cat1: dbf d2,cat0
cat5:
catq: bsr.w motoff
st d7
rts
cntfree:lea bitmap+4-base(a6),a1 ;how many free blk?
moveq #0,d0
move.l lastkey-base(a6),d2
subq.l #2,d2 ;reserved
cat8: move.l (a1)+,d3
moveq #0,d1
cat6: btst d1,d3
bne.b cat7
addq.l #1,d0
cat7: subq.l #1,d2
bmi.b cnt0
addq.w #1,d1
cmp.b #32,d1
bne.b cat6
bra.b cat8
cnt0: move.l lastkey-base(a6),d4 ;bootblocks:reserved
sub.l #1,d4
sub.l d0,d4 ;beq.b nofree
rts
numfree:bsr.b cntfree
addq.w #2,a0
bsr.w hextod
lea usdtxt(pc),a1
bsr.w txttobuf
move.l d4,d0
bsr.w hextod
lea fretxt(pc),a1
bsr.w txttobuf
bra.w rawline
protcnv:moveq #4-1,d1
prot: rol.l #8,d3
add.b d0,d0
bcs.b protst1
move.b #"-",d3
protst1:move.b d3,(a0)+
dbf d1,prot
rts
getclok:movem.l d0-d3/a0-a1,-(a7)
clr.l days-base(a6)
clr.l mins-base(a6)
clr.l ticks-base(a6)
lea $dc0000,a0 ;baseadr
moveq #15,d1
move.b $3f(a0),d0
and.b d1,d0
subq.b #4,d0
beq.b clkold1
clr.b $3f(a0)
clr.b $3b(a0)
move.b #9,$37(a0) ;new chip off
move.b #5,$33(a0)
move.b $33(a0),d0
and.b d1,d0
bne.b ncorbad
move.b $37(a0),d0
and.b d1,d0
cmp.b #9,d0
bne.b ncorbad
move.b $2b(a0),d0
btst #0,d0
beq.b ncorbad
sf $37(a0) ;new chip on
moveq #4,d0 ;skip one longword
lea $34(a0),a0 ;$dc0034
bsr.b clkget ;returns a0:$dc0000!
move.b #9,$37(a0) ;new chip off
bra.b exitclk
clkold1:moveq #1,d0
move.w #$190,d1
clkbusy:move.b d0,$37(a0) ;hold
btst d0,$37(a0)
beq.b bsyout
sf $37(a0)
dbf d1,clkbusy
bra.b ncorbad
bsyout: moveq #0,d0 ;don't skip anything
lea $30(a0),a0 ;$dc0030
bsr.b clkget ;returns a0:$dc0000!
sf $37(a0)
ncorbad:
exitclk:movem.l (a7)+,d0-d3/a0-a1
rts
clkget: bsr.b getclk
sub.w #78,d2 ;year<1978?
bcc.w clkget0
add.w #100,d2 ;eoc
clkget0:move.l d2,d3
mulu #365,d3
addq.l #1,d2 ;leap
divu #4,d2
add.w d2,d3
swap d2
move.b #28,month+1-base(a6) ;feb
cmp.b #3,d2
bne.b noleap
addq.b #1,month+1-base(a6)
noleap: lea month-base(a6),a1
bsr.b getclk
nextmon:subq.b #1,d2 ;timeout
beq.b jan
move.b (a1)+,d1
add.w d1,d3
bra.w nextmon
jan: bsr.b getclk
subq.l #1,d2
add.w d2,d3 ;d3=days
move.l d3,days-base(a6)
sub.w d0,a0 ;A500/2000:0,A3000/4000:4
bsr.b getclk
divu #40,d2 ;skip am/pm
clr.w d2
swap d2
move.l d2,d3 ;d3=hours
lsl.l #4,d3 ;*60
sub.l d2,d3
lsl.l #2,d3
bsr.b getclk
add.l d2,d3 ;d3=mins
move.l d3,mins-base(a6)
bsr.b getclk
mulu #50,d2 ;d3=secs
move.l d2,ticks-base(a6)
rts
getclk: moveq #15,d1
and.l -(a0),d1
moveq #15,d2
and.l -(a0),d2
add.l d1,d2
add.l d1,d2
lsl.l #3,d1
add.l d1,d2
rts
dayname:dc.b "Sunday"!$80
dc.b "Monday"!$80
dc.b "Tuesday"!$80
dc.b "Wednesday"!$80
dc.b "Thursday"!$80
dc.b "Friday"!$80
dc.b "Saturday"!$80
even
todate: movem.l d0-d4,-(a7) ;funky code, not easy...
move.l d0,d4
lea 28431.w,a1 ;d0:days since 1.1.78
add.l a1,d0
lsl.l #2,d0
move.l d0,d2
subq.l #1,d2
divu #1461,d2
and.l #$0000ffff,d2
addq.l #3,d0
move.l d2,d3
mulu #1461,d3
sub.l d3,d0
lsr.l #2,d0
move.l d0,d3
lsl.l #2,d0
add.l d3,d0 ;5*days
move.l d0,d1
subq.l #3,d1
divu #153,d1
and.l #$0000ffff,d1
addq.l #2,d0
move.l d1,d3
mulu #153,d3
sub.l d3,d0
divu #5,d0
and.l #$0000ffff,d0
moveq #10,d3
cmp.l d3,d1
bge.b date1
addq.l #3,d1 ;month+3
bra.b date2
date1: subq.l #8,d1
subq.l #1,d1 ;month-9
addq.l #1,d2 ;year+1
date2: bsr.w bytetod
lea months(pc),a1
move.w d1,d0
add.w d0,d0
add.w d1,d0
lea -3(a1,d0.w),a1
move.b #"-",(a0)+
move.b (a1)+,(a0)+ ;the month
move.b (a1)+,(a0)+
move.b (a1)+,(a0)+
move.b #"-",(a0)+
move.l d2,d0
add.w #1900,d0
bsr.w wordtod
addq.w #1,a0
move.b #"[",(a0)+
divu #7,d4
swap d4
move.w d4,d0
lea dayname(pc),a1
cmp.b #6,d0
bsr.w indextx
move.b #"]",(a0)+
movem.l (a7)+,d0-d4
rts
drive: cmp.b #1,d3
bhi.w drvq
tst.b d3
beq.b drv0
move.l para-base(a6),d0
drv1: moveq #3,d1
cmp.l d1,d0
bhi.w drvq
addq.b #3,d0
move.b d0,drvbit-base(a6)
drv0: bsr.b drvinit
; bsr.w moton
; bsr.w stepup
; bsr.w trk0
; tst.b dskerr-base(a6)
; bne.b error
; bsr.w motoff
st d7
drvq: rts
drvi: move.b d0,drvbit-base(a6)
drvinit:lea linebuf-base(a6),a0
bsr.w drvnumx
bsr.b drvtype ;>d4:drivetype
lea logtxt(pc),a1
not.l d4
bne.b con2
cmp.b #3,d1 ;df0:
seq d4
beq.b con2
lea mnttxt(pc),a1 ;no drive
con2: bsr.w txttobuf
bsr.w rawline
tst.l d4
bne.b drv2 ;drive is present
moveq #3,d0
cmp.b drvbit-base(a6),d0
bne.b drvi
drv2: clr.l secinbuf-base(a6)
move.l rootkey-base(a6),dirkey-base(a6)
sf truebuf-base(a6)
rts
drvtype:lea $bfd100,a1
st (a1)
move.b drvbit-base(a6),d1
moveq #7,d3
bclr d3,(a1)
bsr.b relax
bclr d1,(a1)
bsr.b relax
bset d1,(a1)
bsr.b relax
bset d3,(a1)
bsr.b relax
bclr d1,(a1)
bsr.b relax
bset d1,(a1)
moveq #31,d3
con0: bclr d1,(a1)
bsr.b relax
move.b $0f01(a1),d2 ;$bfe001
lsl.b #3,d2
roxl.l #1,d4 ;get the drive msg
bset d1,(a1)
dbf d3,con0 ;d4:$ffffffff:not mounted
move.w #ddmfmwords,readlen-base(a6)
moveq #11,d3 ;dd sectors
cmp.l #$aaaaaaaa,d4
seq hddrive-base(a6)
bne.b ddroot
move.w #hdmfmwords,readlen-base(a6)
add.l d3,d3 ;hd sectors
ddroot: move.w d3,trksec-base(a6) ;11/22
subq.w #1,d3
move.w d3,trksecm1-base(a6)
addq.w #1,d3
add.l d3,d3
move.w d3,cylsec-base(a6) ;22/44
subq.w #1,d3
move.w d3,cylsecm1-base(a6)
addq.w #1,d3
mulu #40,d3
move.l d3,rootkey-base(a6) ;880/1760
add.l d3,d3
subq.l #1,d3
move.l d3,lastkey-base(a6) ;1759/3519
subq.l #1,d3
move.l d3,lastkeym1-base(a6) ;1758/3518
rts
relax: nop
nop
rts
motondt:movem.l d1-d4,-(a7)
bsr.w drvtype
lea $bfd100,a1
bclr #7,(a1)
bset #0,(a1) ;nostep
sel: move.b drvbit-base(a6),d0
bclr d0,(a1)
movem.l (a7)+,d1-d4
rts
motoff: lea $bfd100,a1
bset #7,(a1)
bsr.b relax
or.b #%01111000,(a1)
bsr.b relax
and.b #%10000111,(a1)
bsr.b relax
or.b #%01111000,(a1)
rts
dskrdy: move.w #1500,d0 ;timeout 1.5 sec
drdynms:bsr.w wait1ms
subq.w #1,d0
beq.b mot2
btst #5,$bfe001
bne.b drdynms
mot2: rts
trk0: movem.l d0-d1/a0-a1,-(a7)
bsr.b dskrdy
moveq #81+20,d0 ;maxcyl
moveq #0,d1
lea $bfd100,a1
trk2: btst #4,$0f01(a1) ;$bfe001
beq.b trk1
addq.w #1,d1
bsr.b stepdwn
dbf d0,trk2
lea trk0txt(pc),a1
bsr msgout
move.b #30,dskerr-base(a6) ;(SeekError)
trk1: lea drivcyl-3-base(a6),a1
move.b drvbit-base(a6),d0
ext.w d0
add.w d0,a1
tst.b (a1)
bpl.b trk3 ;startcyl valid
move.b d1,(a1)
trk3: sf trk-base(a6)
movem.l (a7)+,d0-d1/a0-a1
rts
stepup: bclr #1,(a1)
addq.b #2,trk-base(a6)
bra.b dostep
stepdwn:bset #1,(a1) ;down
subq.b #2,trk-base(a6)
dostep: sf truebuf-base(a6)
bclr #0,(a1)
bsr.w relax
bset #0,(a1)
stepdel:movem.l a1/d2,-(a7)
move.w #stepcount,d2
bra.b stp1
setldel:movem.l a1/d2,-(a7)
move.w #settlecount,d2
stp1: lea $bfdd00,a1
move.b #$7f,(a1) ;$bfdd00 clr int
bclr #5,$e00-$d00(a1) ;$bfde00 count 02
bset #3,$e00-$d00(a1) ;$bfde00 oneshot
move.b d2,$400-$d00(a1) ;$bfd400 timerlo
lsr.w #8,d2
move.b d2,$500-$d00(a1) ;$bfd500 timerhi
stp0: btst #0,(a1) ;$bfdd00 wait timerint
beq.b stp0
movem.l (a7)+,a1/d2
rts
dotrk: lea $bfd100,a1
moveq #0,d0
btst d0,d1
beq.b dtrk6
bclr #2,(a1)
bset d0,trk-base(a6)
bra.b dtrk0
dtrk6: bset #2,(a1)
bclr d0,trk-base(a6)
dtrk0: lsr.b #1,d1
cmp.b #82,d1
bls.b dtrk2
move.b #82,d1
dtrk2: moveq #-1,d0
dtrk1: move.b trk-base(a6),d0
lsr.b #1,d0
cmp.b d0,d1
beq.b dtrk3
bhi.b dtrk5
bsr.w stepdwn
bra.b dtrk7
dtrk5: bsr.w stepup
dtrk7: moveq #0,d0
bra.b dtrk1
dtrk3: tst.w d0 ;moved head?
bpl.b dtrk8
bsr.w stepdel
bra.b dtrk9
dtrk8: bsr.w setldel
dtrk9: btst #2,$0f01(a1) ;$bfe001,disk removed ?
bne.b dtrk4
move.b #29,dskerr-base(a6) ;(DiskChanged)
dtrk4: rts
drvnumx:moveq #8,d1
bra.b drvnum0
drvnum: moveq #0,d1
drvnum0:move.l a1,-(a7)
lea drvtxt(pc),a1
add.l d1,a1
bsr.w txttobuf
moveq #"0"-3,d0
add.b drvbit-base(a6),d0
move.b d0,-6(a0)
move.l (a7)+,a1
rts
format: lea 7(a5),a0
bsr.w getfilename
beq.w frmq ;empty
cmp.w #30,d4 ;len
bhi.w frmq
sf d6
bsr.w skipspc ;no eol check!
cmp.b #"q",(a0)
bne.b notkwik
st d6
addq.w #1,a0
bsr.w skipspc ;no eol check!
notkwik:move.l dosofs-base(a6),d5
moveq #-"0",d0
add.b (a0),d0 ;0:ofs,1:ffs,2:iofs,3:iffs
cmp.b #3,d0
bhi.b notffs
move.b d0,d5
notffs: move.l d5,formdos-base(a6)
lea rootblk-base(a6),a0
clr.l $1b0(a0)
lea $1b1(a0),a1 ;copy bcplname
subq.w #1,d4 ;d4:len
fmnam: move.b (a2)+,(a1)+ ;a2:name
addq.b #1,$1b0(a0)
dbf d4,fmnam
bsr.w motondt ;stays selected
bsr.w stepup
bsr.w stepdwn
sf dskerr-base(a6)
bsr.w trk0
tst.b dskerr-base(a6)
bne.w frm7
st wrflag-base(a6)
bsr.w testindrive ;wrflag?
bne.w frm7
lea dostrkbuf-base(a6),a0
move.w #512/4*11*2-1,d0 ;hd size
moveq #0,d1
clrtrkb:move.l d1,(a0)+
dbf d0,clrtrkb
moveq #80,d5
tst.b d6
bne.b frm0 ;quick!
move.w #159,d5
frm0: move.w d5,d1
bsr.w dotrk
tst.b dskerr-base(a6)
lea fabotxt(pc),a1
bne.w frm8 ;disk removed
lea dostrkbuf-base(a6),a0
tst.w d5
bne.b nocyl00
move.l formdos-base(a6),(a0)
nocyl00:cmp.w #80,d5
bne.w nocyl40
moveq #2,d0 ;type
move.l d0,(a0)
moveq #$48,d0 ;hashtabsize
move.l d0,$0c(a0)
moveq #-1,d0 ;valid bm
move.l d0,$138(a0)
move.l rootkey-base(a6),d0
addq.l #1,d0
move.l d0,$13c(a0) ;bm block
bsr.w getclok
move.l days-base(a6),$1a4(a0) ;change
move.l mins-base(a6),$1a8(a0)
move.l ticks-base(a6),$1ac(a0)
move.l days-base(a6),$1e4(a0) ;create
move.l mins-base(a6),$1e8(a0)
move.l ticks-base(a6),$1ec(a0)
move.l a0,-(a7)
lea rootblk+$1b0-base(a6),a1
lea $1b0(a0),a0
move.b (a1),(a0)+
bsr.w bcpltobuf
move.l (a7)+,a0
moveq #1,d0
move.l d0,$1fc(a0) ;secondary type
bsr.w datasum
move.l d3,$14(a0) ;data chksum
lea $200(a0),a1
move.l #$3b990984,d1 ;dd chksum :-)
moveq #$e0/4-1-1,d0
tst.b hddrive-base(a6)
beq.b makehd0
move.l #$3b9849bb,d1 ;hd chksum :-)
moveq #$1bc/4-1-1,d0
makehd0:move.l d1,(a1)+
moveq #-1,d1
makebm: move.l d1,(a1)+
dbf d0,makebm
moveq #$3f,d0
tst.b hddrive-base(a6)
bne.b makehd
move.b d0,$272(a0) ;root
makehd: move.b d0,$2dc(a0) ;unused
lea carbeer(pc),a1 ;16! chr
lea $3f0(a0),a0 ;end of bitmap
bsr.w txttobuf
nocyl40:lea linebuf+1-base(a6),a0
lea formtxt(pc),a1
bsr txttobuf
btst #0,d5
beq.b low
addq.b #1,-(a0) ;"1"
low:
move.b d5,d0
lsr.b #1,d0
lea linebuf+18-base(a6),a0
bsr.w bytetod
bsr rawline
bsr.w csup
bsr writeit ;sets dskerr
bsr.w stepdel ;wait >1.2 ms before sel/step/...
lea fabotxt(pc),a1
tst.b dskerr-base(a6)
bne.b frm8 ;disk removed, abort
cmp.w #80,d5
bne.b noclrb
lea dostrkbuf-base(a6),a0
move.w #512/4*2-1,d0
moveq #0,d1
clrbtrk:move.l d1,(a0)+ ;clr 2 sectors
dbf d0,clrbtrk
tst.b d6 ;quick?
beq.b nokwik
moveq #1,d5 ;next cyl: 0
nokwik:
noclrb: bsr.w stopit
beq.b frm8
dbf d5,frm0
lea fcpltxt(pc),a1
frm8: bsr.w msgout
frm7: bsr.w motoff
st d7
frmq: rts
carbeer:dc.b "CarnivoreBeerMon"!$80 ;16! chrs
bootb13:dc.w boot13len ;wb 1.3 bootblock
dc.l 0 ;checksum
dc.l 880
lea doscod0(pc),a1
jsr FindResident(a6)
tst.l d0
beq.b doscod1
move.l d0,a0
move.l $16(a0),a0
moveq #0,d0
doscod2:rts
doscod1:moveq #-1,d0
bra.b doscod2
doscod0:dc.b "dos.library",0
dc.w 0
dc.l "BEER"
boot13len=*-bootb13-3 ;dbf,size.w
bootb20:dc.w boot20len ;wb 2.0 bootblock (ofs/ffs)
dc.l 0
dc.l 880
lea expname(pc),a1
moveq #37,d0
jsr OpenLibrary(a6)
tst.l d0
beq.b no20exp
move.l d0,a1
bset #6,$22(a1)
jsr CloseLibrary(a6)
no20exp:lea dos20nm(pc),a1
jsr FindResident(a6)
tst.l d0
beq.b no20res
move.l d0,a0
move.l $16(a0),a0
moveq #0,d0
rts
no20res:moveq #-$1,d0
rts
dos20nm:dc.b "dos.library",0
expname:dc.b "expansion.library",0
dc.w 0
dc.l "BEER"
boot20len=*-bootb20-3 ;dbf,size.w
install:subq.b #1,d3
bmi.b usetype ;no para
bne.w instq
move.l dosofs-base(a6),d4
lea bootb13+2(pc),a5 ;wb 1.3 ofs bb
move.l para-base(a6),d0
moveq #4,d1
cmp.l d1,d0
bhi.w instq
beq.b bootok
move.b d0,d4
usetype:lea bootb20+2(pc),a5 ;wb 2.0 bb
bootok:
st wrcmd-base(a6) ; we want to load/save tracks
bsr.w motondt ;stays selected
bsr.w stepup
bsr.w stepdwn
sf dskerr-base(a6)
bsr.w trk0
tst.b dskerr-base(a6)
bne.w inst7
sf truebuf-base(a6)
clr.l secinbuf-base(a6)
move.b wrcmd-base(a6),wrflag-base(a6)
bsr.w testindrive
bne.w inst7
lea rootblk-base(a6),a4
tst.b d3
bpl.b inst8 ;para given?
move.l a4,d6
moveq #0,d5 ;bootblock
bsr.w getsec
tst.b dskerr-base(a6)
bne.b inst7
move.l (a4),d4 ;maintain dostype
moveq #-4,d0
and.l d4,d0
cmp.l dosofs-base(a6),d0 ;dostype unknown
beq.b inst8
bsr.w nodos ;disk in drive...
bra.b inst7
inst8:
move.l a4,a0
moveq #$400/4/2-1,d0
clrboot:clr.l (a0)+
clr.l (a0)+
dbf d0,clrboot
move.l a4,a1
move.l d4,(a1)+ ;dostype
move.w -2(a5),d0 ;size-1
dcodcpy:move.b (a5)+,(a1)+
dbf d0,dcodcpy
move.l a4,a0
bsr.w bootsum
move.l -(a1),4(a0)
move.l d3,(a1)
move.l a4,d6
moveq #0,d5
bsr.w putsec ;d5.l:blk,d6:adr
tst.b dskerr-base(a6)
bne.b inst7
lea $200(a4),a0
move.l a0,d6
moveq #1,d5
bsr.w putsec ;d5.l:blk,d6:adr
tst.b dskerr-base(a6)
bne.b inst7
bsr.w updatedisk
tst.b dskerr-base(a6)
bne.b inst7
lea insttxt(pc),a1
bsr.w msgout
inst7: bsr.w motoff ;deselect
st d7
instq: rts
config: lea conftxt(pc),a1
bsr.w msgout
lea $200000,a4 ;8mb area
lea $e90000,a5 ;board area
sf d6
nextbd: lea $e8000c,a3 ;must be 0
bsr.w getcnf
bne.w noboard
lea $e80010,a3 ;manufacturer
bsr.w getcnf4
tst.l d0 ;=0?
beq.w noboard
lea $e80000,a3 ;config area
bsr.w getcnf
not.b d0 ;invert bits
move.w d0,d5
add.b d5,d5
lea unkntxt(pc),a1 ;type 00,01
bcc.b bdtxt
add.b d5,d5
lea zorro3(pc),a1 ;type 10
bcc.b bdtxt
lea zorro2(pc),a1 ;type 11
bdtxt: lea linebuf+1-base(a6),a0
bsr.w txttobuf
lea linebuf+35-base(a6),a0
and.w #%111,d0
bne.b no8mb
moveq #%1000,d0
no8mb: moveq #5,d1
add.w d0,d1
moveq #0,d0
bset d1,d0
move.l d0,d2 ;size
mulu #$400,d2
moveq #"K",d1
cmp.w #512,d0
bls.b nomeg
moveq #"M",d1
rol.w #6,d0
nomeg: bsr.w hextod ;boardsize
move.b d1,(a0)+
lea linebuf+48-base(a6),a0
bsr.w getcnf ;product
bsr.w bytetoa_
lea linebuf+41-base(a6),a0
bsr.w getcnf
bsr.w bytetoa_
move.l #" ram",d3
btst #7,d0
bne.b to8mb
move.l #" hd ",d3
move.l a5,d0
add.l d2,a5
move.l a5,d1
bra.b toboard
to8mb: move.l a4,d0
add.l d2,a4
move.l a4,d1
toboard:move.l d0,d2 ;startaddr
lea linebuf+10-base(a6),a0
move.l d3,(a0)+
addq.w #1,a0
subq.l #1,d1 ;$xxxx0000-$xxyyffff
bsr.w twolong_
swap.w d2 ;000000xy
lsl.w #8,d2 ;0000xy00
move.w d2,d0 ;----xy00
lsl.w #4,d0 ;----y000
swap d2 ;xy000000
move.w d0,d2 ;xy00y000 the config value
; ^ official
; ^supra bugsync needs it here
addq.w #4,a3 ;skip c/e
lea linebuf+54-base(a6),a0
bsr.b getcnf2 ;manufacturer
bsr.w wordtoa_
addq.w #1,a0
bsr.b getcnf4 ;serial#
bsr.w longtoa_
addq.w #1,a0
bsr.b getcnf2 ;rom offset
bsr.w wordtoa_
move.w d2,$e8004a ;config board,low nibble
swap d2
move.w d2,$e80048 ;high nibble
st d6
pea nextbd(pc) ;config next board
bra.w rawline
noboard:tst.b d6
bne.b endbd
lea nobdtxt(pc),a1
bsr.w msgout
endbd: st d7
rts
getcnf4:bsr.b getcnf2
swap d0
getcnf2:bsr.b getcnf
lsl.w #8,d0
move.w d0,-(a7)
bsr.b getcnf
or.w (a7)+,d0
rts
getcnf: move.w (a3)+,d0
and.w #$f000,d0
lsr.w #8,d0
move.w d0,-(a7)
move.w (a3)+,d0
and.w #$f000,d0
rol.w #4,d0
or.w (a7)+,d0
not.b d0
rts
smd2q: rts
smd2raw:subq.l #1,d3
bne.b smd2q
move.l para-base(a6),d5
btst #0,d5
bne.b smd2q
sf fami-base(a6)
move.l d5,a0
bsr.b smdhead
beq.b smd2q
lea $200(a0),a3
move.l d5,a5
smdcv3: lea linebuf+1-base(a6),a0
lea smdxfer(pc),a1
bsr.w txttobuf
move.l a5,d0
bsr.w longtoa_
lea smdtogo(pc),a1
bsr.w txttobuf
move.b d6,d0
bsr.w bytetoa_
bsr.w rawline
bsr.w csup
lea dostrkbuf-base(a6),a4 ;$2000 bytes used
move.w #$1ff,d4
smdcv1: movem.l (a3)+,d0-d3
movem.l d0-d3,(a4)
lea $10(a4),a4
dbf d4,smdcv1
lea dostrkbuf-base(a6),a4
move.w #$1fff,d4
smdcv2: move.b (a3)+,d0
lsl.w #8,d0
move.b (a4)+,d0
move.w d0,(a5)+
dbf d4,smdcv2
subq.b #1,d6
bne.b smdcv3
moveq #$200/4-1,d0
smdcv4: move.l mask55-base(a6),(a5)+ ;invalidate buffer
dbf d0,smdcv4
lea smdcvco(pc),a1
bra.w msgout
smdhead:st d7
; cmp.w #$aabb,8(a0) ;obsolete
; bne.b smdp1
move.b (a0),d6 ;number of blocks
bne.b smdp2
smdp1: lea smdinva(pc),a1
bsr.w msgout
moveq #0,d0
smdp2: rts ;beq.b error
rawplay:sf fami-base(a6)
st smdraw-base(a6)
subq.l #1,d3
bne.w smdpq
move.l para-base(a6),d5
btst #0,d5
bne.w smdpq
lea rootblk+$200-base(a6),a0
moveq #512/4-1,d0
rawpl0: clr.l -(a0)
dbf d0,rawpl0
move.w #$0003,(a0)
move.l #$aabb0600,8(a0)
move.l d5,a1
move.l $1a4(a1),d6
addq.l #1,d6 ;romlen?
moveq #14,d1
lsr.l d1,d6 ;# blocks
move.b d6,(a0)
bra.b smdply0
famplay:st fami-base(a6)
bra.b smdply2
smdplay:sf fami-base(a6)
smdply2:sf smdraw-base(a6)
subq.l #1,d3
bne.w smdpq
move.l para-base(a6),d5
btst #0,d5
bne.w smdpq
move.l d5,a0
bsr.w smdhead
beq.w smdpq
smdply0:move.b $bfd200,d0
and.b #$f8,d0
or.b #4,d0
move.b d0,$bfd200
st $bfe301
move.l a7,a5 ;exit sp :-)
move.w #$dc00,d1
move.l #$200,d2
tst.b smdraw-base(a6)
bne.b smdply1
add.l d2,d5 ;bufptr
tst.b fami-base(a6)
bne.b famply0
smdply1:bsr.w sendblk ;a0:sendbuffer
lea smdmisc-base(a6),a0
sf (a0)
move.w #$2001,d1
moveq #1,d2
bsr.w sendblk
famply0:clr.w smdcnt-base(a6)
smdp3: bsr.w stopit
lea smdabor(pc),a1
beq.w smdperr
lea linebuf+1-base(a6),a0
lea smdxfer(pc),a1
bsr.w txttobuf
move.l d5,d0
bsr.w longtoa_
lea smdtogo(pc),a1
bsr.w txttobuf
move.b d6,d0
bsr.w bytetoa_
bsr.w rawline
bsr.w csup
move.w smdcnt-base(a6),d0
bsr.b sendpre
move.l d5,a0
move.w #$8000,d1
move.l #$2000,d2
tst.b fami-base(a6)
bne.b famply3
add.l d2,d2
famply3:add.l d2,d5 ;bufptr
bsr.w blksend
addq.w #1,smdcnt-base(a6)
subq.b #1,d6
bne.b smdp3
tst.b fami-base(a6)
beq.b smdply3
move.l para-base(a6),a0
move.w #$400,d1
move.w #$200,d2
bsr.w sendblk
moveq #6,d0
move.b 2(a0),d1
lsl.w #8,d1
or.b #1,d1
moveq #0,d2
bsr.b send02
bra.b famply2
smdply3:lea smdmisc-base(a6),a0
move.b #3,(a0)
move.w #$2001,d1
move.w #1,d2
bsr.w sendblk
famply2:lea smdcomp(pc),a1
smdperr:bsr.w msgout
st d7
smdpq: rts
; movem.l d0/d3/d4,-(a7)
; bsr.b sendini
; move.w d0,d1
; moveq #4,d0
; bra.b lbC000282
sendpre:movem.l d0/d3/d4,-(a7)
moveq #0,d1
move.b d0,d1
moveq #5,d0
lbC000282: moveq #0,d2
bsr.b send02
movem.l (a7)+,d0/d3/d4
rts
send02: movem.l d3/d4,-(a7) ;init,d0.b,d1.w,d2.w,crc.b
bsr.b sendini
moveq #$ffffff81,d3 ;chksum
move.b d0,d4
bsr.b sendmeg
move.w d1,d4
bsr.b sendmeg
lsr.w #8,d4
bsr.b sendmeg
move.w d2,d4
bsr.b sendmeg
lsr.w #8,d4
bsr.b sendmeg
move.b d3,d4 ;chksum
bsr.b sendmeg
movem.l (a7)+,d3/d4
rts
sendini:moveq #$ffffffd5,d4
bsr.b sendmeg
moveq #$ffffffaa,d4
bsr.b sendmeg
moveq #$ffffff96,d4
sendmeg:eor.b d4,d3
move.l #$400000,d7
shake: subq.l #1,d7
beq.b noshake
btst #0,$bfd000
bne.b shake
move.b d4,$bfe101
eor.b #4,$bfd000
rts
noshake:move.l a5,a7
lea smdtime(pc),a1
bra.w smdperr
blksend:movem.l d0-d4/a0,-(a7)
moveq #0,d0
tst.b smdraw-base(a6)
beq.b sendit
bsr.b send02
moveq #$ffffff81,d3
bsr.b blksnd0
lea -$4001(a0),a0 ;adjust to highbyte
pea sendit2(pc) ;continue with crc
blksnd0:move.w #$1fff,d2
sendlp1:addq.w #1,a0 ;lowbytes first
move.b (a0)+,d4
bsr.b sendmeg
dbf d2,sendlp1
rts
; movem.l d0-d4/a0,-(a7)
; moveq #2,d0
; bra.b sendit
sendblk:movem.l d0-d4/a0,-(a7)
moveq #0,d0
sendit: bsr.w send02
subq.w #1,d2
moveq #$ffffff81,d3
sendlp0:move.b (a0)+,d4
bsr.b sendmeg
dbf d2,sendlp0
sendit2:move.b d3,d4 ;crc
bsr.b sendmeg
movem.l (a7)+,d0-d4/a0
rts
i: tst.b d3
bne.w iq
lea linebuf+1-base(a6),a0 ;info about agnus regs/cpu vectors
lea $dff096,a1
move.l a1,d0
bsr.w adrtoa_
moveq #":",d4
move.b d4,(a0)+
move.w rdff002-base(a6),d0
bsr.w wordtoa_
addq.w #2,a0
addq.w #4,a1 ;$dff09a
move.l a1,d0
bsr.w adrtoa_
move.b d4,(a0)+
move.w rdff01c-base(a6),d0
bsr.w wordtoa_
addq.w #2,a0
addq.w #2,a1 ;$dff09c
move.l a1,d0
bsr.w adrtoa_
move.b d4,(a0)+
move.w rdff01e-base(a6),d0
bsr.w wordtoa_
addq.w #2,a0
addq.w #2,a1 ;$dff09e
move.l a1,d0
bsr.w adrtoa_
move.b d4,(a0)+
move.w rdff010-base(a6),d0
bsr.w wordtoa_
bsr.w rawline
bsr.w csdown
lea intvecs-base(a6),a1 ;$0-$1f,$20-$3f...
moveq #8-1,d3
i1: addq.w #1,a0
moveq #7,d0
sub.l d3,d0
lsl.l #5,d0
bsr.w wordtoa
move.b #":",(a0)+
moveq #8-1,d2
i0: addq.w #1,a0
move.l (a1)+,d0
bsr.w longtoa
dbf d2,i0
bsr.w rawline
dbf d3,i1
st d7
iq: rts
p: cmp.b #2,d3
bcs.w pq
cmp.b #3,d3
bhi.w pq
beq.b p2
move.w #256,para+10-base(a6) ;default period
p2: moveq #0,d0
btst d0,para+3-base(a6)
bne.b pq
btst d0,para+7-base(a6)
bne.b pq
move.l para-base(a6),d0
cmp.l para+4-base(a6),d0
bcc.b pq
cmp.l himem-base(a6),d0 ;sound in chipmem!
bcc.b pq
move.l para+4-base(a6),d1
cmp.l himem-base(a6),d1
bhi.b pq
move.l #$80808080,$dff09a
p0: bsr.b sndpos
p3: cmp.b #$1b,ascii-base(a6)
beq.b p1
tst.l para+4-base(a6)
bne.b p0
btst #7,$dff01f
beq.b p0
p1: move.l #$00800080,$dff09a
move.w #$0003,$dff096
bsr.b sndpos
bsr.w csdown
st d7
pq: rts
sndpos: lea linebuf+1-base(a6),a0
lea sndtxt(pc),a1
bsr.w txttobuf
move.l para-base(a6),d0
bsr.w adrtoa_ ;chipmem, use only 24 bit
bsr.w rawline
bra.w csup
g: cmp.b #1,d3
bne.w gq
move.l para-base(a6),d0
btst #0,d0
bne.w gq
lea mmuoffb(pc),a0
bsr.w mmujob
move.l d0,bmmmutc-base(a6)
bsr.w dobrkp ;insert bp
bsr.w loadmmu
bsr.w loadfpu
move #$3700,sr ;use isp|(68020+:msp)
move.l regs+64+8-base(a6),a7 ;msp
move #$2700,sr ;use isp
move.l regs+64+4-base(a6),a7 ;isp
tst.b cpu-base(a6) ;68010+ ?
beq.b nomsp2
move.l regs+64+12-base(a6),a5 ;vbr
dc.l movec_a5.vbr
move.b sfcdfc-base(a6),d0
dc.l movec_d0.sfc
move.b sfcdfc+1-base(a6),d0
dc.l movec_d0.dfc
cmp.b #2,cpu-base(a6) ;68020+ ?
bcs.b nomsp2
move.l regs+64+16-base(a6),a5 ;cacr
dc.l movec_a5.cacr
bsr.w pushcache
cmp.b #4,cpu-base(a6) ;68040?
beq.b nomsp2
move.l regs+64+20-base(a6),a5 ;caar
dc.l movec_a5.caar
nomsp2: move.l regs+64-base(a6),a0 ;usp
move.l a0,usp
move.w regs+64+28-base(a6),d0
and.w #$3fff,d0 ;clr tracebits
move.w d0,sr
pea g1(pc)
move.l para-base(a6),-(a7)
move.w regs+64+28-base(a6),ccr
movem.l regs-base(a6),d0-d7/a0-a6
rts
gg1: add.l #4,a7
g1: movem.l a6,-(a7) ;flags ok
lea base(pc),a6
movem.l d0-d7/a0-a5,regs-base(a6)
movem.l (a7)+,a0 ;a6
movem.l a0/a7,regs+56-base(a6) ;a6/a7
lea stackend-base(a6),a7 ;lea $80000,a7 (usp|isp|msp)
move.l a7,a3
lea $10.w,a0 ;illegal vec
add.l vbreg-base(a6),a0
move.l (a0),a1 ;old illegal vec
lea savereg(pc),a2 ;uses d0
movem.l a2,(a0) ;?flags ok
wrongpc:illegal ;store sr,pc,noint,go sv
move.l a1,(a0) ;restore illegal vec
move.l a7,regs+64+4-base(a6) ;isp
move usp,a7
move.l a7,regs+64-base(a6) ;usp
move.l a3,a7
tst.b cpu-base(a6) ;68010+ ?
beq.b nomsp
dc.l movec_vbr.a5
move.l a5,regs+64+12-base(a6) ;vbr
dc.l movec_dfc.d0
move.w d0,-(a7)
dc.l movec_sfc.d0
lsl.w #8,d0
or.w (a7)+,d0
move.w d0,sfcdfc-base(a6) ;sfcdfc
cmp.b #2,cpu-base(a6) ;68020+ ?
bcs.b nomsp
dc.l movec_msp.a5
move.l a5,regs+64+8-base(a6) ;msp
dc.l movec_cacr.a5
move.l a5,regs+64+16-base(a6) ;cacr
cmp.b #4,cpu-base(a6) ;68040?
beq.b nomsp
dc.l movec_caar.a5
move.l a5,regs+64+20-base(a6) ;caar
nomsp: move.w regs+64+28-base(a6),d0 ;start sr
lea regs+60-base(a6),a1 ;ptr start a7
move.l (a1)+,a0 ;start a7
btst #13,d0
beq.b fixa72 ;start usermode
addq.w #4,a1 ;skip usp,set isp
btst #12,d0
beq.b fixa72
addq.w #4,a1 ;skip isp,set msp
fixa72: move.l a0,(a1)
bsr.w savemmu
bsr.w savefpu
lea mmuoffh(pc),a0
bsr.b mmujob
bsr.b dobrkp ;remove bp
move.l bmmmutc-base(a6),d0
lea mmurest(pc),a0
bsr.b mmujob
lea wrongpc(pc),a1
cmp.l regs+64+24-base(a6),a1 ;pc?
bne.b g3
move.l breakpc-base(a6),regs+64+24-base(a6)
g3: bra.w warm
gq: rts
mmujob: tst.b mmu-base(a6) ;nommu
beq.b mmujob0
cmp.b #3,mmu-base(a6) ;68040mmu
beq.b mmujob0
lea mmujbuf-base(a6),a2
dc.l pmove_tc.a2
jsr (a0)
dc.l pmove_a2.tc
mmujob0:rts
mmuoffb:move.l (a2),d0
mmuoffh:bclr #7,(a2)
rts
mmurest:move.l d0,(a2)
rts
mmuonh: bset #7,(a2)
rts
dobrkp: moveq #brkpnum-1,d0
lea brkpadr-base(a6),a0
lea brkpbuf-base(a6),a1
dbrk0: move.l (a0)+,a2
move.l a2,d1
beq.b dbrk1
move.w (a2),-(a7)
move.w (a1),(a2)
move.w (a7)+,(a1)+
dbrk1: dbf d0,dbrk0
pushcache:
cmp.b #4,cpu-base(a6) ;68040?
bne.b dbrk4
dc.w cpusha_bc
dbrk4: rts
invcache:cmp.b #4,cpu-base(a6)
bne.b invcac0
; dc.w cinva_bc
rts
invcac0:cmp.b #2,cpu-base(a6) ;68020+ ?
bcs.b dbrk2
move.l d0,-(a7)
dc.l movec_cacr.d0
or.w #%0000100000001000,d0 ;clr data/instr cache
dc.l movec_d0.cacr
move.l (a7)+,d0
dbrk2: rts
hunk: movem.l para-base(a6),d2/d4-d6 ;start,end,(dest),(jmp)
btst #0,d2
bne.b hunkq
subq.l #2,d3 ;start,end
bmi.b hunkq
bne.b hn3
move.l d2,d5 ;dest=start
hn3: subq.l #2,d3
bmi.b hn0
beq.b hn5
hunkq: rts
hn0: move.l d5,d6 ;jmp=dest
hn5: lea $100.w,a0
cmp.l a0,d2
bcs.b hunkq
move.l d4,d3
sub.l d2,d3 ;size
bmi.b hunkq
move.l d3,d0 ;prgbytes
move.l d4,a0
move.l d2,a1
hn1: subq.l #1,d0
bmi.b hn2
move.b -(a0),hunkend-hunkdata(a0)
bra.b hn1
hn2: lea hunkdata(pc),a0
moveq #hunkend-hunkdata-1,d0
hn4: move.b (a0)+,(a1)+
dbf d0,hn4
move.l d2,a0
move.l d3,hunksiz+2-hunkdata(a0) ;size
move.l d5,hunkmem+2-hunkdata(a0) ;dest
move.l d6,hunkjmp+2-hunkdata(a0) ;jmp
addq.l #3,d3 ;size+3
lsr.l #2,d3
moveq #(hunkend-hunkmov)/4,d0
add.l d0,d3
move.l d3,hunklong1-hunkdata(a0)
move.l d3,hunklong2-hunkdata(a0)
lsl.l #2,d3
add.l d2,d3
lea (hunkmov-hunkdata).w,a3
add.l d3,a3
lea $3f2.w,a0
move.l a0,(a3)+
move.l a0,(a3)+
lea linebuf+1-base(a6),a0
lea objtxt(pc),a1
bsr.w txttobuf
move.l d2,d0
move.l a3,d1
bsr.w twolong_
bsr.w rawline
st d7
hnq: rts
hunkdata:dc.l $3f3,0,1,0,0 ;datalen=:4!
hunklong1:dc.l 0,$3e9
hunklong2:dc.l 0
hunkmov:move.l #$7fff7fff,$dff09a ;you may edit this
move.w #$0000,$dff096 ;after hunking data
hunksiz:move.l #0,d7 ;sizeinbytes
lea hunkend(pc),a4
hunkmem:lea $000000,a5 ;prgdest
lea $80000,a7 ;this mostly is the USP
hunkjmp:pea $000000
movem.w mover(pc),d0-d4
cmp.l a5,a4
bhi.b mvdown
eor.w #$01f8,d2 ;move.b -(a4),-(a5)
add.l d7,a4
add.l d7,a5
mvdown: lea $100.w,a1 ;we have MC68851/81/82 traps :-)
movem.w d0-d4,(a1)
jmp (a1)
dc.b "BEER1993" ;don't change size, better nothing
mover: subq.l #1,d7 ;this is located somewhere at $100...
bmi.b endmov
move.b (a4)+,(a5)+
bra.b mover
endmov: rts ;prgstart
hunkend:
calc: lea linebuf+1-base(a6),a0
lea 2(a5),a3
bsr.b getval
move.l d0,d5
calc1: bsr.b skipit
beq.b calcout
move.b (a3)+,d4
lea calc_op(pc),a4
lea calccpu-4(pc),a1
calc0: move.b (a4)+,d0
beq.w calcerr
addq.w #4,a1
cmp.b d4,d0
bne.b calc0
bsr.b getval
move.l d0,d6
jsr (a1)
bra.b calc1
skipit: cmp.b #" ",(a3)
bne.b calc2
addq.w #1,a3
lea xchars(a5),a1
cmp.l a1,a3
bcs.b skipit ;beq.b endtxt
calc2: rts
getval: bsr.b skipit
move.b (a3),d1
cmp.b #34,d1 ;"
beq.b calc9
cmp.b #39,d1 ;'
bne.b calc8
calc9: addq.w #1,a3
moveq #0,d0
moveq #4+1-1,d2
calc10: cmp.b (a3)+,d1
beq.b calc11
lsl.l #8,d0
move.b -1(a3),d0
dbf d2,calc10
addq.w #4,a7
calc11: rts
calc8: cmp.b #"#",(a3)
bne.b calc3
addq.w #1,a3
bra.w atodlong
calc3: bra.w atolong
calcout:move.l d5,d0
bsr longtoa_
bsr.w chr4buf
dc.l " = #"
move.l d5,d0
bpl.b calc6
move.b #"-",(a0)+
neg.l d0
calc6: bsr hextod
bsr.w chr4buf
dc.l " = %"
move.l d5,d0
bsr hextob
bsr.w chr4buf
dc.l ' = "'
move.l d5,d0
moveq #4-1,d1
calc7: rol.l #8,d0
move.b d0,(a0)+
dbf d1,calc7
move.b #34,(a0)+
calc4: bsr rawline
st d7
calcerr:rts
calc_op:dc.b '+-*!&=<>/',0
even
calccpu:add.l d6,d5
rts
sub.l d6,d5
rts
muls d6,d5
rts
or.l d6,d5
rts
and.l d6,d5
rts
eor.l d6,d5
rts
lsl.l d6,d5
rts
lsr.l d6,d5
rts
tst.w d6
beq.b calcovl
divs d6,d5
bvs.b calcovl
ext.l d5
rts
calcovl:addq.w #4,a7
lea calctxt(pc),a1
bsr txttobuf
bra.b calc4
r: lea regs-base(a6),a2
cmp.b #2,d3
bhi.w rq
tst.b d3
beq.w r0
cmp.b #1,d3
bne.w r6
moveq #0,d2
moveq #4-1,d0
bclr #5,(a0)
cmp.b #"R",(a0)
bne.b r7
subq.w #3,a0 ;cacr/caar
r7: move.b (a0)+,d1
cmp.b #" ",d1
beq.b r8
bclr #5,d1
lsl.l #8,d2
or.b d1,d2
dbf d0,r7
r8: lea 64(a2),a1 ;uspadr
move.l para-base(a6),d0
cmp.l #"USP",d2
beq.b r9
addq.w #4,a1
cmp.l #"ISP",d2
beq.b r9
addq.w #4,a1
cmp.l #"MSP",d2
beq.b r9
addq.w #4,a1
cmp.l #"VBR",d2
beq.b r9
addq.w #4,a1
cmp.l #"CACR",d2
beq.b r9b
addq.w #4,a1
cmp.l #"CAAR",d2
beq.b r9b
addq.w #4,a1
cmp.l #"PC",d2
bne.b r10
r9: bclr #0,d0
r9b: move.l d0,(a1)
r10: moveq #7,d1
cmp.l #"SFC",d2
bne.b rsfc
cmp.l d1,d0
bhi.w rq
move.b d0,sfcdfc-base(a6)
rsfc: cmp.l #"SR",d2
bne.b r0
move.w d0,64+28(a2)
bra.b r0
r6: move.w para+6-base(a6),d1 ;d0-a7
cmp.w #$dfc,d1
bne.b rrx
move.l para-base(a6),d0
moveq #7,d2
cmp.l d2,d0
bhi.w rq
move.b d0,sfcdfc+1-base(a6)
bra.b r0
rrx: and.w #%1111111111111000,d1
cmp.w #$a0,d1
beq.b r5
cmp.w #$d0,d1
bne.w rq
r5: move.w para+6-base(a6),d1
sub.w #$d0,d1
bcc.b r4
add.w #$38,d1
r4: add.w d1,d1 ;lsl.w #2,d1
add.w d1,d1
move.l para-base(a6),(a2,d1.w) ;write value
cmp.w #60,d1 ;a7?
bne.b r0
lea 64(a2),a1 ;uspadr
btst #13,64+28(a2) ;sr
beq.b r23
addq.w #4,a1
btst #12,64+28(a2) ;sr
beq.b r23
addq.w #4,a1
r23: move.l para-base(a6),(a1) ;store usp/isp/msp
r0: tst.b excnum-base(a6)
beq.b r21
move.w exceptsr-base(a6),64+28(a2) ;sr
move.l exceptpc-base(a6),64+24(a2) ;pc
move.l exceptpc-base(a6),para-base(a6)
r21: move.l 64(a2),d0 ;usp
btst #13,64+28(a2) ;a7:usp?
beq.b r22
move.l 64+4(a2),d0 ;isp
btst #12,64+28(a2)
beq.b r22
move.l 64+8(a2),d0 ;msp
r22: move.l d0,64-4(a2) ;a7
lea linebuf-base(a6),a0
move.l #" D0:",d4
moveq #16-1,d6
r1: move.l d4,(a0)+
r2: move.l (a2)+,d0
bsr.w longtoa
addq.w #1,a0
moveq #7,d0
and.b d6,d0
dbeq d6,r2
bsr.w rawline
move.l #" A0:",d4
dbf d6,r1
cmp.b #1,cpu-base(a6)
beq.b r68010
bcs.w r68000
cmp.b #4,cpu-base(a6) ;68040?
beq.b r68040
move.w #" C",(a0)+ ;68020+
move.l #"AAR:",(a0)+
move.l regs+64+20-base(a6),d0 ;caar
bsr longtoa
r68040: addq.w #2,a0
move.l #"MSP:",(a0)+
move.l regs+64+8-base(a6),d0 ;msp
bsr longtoa
r68010: addq.w #2,a0 ;68010+
move.l #"VBR:",(a0)+
move.l regs+64+12-base(a6),d0 ;vbr
bsr longtoa
addq.w #3,a0
bsr.w chr4buf
dc.l "SFC:"
moveq #"0",d0
add.b sfcdfc-base(a6),d0
move.b d0,(a0)+
addq.w #1,a0
bsr.w chr4buf
dc.l "DFC:"
moveq #"0",d0
add.b sfcdfc+1-base(a6),d0
move.b d0,(a0)+
bsr.w rawline
cmp.b #1,cpu-base(a6)
bls.b r68000
move.w #" C",(a0)+ ;68020+
move.l #"ACR:",(a0)+
move.l regs+64+16-base(a6),d0 ;cacr
move.l d0,d2 ;bitcacr
bsr.w longtoa
addq.w #2,a0
bsr.w cacrbit
bsr.w rawline
r68000: addq.w #2,a0
move.l #"USP:",(a0)+
move.l regs+64-base(a6),d0 ;usp
bsr longtoa
addq.w #2,a0
move.l #"ISP:",(a0)+
move.l regs+64+4-base(a6),d0 ;isp
bsr longtoa
addq.w #2,a0
move.l #" SR:",(a0)+
move.w regs+64+28-base(a6),d0 ;sr
move.w d0,d2
bsr wordtoa
addq.w #2,a0
move.b #"T",(a0)+
moveq #"1",d0
moveq #15,d3
bsr.w bitstat ;15
cmp.b #1,cpu-base(a6)
bls.b rbs1
move.b #"T",(a0)+ ;68020+
moveq #"0",d0
bsr.w bitstat ;14
rbs1: moveq #13,d3
moveq #"S",d0
bsr.w bitstat ;13
cmp.b #1,cpu-base(a6)
bls.b rbs0
moveq #"M",d0 ;68020+
bsr.w bitstat ;12
rbs0: moveq #4,d3
moveq #"X",d0
bsr.w bitstat ;4
moveq #"N",d0
bsr.w bitstat ;3
moveq #"Z",d0
bsr.w bitstat ;2
moveq #"V",d0
bsr.w bitstat ;1
moveq #"C",d0
bsr.w bitstat ;0
bsr.w rawline
rbp0: cmp.b #3,excnum-base(a6) ;illegal instr|bp?
bne.b rbp1
lea brkpadr-base(a6),a0
move.l exceptpc-base(a6),d1
moveq #brkpnum-1,d0
rbp2: cmp.l (a0)+,d1
bne.b rbp3
lea brktxt(pc),a1
lea linebuf+1-base(a6),a0
bsr.w txttobuf
bra.b rexc1
rbp3: dbf d0,rbp2
rbp1: move.b excnum-base(a6),d0
beq.b r14
lea linebuf+1-base(a6),a0
lea exctxt(pc),a1
cmp.b (a1)+,d0
bsr.w indextx
lea excext(pc),a1
move.b -(a0),d0
cmp.b (a1),d0
bhi.b rexc1
move.b #" ",(a0)
cmp.b (a1)+,d0
bsr.w indextx
rexc1:
cmp.b #2,excnum-base(a6) ;adr err
bne.b r18
lea linebuf+29-base(a6),a0
move.w excinstr-base(a6),d0
bsr.w wordtoa
lea linebuf+43-base(a6),a0
move.l excadr-base(a6),d0
bsr.w longtoa_
r18: bsr.w rawline
sf excnum-base(a6)
r14: move.l regs+64+24-base(a6),a5 ;pc
bsr.w disasm
bsr.w rawline
st d7
rq: rts
bitstat:move.b d0,(a0)+
bitcacr:move.b #"=",(a0)+
btst d3,d2 ;d2:sr,d3:bit#
seq (a0)
add.b #"1",(a0)
addq.w #2,a0
subq.b #1,d3
rts
cacrbit:cmp.b #4,cpu-base(a6)
beq.b cacr40
moveq #3,d3 ;ci
lea cacrtx2(pc),a1
cmp.b #2,cpu-base(a6) ;68020
beq.b bitlp0
lea cacrtxt(pc),a1
moveq #13,d3 ;wa
bitlp0: bsr.b txttst
bmi.b endcacr
cmp.b #7,d3 ;wa-ed
bne.b bitlp0
subq.b #3,d3 ;ibe-ei
bra.b bitlp0
endcacr:rts
cacr40: moveq #31,d3
lea cacrtx3(pc),a1
bsr.b txttst
moveq #15,d3
txttst: bsr.w txttobuf
bra.b bitcacr
fpcrbit:lea fpcrtxt(pc),a1
moveq #15,d3 ;bsun
bitlp1: bsr.b txttst
cmp.b #7,d3 ;bsun-inex2,prec-rnd
bne.b bitlp1
rts
fpsrbit:lea fpsrtxt(pc),a1
moveq #27,d3 ;n
bitlp2: bsr.b txttst
cmp.b #2,d3 ;iop-inex
beq.b endfpsr
cmp.b #22,d3 ;n-s
bne.b bitlp2
bsr.w chr2buf
dc.w "Q="
move.l d2,d0
swap d0
moveq #%01111111,d1
and.l d1,d0
bsr.w bytetoa
addq.w #1,a0
sub.b #15,d3 ;iop-inex
bra.b bitlp2
endfpsr:rts
mttxbit:lea mttxtxt(pc),a1
bsr.w txttobuf ;31-24
move.l d2,d0
rol.l #8,d0
bsr.w bytetoa
bsr.w txttobuf ;23-16
rol.l #8,d0
bsr.w bytetoa
addq.w #1,a0
moveq #15,d3 ;e
moveq #"E",d0
bsr.w bitstat
moveq #10,d3 ;ci
bitlp3: bsr.w txttobuf
bsr.w bitcacr
cmp.b #7,d3 ;ci-rwm
bne.b bitlp3
bsr.w txttobuf
moveq #%1110000,d0 ;fc
and.l d2,d0
lsr.b #4,d0
bsr.w nibtoa
bsr.w txttobuf
moveq #%111,d0 ;fcm
and.l d2,d0
bra.w nibtoa
mtcbit: lea mtctxt(pc),a1
moveq #31,d3 ;e
moveq #"E",d0
bsr.w bitstat
moveq #25,d3 ;sre
bsr.w txttobuf
bsr.w bitcacr
bsr.w txttobuf ;fcl
bsr.w bitcacr
bsr.w txttobuf ;ps
move.l d2,d0
swap d0
and.w #%01110000,d0
lsr.w #2,d0
move.b mmups+0(pc,d0.w),(a0)+
move.b mmups+1(pc,d0.w),(a0)+
move.b mmups+2(pc,d0.w),(a0)+
move.b mmups+3(pc,d0.w),(a0)+
moveq #5-1,d3 ;is,tia-tid
move.l d2,d0
swap d0 ;19-16:3-0
mtcb0: bsr.w txttobuf
bsr.w nibtod
rol.l #4,d0 ;15-12
dbf d3,mtcb0
rts
mmups: dc.l "256B","512B","1 KB","2 KB","4 KB","8 KB","16KB","32KB"
cacrtxt:dc.b "WA"!$80,"DBE"!$80,"CD"!$80,"CED"!$80
dc.b "FD"!$80,"ED"!$80,"IBE"!$80
cacrtx2:dc.b "CI"!$80
dc.b "CEI"!$80,"FI"!$80,"EI"!$80
cacrtx3:dc.b "DE"!$80,"IE"!$80
fpcrtxt:dc.b "BSUN"!$80,"SNAN"!$80,"OPERR"!$80,"OVFL"!$80,"UNFL"!$80
dc.b "DZ"!$80,"INEX1"!$80,"INEX2"!$80
fpsrtxt:dc.b "N"!$80,"Z"!$80,"I"!$80,"NAN"!$80,"S"!$80
dc.b "IOP"!$80,"OVFL"!$80,"UNFL"!$80,"DZ"!$80,"INEX"!$80
mttxtxt:dc.b "LAB="!$80," LAM="!$80,"CI"!$80,"R/W"!$80,"RWM"!$80
dc.b "FC="!$80," FCM="!$80
mtctxt: dc.b "SRE"!$80,"FCL"!$80,"PS="!$80," IS="!$80
dc.b " TIA="!$80," TIB="!$80," TIC="!$80," TID="!$80
even
rfpu: lea fpuregs-base(a6),a2
tst.b d3
bne.w rfpuq
rf0: move.l #"FP0:",d4
moveq #8-1,d2 ;8 regs
rf1: moveq #12/2-1,d1 ;80+16 bit
lea linebuf+2-base(a6),a0
move.l d4,(a0)+
move.l a2,a3
rf2: move.w (a2)+,d0
bsr.w wordtoa
dbf d1,rf2
addq.w #2,a0
bsr.w realtoa
bsr.w rawline
add.w #$100,d4
dbf d2,rf1
move.w #" F",(a0)+
move.l #"PCR:",(a0)+
move.l fpcr-base(a6),d2
move.l d2,d0 ;fpcrbit
bsr.w wordtoa ;upper word=0
addq.w #1,a0 ;even
move.b #"P",(a0)+
move.l #"REC=",(a0)+
moveq #0,d0
move.b d2,d0
lsr.w #6,d0 ;prec
move.b fprec(pc,d0.w),(a0)+
addq.w #1,a0 ;even
move.l #"RND=",(a0)+
moveq #%00110000,d0
and.w d2,d0
lsr.w #4,d0 ;rnd
move.b frnd(pc,d0.w),(a0)+
addq.w #1,a0
bsr.w fpcrbit ;exception enable
bsr.w rawline
move.w #" F",(a0)+
move.l #"PSR:",(a0)+
move.l fpsr-base(a6),d2
move.l d2,d0
bsr.w longtoa
lea linebuf+24-base(a6),a0
bsr.w fpcrbit ;exception status
bsr.w rawline
move.w #"FP",(a0)+
move.l #"IAR:",(a0)+
move.l fpiar-base(a6),d0
bsr.w longtoa
addq.w #8,a0
move.l fpsr-base(a6),d2
bsr.w fpsrbit
bsr.w rawline
st d7
rfpuq: rts
fprec: dc.b "XSD?"
frnd: dc.b "NZMP"
realtoa:tst.b fpu-base(a6)
lea nofpu(pc),a1
beq.b fpnan
cmp.b #3,fpu-base(a6) ;68040fpu ?
beq.w endfp ;no scientific notation
dc.l fmove.x_a3.fp0
lea bcdbuf-base(a6),a3
dc.l fmove.p_fp0.a3
moveq #" ",d0
tst.b (a3)
bpl.b fppos
moveq #"-",d0
fppos: move.b d0,(a0)+
move.w (a3)+,d0
ori.w #$8000,d0
addq.w #1,d0
bne.b fpok
addq.w #2,a3
lea nan(pc),a1
btst #6,(a3)
bne.b fpnan
move.l (a3)+,d1
lea infin(pc),a1
or.l (a3),d1
beq.b fpnan
lea snan(pc),a1
fpnan: bsr.w txttobuf
bra.b endfp
fpok: addq.w #1,a3
move.b (a3)+,d0
bsr.w nibtoa
move.b #".",(a0)+
moveq #8-1,d1
fpman0: move.b (a3),d0
lsr.b #4,d0
bsr.w nibtoa
move.b (a3)+,d0
bsr.w nibtoa
dbf d1,fpman0
move.b #"E",(a0)+
lea bcdbuf-base(a6),a3
moveq #"+",d0
btst #6,(a3)
beq.b fppos1
moveq #"-",d0
fppos1: move.b d0,(a0)+
dc.l fmove_fpsr.d1
moveq #0,d0
btst #13,d1
beq.b nooperr
move.b 2(a3),d0
lsr.b #4,d0
nooperr:bsr.w nibtoa
move.b (a3)+,d0
bsr.w nibtoa
move.b (a3),d0
lsr.b #4,d0
bsr.w nibtoa
move.b (a3),d0
bsr.w nibtoa
endfp: rts
nofpu: dc.b "No FPU!"!$80
snan: dc.b "S"
nan: dc.b "NAN"!$80
infin: dc.b "INFINITY"!$80
even
settt0: moveq #mmutt0-mmutt0,d0
bra.b setmmu1
settt1: moveq #mmutt1-mmutt0,d0
bra.b setmmu1
settc: moveq #mmutc-mmutt0,d0
bra.b setmmu1
setmusr:moveq #mmusr-mmutt0,d0
moveq #-1,d1 ;1 word para
bra.b setmmu
setsrp: moveq #mmusrp-mmutt0,d0
bra.b setmmu2
setcrp: moveq #mmucrp-mmutt0,d0
bra.b setmmu2
setdrp: cmp.b #1,mmu-base(a6)
lea nmmutx1(pc),a1
bne.b setmmue
moveq #mmudrp-mmutt0,d0
; bra.b setmmu2
setmmu2:moveq #2,d1
bra.b setmmu
setmmu1:moveq #1,d1 ;1 lw para
setmmu: lea nmmutxt(pc),a1 ;no mmu
tst.b mmu-base(a6)
beq.b setmmue
lea nmmutx2(pc),a1 ;not supported
cmp.b #3,mmu-base(a6)
beq.b setmmue
movem.l para-base(a6),d4-d5
lea mmutt0-base(a6),a0
add.l d0,a0
move.l d3,d0
subq.l #1,d0 ;1 para?
bne.b setmmn1
cmp.l d1,d3
bne.b setmmn0
move.l d4,(a0)
bra.b setmmu4
setmmn0:addq.l #1,d1
bne.b setmmuq
move.w d4,(a0)
bra.b setmmu4
setmmn1:subq.l #1,d0 ;2 para?
bne.b setmmuq
cmp.l d1,d3
bne.b setmmuq
movem.l d4-d5,(a0)
setmmu4:bsr loadmmu
bra.b rmmuout
setmmue:bsr msgout
st d7
setmmuq:rts
rmmu: tst.b d3
bne.b setmmuq ;rmmuq
rmmuout:bsr savemmu
st d7
tst.b mmu-base(a6)
lea nmmutxt(pc),a1
beq.w msgout
cmp.b #3,mmu-base(a6)
lea nmmutx2(pc),a1
beq.w msgout
lea mmutt0-base(a6),a2
move.l #"TT0:",d4
moveq #2-1,d5 ;2 regs
rm1: lea linebuf+2-base(a6),a0
move.l d4,(a0)+
move.l (a2),d0
bsr.w longtoa
addq.w #2,a0
move.l (a2)+,d2
bsr.w mttxbit
bsr.w rawline
add.w #$100,d4
dbf d5,rm1
addq.w #2,a0
move.l #" TC:",(a0)+
move.l (a2),d0
bsr.w longtoa
addq.w #2,a0
move.l (a2)+,d2
bsr.w mtcbit
bsr.w rawline
cmp.b #1,mmu-base(a6) ;68851
bne.b no8513
move.l a2,-(a7)
lea mmudrp-base(a6),a2
move.l #"DRP:",d0
bsr.b doXrp
move.l (a7)+,a2
no8513: move.l #"SRP:",d0
bsr.b doXrp
move.l #"CRP:",d0
bsr.b doXrp
move.w #"MM",(a0)+
move.l #"USR:",(a0)+
move.w (a2),d2
move.w d2,d0
bsr.w wordtoa
addq.w #6,a0
moveq #15,d3
moveq #"B",d0
bsr.w bitstat ;15
moveq #"L",d0
bsr.w bitstat ;14
moveq #"S",d0
bsr.w bitstat ;13
subq.w #1,d3
moveq #"W",d0
bsr.w bitstat ;11
moveq #"I",d0
bsr.w bitstat ;10
moveq #"M",d0
bsr.w bitstat ;9
subq.w #2,d3
moveq #"T",d0
bsr.w bitstat ;6
bsr.w chr2buf
dc.w "N="
moveq #%111,d0 ;0-7
and.w d2,d0
bsr.w nibtoa
bsr.w rawline
rmmuq: rts
doXrp: addq.w #2,a0
move.l d0,(a0)+
move.l (a2),d0
bsr.w longtoa
addq.w #1,a0
move.l 4(a2),d0
bsr.w longtoa
addq.w #1,a0
move.w #"L/",(a0)+ ;even
moveq #"U",d0
moveq #15,d3
move.w (a2)+,d2
bsr.w bitstat
bsr.w chr4buf
dc.l "LMT="
move.w #$7fff,d0
and.w d2,d0
bsr.w wordtoa
bsr.w chr4buf
dc.l " DT="
moveq #%11,d0
and.w (a2)+,d0
bsr.w nibtoa
bsr.w chr4buf
dc.l " TA="
moveq #-4,d0 ;%..11100
and.l (a2)+,d0
bsr.w longtoa
bra.w rawline
mmuon: lea mmuonh(pc),a0
bra.b mmuon0
mmuoff: lea mmuoffh(pc),a0
mmuon0: st d7
tst.b mmu-base(a6)
lea nmmutxt(pc),a1
beq.w msgout
cmp.b #3,mmu-base(a6)
lea nmmutx2(pc),a1
beq.w msgout
bra.w mmujob
ontxt: dc.b "on "!$80
offtxt: dc.b "off"!$80
chips: dc.b "1MBit*1"!$80,0 ;a3000/a4000 onboard chipsize
dc.b "4MBit*4"!$80,0
dc.b "256 K*4"!$80,0
dc.b "1MBit*4"!$80,0
refresh:dc.b "123o" ;a3000/a4000 refresh rates
dc.b "538f"
dc.b "480f"
ramsey: lea linebuf+1-base(a6),a0
lea a3info(pc),a1
bsr.b rtxtbuf
move.b $de0043,d0 ;version
bsr bytetoa_
move.b $de0003,d0
moveq #0,d1
lea linebuf+1+(a3stc-a3info)-base(a6),a0
bsr.b onoff ;bit0
addq.w #a3burst-a3stc-3,a0
bsr.b onoff ;bit1
addq.w #a3bwrap-a3burst-3,a0
bsr.b onoff ;bit2
moveq #%00011000,d1 ;bit3,4
and.w d0,d1
addq.w #a3chips-a3bwrap-3,a0
lea chips(pc,d1.w),a1
bsr.b rtxtbuf
moveq #%01100000,d1
and.w d0,d1
rol.b #3,d1
lea a3refr-a3chips-7(a0),a0
move.b refresh+0(pc,d1.w),(a0)+
move.b refresh+4(pc,d1.w),(a0)+
move.b refresh+8(pc,d1.w),(a0)+
rams0: st d7
bra rawline
onoff: btst d1,d0
doonoff:lea ontxt(pc),a1
bne.b ison
addq.w #offtxt-ontxt,a1
ison: addq.b #1,d1
rtxtbuf:bra.w txttobuf
gary: lea $de0000,a4
lea linebuf+1-base(a6),a0
lea a3info2(pc),a1
bsr.b rtxtbuf
tst.b 1(a4) ;timeout disable
bmi.b timdis
addq.w #a3dsack-a3disab,a1
tst.b (a4) ;timeout control
bpl.b timdis
addq.w #a3berr-a3dsack,a1
timdis: bsr.b rtxtbuf
lea a3kbrst(pc),a1
bsr.b rtxtbuf
moveq #"n",d0
tst.b $1001(a4) ;kb reset enable
bpl.b kbrston
moveq #"f",d0
move.b d0,(a0)+
kbrston:move.b d0,(a0)+
bsr.b rtxtbuf
lea $1002(a4),a3 ;garyID
sf (a3) ;init ID mode
moveq #8-1,d1
garyid1:tst.b (a3)
bpl.b garyid0
addq.b #1,d0
garyid0:add.b d0,d0
dbf d1,garyid1
bsr bytetoa_
; bsr.b rtxtbuf
; moveq #%100,d0
; lea $dd0004,a4 ;DMAC
; move.l d0,(a4)
; and.l (a4),d0
; bne.b dmacold
; subq.w #3,a0
; bsr.b rtxtbuf ;new
;dmacold:
bra.w rams0
setkey: cmp.b #1,d3
bhi.w setkq
tst.b d3
beq.b setk0
move.l para-base(a6),d0
lea $f1.w,a0
sub.l a0,d0
bmi.w setkq
lea $f10-$f1.w,a0
cmp.l a0,d0
bne.b setk1
moveq #9,d0
setk1: moveq #9,d1
cmp.l d1,d0
bhi.w setkq
lea 2(a5),a2
moveq #xchars-2-1,d1
setk8: cmp.b #34,(a2)
beq.b setk9
cmp.b #39,(a2)
beq.b setk9
addq.w #1,a2
dbf d1,setk8
bra.b setkq
setk9: move.b (a2)+,d4
lea fkeybuf-base(a6),a0
mulu #fkeylen,d0
lea (a0,d0.w),a0
moveq #fkeylen-1,d1
setk2: cmp.b (a2),d4
beq.b setk3
move.b (a2)+,(a0)+
dbf d1,setk2
setk3: tst.w d1
bmi.b setk0
sf (a0)
setk0: lea fkeybuf-base(a6),a2
moveq #10-1,d2
setk6: move.l a2,a1
lea linebuf+1-base(a6),a0
move.b #"F",(a0)+
moveq #10,d0
sub.b d2,d0
bsr.w nibtod
lea linebuf+5-base(a6),a0
moveq #39,d0
move.b d0,(a0)+
moveq #fkeylen-1,d3
setk4: move.b (a1)+,(a0)+
dbeq d3,setk4
bne.b setk7
subq.w #1,a0
setk7: move.b d0,(a0)
lea fkeylen(a2),a2
bsr.w rawline
dbf d2,setk6
st d7
setkq: rts
color: subq.b #2,d3
bne.b colorq
movem.l para-base(a6),d0-d1
movem.w d0-d1,rgb0-base(a6)
movem.w d0-d1,$dff180
cmp.b #4,modeflg-base(a6)
bne.b colorok
bsr.w mapcol
move.l d3,$dff180
move.l d2,$dff188
colorok:st d7
colorq: rts
print: lea linebuf+1-base(a6),a0
lea prttxt(pc),a1
bsr.w txttobuf
not.b prtflag-base(a6) ;toggle printer
bra.b verif0
verify: lea linebuf+1-base(a6),a0
lea vfytxt(pc),a1
bsr.w txttobuf
bchg #4,langflg-base(a6) ;toggle verify
verif0: bsr.w doonoff
bsr.w rawline
st d7
rts
setmap: bsr.b swapmap
lea linebuf+1-base(a6),a0
lea smaptxt(pc),a1
bsr.w txttobuf
tst.b keytab+$90-base(a6) ;german keymap?
beq.b isusa
subq.w #3,a0
bsr.w txttobuf
isusa: bsr.w rawline
st d7
rts
swapmap:lea keytab+$0a-base(a6),a0 ;swaps german and usa keymap
eor.l #"0ß'\"~"0-=\",(a0)
eor.w #"tz"~"ty",$14-$0a(a0)
eor.w #"ü+"~"[]",$1a-$0a(a0)
eor.l #"löä#"~["l;'"*256],$28-$0a(a0)
eor.w #"<y"~"z",$30-$0a(a0)
eor.w #"- "~"/ ",$3a-$0a(a0)
eor.w #34*256+"§"~"@#",$62-$0a(a0)
eor.l #"&/()"~"^&*(",$66-$0a(a0)
eor.l #"=?`|"~")_+|",$6a-$0a(a0)
eor.w #"TZ"~"TY",$74-$0a(a0)
eor.w #"Ü*"~"{}",$7a-$0a(a0)
eor.l #"LÖÄ^"~['L:"'*256],$88-$0a(a0) ;$00ece65e
eor.w #">Y"~"Z",$90-$0a(a0)
eor.l #";:_ "~"<>? ",$98-$0a(a0)
rts
cls: st d7
bra.w clrhome
bplist: lea brkpadr-base(a6),a2
moveq #brkpnum-1,d2
bplst0: move.l (a2)+,d0
beq.b bplst1
move.l d0,a5
bsr.w disasm
bsr.w rawline
bplst1: dbf d2,bplst0
st d7
bplstq: rts
bpset: moveq #0,d2
subq.b #1,d3
bne.w bpsetq
move.l para-base(a6),d3
beq.w bpsetq
btst d2,d3 ;even?
bne.b bpsetq
lea brkpadr-base(a6),a2
moveq #brkpnum-1,d1
bpset0: tst.l (a2)
bne.b bpset2
move.l a2,d2
bpset2: cmp.l (a2)+,d3
dbeq d1,bpset0
lea bpextxt(pc),a3
beq.b bpset1
lea bpfltxt(pc),a3
tst.l d2
beq.b bpset1
lea mmuoffb(pc),a0
bsr.w mmujob ;->d0:oldmmutc
move.l d0,-(a7)
move.l d3,a0
move.l (a0),d1
move.l #"BeEr",(a0)
bsr.w pushcache
move.l (a0),a1
move.l d1,(a0)
lea bpnoram(pc),a3
cmp.l #"BeEr",a1
bne.b bpset3
move.l d2,a2
move.l d3,(a2)
lea bpstxt(pc),a3
bpset3: move.l (a7)+,d0
lea mmurest(pc),a0 ;d0:mmutc to use
bsr.w mmujob
bpset1: lea linebuf+1-base(a6),a0
lea brktxt(pc),a1
bsr.w txttobuf
move.l a3,a1
bsr.w txttobuf
bsr.w rawline
st d7
bpsetq: rts
bpclr: moveq #0,d2
subq.b #1,d3
bne.b bpsetq
lea brkpadr-base(a6),a2
moveq #brkpnum-1,d1
move.l para-base(a6),d0
beq.b bpclr1
btst d2,d0 ;even?
bne.b bpsetq
bpclr0: cmp.l (a2)+,d0
dbeq d1,bpclr0
lea bpnftxt(pc),a3
bne.b bpset1
clr.l -(a2)
lea bprmtxt(pc),a3
bra.b bpset1
bpclr1: clr.l (a2)+ ;clear all bp
dbf d1,bpclr1
lea bpbctxt(pc),a3
bra.b bpset1
spc: moveq #0,d3
bsr.w csup
move.b lastcmd-base(a6),d0
cmp.b #"a",d0 ;these can be repeated
beq.w a
cmp.b #"m",d0
beq.w m
cmp.b #"d",d0
beq.w d
cmp.b #"u",d0
beq.w d6502
cmp.b #"V",d0
beq.w copper
cmp.w #"bi",lastcmd-base(a6)
bne.b nobind
move.w lastcmd+2-base(a6),d0
cmp.w #"nw",d0
beq.b binw
cmp.w #"nl",d0
beq.b binl
cmp.w #"nt",d0
beq.b bint
cmp.w #"nq",d0
beq.b binq
sf d0
cmp.w #"n"<<8,d0
beq.b binb
nobind: bsr.w csdown
st d7
rts
binq: moveq #"{",d2
bra.b binit
bint: moveq #"}",d2
bra.b binit
binl: moveq #"[",d2
bra.b binit
binw: moveq #"]",d2
bra.b binit
binb: moveq #"|",d2
binit: cmp.b #2,d3
bgt.l bdq
bsr.b binsize
moveq #16-1,d5
bd1: bsr.b bincore
bsr.w stopit
beq.b bd3
cmp.b #2,d3
bne.b bd2
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.w bd1
bra.b bd3
bd2: dbf d5,bd1
bd3: st d7
bdq: rts
binsize:moveq #8,d1
cmp.b #"{",d2
beq.b binok
moveq #6,d1
cmp.b #"}",d2
beq.b binok
moveq #4,d1
cmp.b #"[",d2
beq.b binok
moveq #2,d1
cmp.b #"]",d2
beq.b binok
moveq #1,d1
cmp.b #"|",d2
beq.b binok
moveq #0,d1
binok: tst.l d1
rts
bincore:movem.l d1-d4,-(a7)
lea linebuf-base(a6),a0
move.b #">",(a0)+
move.b d2,(a0)+
move.l para-base(a6),d0
bsr longtoa
addq.w #1,a0
move.l para-base(a6),a1
move.w d1,d4
subq.w #1,d4
bd4: move.b (a1)+,d3
bsr bytetob
subq.w #1,a0
dbf d4,bd4
move.l a1,para-base(a6)
bsr rawline
movem.l (a7)+,d1-d4
rts
edbinq: moveq #8+1,d6
bra.b edbin
edbint: moveq #6+1,d6
bra.b edbin
edbinl: moveq #4+1,d6
bra.b edbin
edbinw: moveq #2+1,d6
bra.b edbin
edbinb: moveq #1+1,d6
edbin: cmp.l d3,d6
bne.b edbq
move.b 1(a5),d2 ;bincore
subq.w #2,d6
move.w d6,d0
lea para+4-base(a6),a0
edb1: move.l (a0)+,d1
and.l #$eeeeeeee,d1
bne.b edbq
dbf d0,edb1
move.w d6,d0
lea para-base(a6),a0
move.l (a0)+,a1
edb0: move.l (a0)+,d3
moveq #8-1,d5
edb2: add.b d1,d1
rol.l #4,d3
btst #0,d3
beq.b edb3
addq.b #1,d1
edb3: dbf d5,edb2
move.b d1,(a1)+
dbf d0,edb0
bsr.w csup
move.w d6,d1
addq.w #1,d1
bsr.w bincore
st d7
edbq: rts
m: cmp.b #2,d3
bgt.l mq
moveq #16-1,d5
m1: bsr.b mcore
bsr.w stopit
beq.b m3
cmp.b #2,d3
bne.b m2
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.w m1
bra.b m3
m2: dbf d5,m1
m3: st d7
mq: rts
mcore: lea linebuf-base(a6),a0
move.w #">:",(a0)+
move.l para-base(a6),d0
bsr longtoa
addq.w #1,a0
moveq #8-1,d2
move.l para-base(a6),a1
m0: move.b #" ",(a0)+
move.b (a1)+,d0
lsl.w #8,d0
move.b (a1)+,d0
bsr wordtoa
dbf d2,m0
addq.w #2,a0
move.b #"'",(a0)+
move.l para-base(a6),a1
moveq #".",d2
moveq #16-1,d1
m4: move.b (a1)+,d0
bmi.b m5
cmp.b #" ",d0
blt.b m5
move.b d0,(a0)+ ;$20-$7f
dbf d1,m4
bra.b m6
m5: move.b d2,(a0)+ ;$00-$1f,$80-$ff
dbf d1,m4
m6: move.b #"'",(a0)+
moveq #$10,d0
add.l d0,para-base(a6)
bra rawline
mm: cmp.b #9,d3
bne.w mm1
lea para-base(a6),a0
move.l (a0),a1
cmp.b #54,d6 ;asc edit ?
bge.b mm2
addq.w #6,a0
moveq #8-1,d0
mm0: move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
addq.w #2,a0
dbf d0,mm0
mm1: clr.w d5
clr.b d3
bsr.w csup
bra.w m1
mm2: moveq #16-1,d0
moveq #54,d6 ;beg asc edit
mm3: move.b (a5,d6.w),d1
cmp.b #".",d1 ;skip it
beq.b mm4
move.b d1,(a1)
mm4: addq.w #1,d6
addq.w #1,a1
dbf d0,mm3
bra.b mm1
a: cmp.b #2,d3
bgt.l adq
moveq #16-1,d5
ad1: bsr.b acore
bsr.w stopit
beq.b ad3
cmp.b #2,d3
bne.b ad2
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.w ad1
bra.b ad3
ad2: dbf d5,ad1
ad3: st d7
adq: rts
acore: lea linebuf-base(a6),a0
move.w #">;",(a0)+
move.l para-base(a6),d0
bsr longtoa
addq.w #2,a0
move.b #"'",(a0)+
move.l para-base(a6),a1
moveq #".",d2
moveq #64-1,d1
ad4: move.b (a1)+,d0
bmi.b ada0
cmp.b #" ",d0
blt.b ada0
move.b d0,(a0)+ ;$20-$7f
dbf d1,ad4
bra.b ada1
ada0: move.b d2,(a0)+ ;$00-$1f,$80-$ff
dbf d1,ad4
ada1: move.b #"'",(a0)+
moveq #$40,d0
add.l d0,para-base(a6)
bra rawline
aa: cmp.b #1,d3
bne.b aaq
cmp.b #"'",12(a5)
bne.b aaq
move.l para-base(a6),a1
moveq #64-1,d0
moveq #13,d6 ;beg asc edit
aa0: move.b (a5,d6.w),d1
cmp.b #".",d1 ;skip it
beq.b aa1
move.b d1,(a1)
aa1: addq.w #1,d6
addq.w #1,a1
dbf d0,aa0
st d7
aaq: rts
xclr: move.w #$7fff,$dff096 ;no dma
move #$2700,sr ;no int
moveq #-1,d0 ;fill value
sub.l a4,a4 ;noguru&clrmem
move.l himem-base(a6),a0 ;end of chipmem
lea xclr-base(a6),a1
cmp.l a0,a1 ;prog within fillarea?
bhi.b fillchp
lea endclr(pc),a3
fillch2:move.l d0,(a3)+
cmp.l a3,a0
bhi.b fillch2
move.l a1,a0
fillchp:move.l d0,(a4)+
cmpa.l a4,a0
bhi.b fillchp
nop ;longword aligned
doreset:lea $40000,a7 ;code in ramcard
lea $fc00fe,a4 ;kick 1.2/1.3 resetentry
cmp.l #$80000,$ffffec
bne.b onelong
lea $400.w,a7
lea $f80000,a0
move.l a0,a4
moveq #-1,d1
moveq #1,d2
moveq #0,d5
dores0: add.l (a0)+,d5
bcc.b dores1
addq.l #1,d5
dores1: dbf d1,dores0
dbf d2,dores0
dores2: cmp.l #$4ee90002,(a4)+ ;jmp 2(a1)
beq.b onelong
subq.w #2,a4
bra.b dores2
;lea $f8010c,a4 ;kick 2.0 resetentry
onelong:reset ;longword aligned if LoadSeg, module: don't care
jmp (a4) ;reset, no moduletest
endclr:
bpl: moveq #0,d0
cmp.b #1,d3
bhi.w bplq
bne.b bpl1
move.l para-base(a6),d0
bpl1: move.l d0,msycnt-base(a6)
move.w #$0020,$dff096
moveq #0,d0
move.l d0,$dff144
bpl0:
lea linebuf+1-base(a6),a0
lea bpltxt(pc),a1
bsr.w txttobuf
bpl9: move.l msycnt-base(a6),d0
bclr #0,d0
move.l d0,a4
moveq #0,d1
move.b rows-base(a6),d1
mulu #xchars*8,d1
bpl3: lea $c80000,a1
sub.l d1,a1
cmp.l a1,d0
bls.b bpl8
lea $f00000,a5
cmp.l a5,d0
bcc.b bpl8
move.l a1,d2
add.l a5,d2
lsr.l #1,d2
cmp.l d2,d0
bls.b bpl14 ;lower or upper memblock?
move.l a5,a1
bpl14: move.l a1,msycnt-base(a6)
bra.b bpl9
bpl8: add.l d0,d1
bsr.w twolong_
move.l scradr-base(a6),a5
lea font-[32*8]-base(a6),a1 ;start=spc
moveq #8-1,d2
bpl11: moveq #25-1,d1
lea linebuf-base(a6),a0
lea [80-25](a5),a5
bpl10: moveq #0,d0
move.b (a0)+,d0
lsl.w #3,d0
move.b (a1,d0.w),(a5)+
dbf d1,bpl10
addq.w #1,a1
dbf d2,bpl11
move.l scradr-base(a6),a5
moveq #8-1,d2
bpl7: moveq #80-25-1,d1
moveq #0,d0
move.b rowsm1-base(a6),d0
lsl.w #4,d0
subq.w #1,d0
bpl6: move.b (a4)+,(a5)+
dbf d1,bpl6
lea 25(a4),a4
lea 25(a5),a5
dbf d2,bpl7
bpl2: movem.l (a4)+,d1-d7/a0-a2
movem.l d1-d7/a0-a2,(a5)
lea 40(a5),a5
dbf d0,bpl2
cmp.b #$1b,ascii-base(a6)
bne.w bpl0
bsr.w clrhome
st d7
bplq: rts
work: cmp.b #1,d3 ;we change the workspace, restore the old
bhi.w woq
tst.b d3
beq.w wo0
move.l para-base(a6),d0
lea $100.w,a0
cmp.l a0,d0
bcs.w woq
move.l himem-base(a6),d1
sub.l wrksize-base(a6),d1
cmp.l d1,d0
bhi.w woq
btst #0,d0
bne.w woq
move.w #$0180,$dff096 ;cop/bpl off
move.w #$4000,$dff09a ;ughh, celtic frost
tst.l bufadr-base(a6)
beq.b calchip
move.l scradr-base(a6),a1 ;old
move.l d0,a2 ;new
move.l bufadr-base(a6),a3 ;buf
lea $dff006,a4
lea $017a(a4),a5 ;$dff180
move.l wrksize-base(a6),d2
cmp.l a1,a2
beq.b calchip
bhi.b cpyrev ;we go up or down?
swapup: move.b (a2)+,d1 ;new
move.b (a3),(a1)+ ;buf to old
move.b d1,(a3)+ ;new to buf
move.b (a4),(a5)
subq.l #1,d2
bne.b swapup
bra.b calchip
cpyrev: add.l d2,a1 ;old
add.l d2,a2 ;new
add.l d2,a3 ;buf
swapdwn:move.b -(a2),d1 ;new
move.b -(a3),-(a1) ;buf to old
move.b d1,(a3) ;new to buf
move.b (a4),(a5)
subq.l #1,d2
bne.b swapdwn
calchip:move.l d0,a0
move.l a0,scradr-base(a6)
add.l scrsize-base(a6),a0
move.l a0,dskadr-base(a6)
lea dsksize(a0),a0
move.l a0,spradr-base(a6)
lea sprsize(a0),a0
move.l a0,copadr-base(a6)
sf prtflag-base(a6) ;printer off
bsr.w rawline
bsr.w cursoff
bsr.w clrscr
sf col-base(a6)
tst.b pic-base(a6)
beq.b nopic
sf pic-base(a6)
lea dostrkbuf-base(a6),a1 ;temp picsource
move.l scradr-base(a6),a2
lea 20(a2),a2 ;center pic
moveq #64-1,d0 ;hight
copylog:moveq #40-1,d1 ;width
copylin:move.b (a1)+,(a2)+
dbf d1,copylin
lea 40(a2),a2 ;modulo
dbf d0,copylog
move.b #9,row-base(a6)
tst.b keytab+$90-base(a6) ;0:american
bne.b noswap
bsr.w swapmap
noswap: btst #0,langflg-base(a6) ;0:german
beq.b keygerm
bsr.w swapmap
keygerm:
nopic:
lea linebuf+1-base(a6),a0
lea initxt(pc),a1
lea txttobuf(pc),a3
jsr (a3)
moveq #"0",d0
add.b cpu-base(a6),d0
move.b d0,(a0)+
jsr (a3)
move.l a1,-(a7)
lea mmutxt(pc),a1
move.b mmu-base(a6),d0
bsr tsstate
move.b #",",(a0)+
lea fputxt(pc),a1
move.b fpu-base(a6),d0
bsr tsstate
move.b #",",(a0)+
lea chiptxt-4(pc),a1
move.w himem-base(a6),d0 ;$8,$10,$18,$20
lsr.w #1,d0
add.w d0,a1
jsr (a3)
move.l (a7)+,a1
jsr (a3)
move.l a1,-(a7)
lea muttxt(pc),a1
tst.b frzflag-base(a6)
beq.b mutil1
lea frztxt(pc),a1
mutil1: jsr (a3) ;xx mode
move.l (a7)+,a1
jsr (a3)
bsr rawline
bsr.w wo0
move.b #3,drvbit-base(a6)
bsr.w drvinit ;set df0:
bsr csdown
bra.w warm
wo0: lea linebuf+1-base(a6),a0
lea worktxt(pc),a1
bsr.w txttobuf
lea abstxt(pc),a1 ;Workspace(ABS)
tst.b abswork-base(a6)
bne.b wo1
addq.w #systxt-abstxt,a1;Workspace(SYS)
wo1: bsr.w txttobuf
move.l scradr-base(a6),d0
move.l d0,d1
add.l wrksize-base(a6),d1
bsr.w twoadr_ ;chipmem use 24 bit
lea codetxt(pc),a1
bsr.w txttobuf
lea run(pc),a1
move.l a1,d0
lea progend-$4000-base(a6),a1
lea $4000(a1),a1
move.l a1,d1
bsr.w twolong_
lea buftxt(pc),a1 ;no Buffer
bsr.w txttobuf
lea navltxt(pc),a1
move.l bufadr-base(a6),d0
beq.b wo2
lea abstxt(pc),a1 ;Buffer(ABS)
tst.b absbuf-base(a6)
bne.b wo2
addq.w #systxt-abstxt,a1;Buffer(SYS)
wo2: bsr.w txttobuf
move.l d0,d1
beq.b nobufm
add.l wrksize-base(a6),d1
bsr.w twolong_
nobufm: sf col-base(a6)
bsr.w rawline
st d7
woq: rts
d: cmp.b #2,d3
bhi.b dq
moveq #16-1,d5
dd0: move.l para-base(a6),d0
btst #0,d0
bne.b dq
move.l d0,a5
bsr.w disasm
bsr hlbrkpt
bsr.w rawline
bsr.b hdlline
move.l a5,para-base(a6)
bsr.w stopit
beq.b dd3
cmp.b #2,d3
bne.b dd2
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.w dd0
bra.b dd3
dd2: dbf d5,dd0
dd3: st d7
dq: rts
hdltest:move.l para-base(a6),a0
move.w (a0),d0
sub.w #$4e73,d0 ;$4e73:rte
beq.b isjmp
subq.w #1,d0 ;$4e74:rtd
beq.b isjmp
subq.w #1,d0 ;$4e75:rts
beq.b isjmp
subq.w #2,d0 ;$4e77:rtr
beq.b isjmp
moveq #-16,d0 ;$fff0
and.w (a0),d0
cmp.w #$06c0,d0 ;rtm
beq.b isjmp
moveq #-64,d0 ;$ffc0
and.w (a0),d0
cmp.w #$4ec0,d0 ;jmp
beq.b isjmp
cmp.b #$60,(a0) ;bra.x
isjmp: rts
hdlline:bsr.b hdltest
bne.b nojmp
move.l a0,d0
lea linebuf-base(a6),a0
move.w #">,",(a0)+
bsr.w longtoa
addq.w #1,a0
moveq #48,d0
linelp: move.b #"-",(a0)+
dbf d0,linelp
bsr.w rawline
nojmp: rts
ds: moveq #0,d0
bra.b dchg
dm: moveq #1,d0
bra.b dchg
dv: moveq #2,d0
dchg: bchg d0,dissign-base(a6)
st d7
rts
s67 =$0000
s6 =$0100
s8 =$0200
stab=$0300
snop=$0400
s9a_=$0500 ;68020 cas
s9a =$0600 ;68020 chk2,cmp2
nass: tst.b d3
beq.b nassq
move.l para-base(a6),d0
btst #0,d0
bne.b nassq
lea linebuf-base(a6),a0
move.w #">,",(a0)+
bsr.w longtoa
bra.w newdis
nassq: rts
n: tst.b d3
beq.b nassq
move.l a5,a0
addq.w #2,a0 ;skip >,
bsr.w skipspc ;check obsolete
nn0: cmp.l lineend-base(a6),a0
bhi.b nassq
cmp.b #" ",(a0)+ ;search spc
bne.b nn0
nn1: cmp.l lineend-base(a6),a0
bhi.w endn
cmp.b #" ",(a0) ;skip spc
bne.b nn1_
addq.w #1,a0
bra.b nn1
nn1_: move.l a0,a5 ;cmdadr!
nn3: cmp.l lineend-base(a6),a0
bhi.b nn4
move.b (a0)+,d0
cmp.b #"Z",d0
bhi.b nn3
cmp.b #"A",d0
bcs.b nn3
bset #5,d0
move.b d0,-1(a0)
bra.b nn3
nn4:
lea instr(pc),a4
nn7: btst #0,para+3-base(a6)
bne.b nassq
cmp.b #"-",(a5) ;line?
beq.w ignline
move.l a5,a0
lea 6(a4),a1
nn6: move.b (a1),d0
bclr #7,d0
cmp.b (a0)+,d0
bne.w nn5
btst #7,(a1)+
beq.b nn6
lea op68000-2-base(a6),a1
clr.l lginstr-base(a6) ;0:2byte instr,2:4byte (mulx.l...)
clr.w (a1)+ ;oplen!
clr.w (a1)
move.w 4(a4),d0 ;info
and.w #$700,d0
cmp.w #snop,d0
beq.w nnsnop
cmp.w #stab,d0
;bne.b nnstab
beq.w nn9
nnstab: cmp.b #".",(a0)+
bne.w nn5
cmp.w #s67,d0
bne.b nns67
sf imsize-base(a6) ;%00
cmp.b #"b",(a0)+ ;op68000:0
beq.w nn9
addq.b #1,imsize-base(a6) ;%01
move.w #%01000000,(a1)
cmp.b #"w",-1(a0)
beq.w nn9
addq.b #1,imsize-base(a6) ;%10
move.w #%10000000,(a1)
cmp.b #"l",-1(a0)
beq.w nn9
nns67: cmp.w #s9a_,d0 ;68020 cas
bne.b nns9a_
sf imsize-base(a6) ;%00
move.w #%01000000000,(a1) ;68020
cmp.b #"b",(a0)+ ;op68000:0
beq.w nn9
addq.b #1,imsize-base(a6) ;%01
move.w #%10000000000,(a1)
cmp.b #"w",-1(a0)
beq.w nn9
addq.b #1,imsize-base(a6) ;%10
move.w #%11000000000,(a1)
cmp.b #"l",-1(a0)
beq.b nn9
nns9a_: cmp.w #s9a,d0 ;68020 chk2,cmp2
bne.b nns9a
sf imsize-base(a6) ;%00
cmp.b #"b",(a0)+ ;op68000:0
beq.b nn9
addq.b #1,imsize-base(a6) ;%01
move.w #%01000000000,(a1)
cmp.b #"w",-1(a0)
beq.b nn9
addq.b #1,imsize-base(a6) ;%10
move.w #%10000000000,(a1)
cmp.b #"l",-1(a0)
beq.b nn9
nns9a: cmp.w #s6,d0
bne.b nns6
move.b #%01,imsize-base(a6)
cmp.b #"w",(a0)+
beq.b nn9
addq.b #1,imsize-base(a6) ;%10
move.w #%1000000,(a1)
cmp.b #"l",-1(a0)
beq.b nn9
nns6: cmp.w #s8,d0
bne.b nn5 ;ill instrtab or cmd
move.b #%01,imsize-base(a6)
cmp.b #"w",(a0)+
beq.b nn9
addq.b #1,imsize-base(a6) ;%10
move.w #%100000000,(a1)
cmp.b #"l",-1(a0)
bne.b nn5
nn9: cmp.b #" ",(a0)
bne.b nn5
nn10: addq.w #1,a0
cmp.l lineend-base(a6),a0
bhi.b nn5
cmp.b #" ",(a0)
beq.b nn10
nnsnop: st d7
move.l a0,a3
move.w 4(a4),d0
ext.w d0 ;no a4,a5
add.w d0,d0
lea assoffs(pc),a0
move.w (a0,d0.w),d0
lea assubs(pc),a0
jsr (a0,d0.w) ;a4:instrtabentry,a5:cmdtxt,a3:cnttxt
;a6:notmodify!!
tst.b d7
bne.b nn8
nn5: sf d7
tst.l (a4)
beq.b nretry ;unknown
lea 14(a4),a4
bra.w nn7
nn8:
lea op68000-2-base(a6),a0
move.w (a0)+,d0 ;oplen!
move.l para-base(a6),a1
move.l a1,a5
move.w (a0),d1
or.w 2(a4),d1
move.w d1,(a0)
nnmem: move.w (a0)+,(a1)+
dbf d0,nnmem
bsr.w csup
bsr.w disasm
bsr.w rawline
bsr hdlline
move.l a5,para-base(a6)
bsr.w disasm
newdis: bsr.w rawline
nretry: bsr.w csup
ignline:move.b #11,col-base(a6)
endn: st d7
nq: rts
accu: lea accu8-base(a6),a2
bra.b acc0
index: lea idxy8-base(a6),a2
acc0: subq.l #1,d3
bne.b indexq
moveq #$16,d0
sub.l para-base(a6),d0
beq.b ind16
cmp.b #$16-8,d0
bne.b indexq
st d0
ind16: move.b d0,(a2)
sf autosel-base(a6)
st d7
indexq: rts
auto: st autosel-base(a6)
sf accu8-base(a6)
sf idxy8-base(a6)
st d7
rts
d6502: cmp.b #2,d3
bhi.b d65q
moveq #16-1,d5
d650: move.l para-base(a6),d0
move.l d0,a5
bsr.w dis6502
move.l a5,para-base(a6)
bsr.w rawline
bsr.w stopit
beq.b d653
cmp.b #2,d3
bne.b d652
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.w d650
bra.b d653
d652: dbf d5,d650
d653: st d7
d65q: rts
nass65: subq.l #1,d3
bne.b nass65q
move.l para-base(a6),d0
lea linebuf-base(a6),a0
move.w #">_",(a0)+
bsr.w longtoa
bra.w n65new
nass65q:rts
n6502: tst.b d3
beq.w n65q
move.l a5,a0
moveq #xchars-1,d1
n65n3: move.b (a0)+,d0
cmp.b #"Z",d0
bhi.b n65n4
cmp.b #"A",d0
bcs.b n65n4
bset #5,d0
move.b d0,-1(a0)
n65n4: dbf d1,n65n3
lea txt6502(pc),a1
lea 25(a5),a0
moveq #0,d5
n655: moveq #3-1,d0
n651: move.b (a0,d0.w),d1
bset #5,d1
cmp.b (a1,d0.w),d1
dbne d0,n651
beq.b n652
addq.w #3,a1
tst.b (a1)
bmi.w n65rtr
addq.w #1,d5
bra.b n655
n652: lea tab6502(pc),a1
moveq #-1,d3
n654: addq.l #1,d3
cmp.b (a1)+,d5
beq.b n653
addq.w #1,a1
tst.b (a1)
bmi.w n65rtr
bra.b n654
n653:
lea 3(a0),a3
n65n1: cmp.l lineend-base(a6),a3
bhi.w n65n1_
cmp.b #" ",(a3) ;skip spc
bne.b n65n1_
addq.w #1,a3
bra.b n65n1
n65n1_:
moveq #0,d0
move.b (a1)+,d0
add.w d0,d0
move.w n65mode(pc,d0.w),d0
st d7
moveq #1,d4
move.l a3,-(a7)
jsr n65subs(pc,d0.w)
cmp.l (a7)+,a3
beq.b n654
tst.b d7
beq.b n654
move.l para-base(a6),a5
move.b d3,(a5)
subq.b #1,d4
beq.b n656
move.b d0,1(a5)
subq.b #1,d4
beq.b n656
move.b d1,2(a5)
subq.b #1,d4
beq.b n656
move.b d2,3(a5)
n656:
bsr.w csup
bsr.w dis6502
move.l a5,para-base(a6)
bsr.w rawline
bsr.w dis6502
n65new: bsr.w rawline
n65rtr: bsr.w csup
move.b #25,col-base(a6)
st d7
n65q: rts
n65subs:
n65mode:dc.w n65nop-n65subs ;0
dc.w n65imi-n65subs ;1
dc.w n65word-n65subs ;2
dc.w n65byte-n65subs ;3
dc.w n65acu-n65subs ;4
dc.w n65zpix-n65subs ;5
dc.w n65zpiy-n65subs ;6
dc.w n65zpx-n65subs ;7
dc.w n65adrx-n65subs ;8
dc.w n65adry-n65subs ;9
dc.w n65zpy-n65subs ;10
dc.w n65jmpi-n65subs ;11
dc.w n65brel-n65subs ;12
dc.w n65dummy-n65subs ;13
dc.w n65zpl-n65subs ;14
dc.w n65zply-n65subs ;15
dc.w n65zpi-n65subs ;16
dc.w n65srel-n65subs ;17
dc.w n65sriy-n65subs ;18
dc.w n65adlg-n65subs ;19
dc.w n65adlx-n65subs ;20
dc.w n65brlg-n65subs ;21
dc.w n65jpix-n65subs ;22
dc.w n65imac-n65subs ;23
dc.w n65imxy-n65subs ;24
n65imxy:tst.b idxy8-base(a6)
bra.b n65im
n65imac:tst.b accu8-base(a6)
n65im: beq.b n65imw
n65imi: cmp.b #"#",(a3)+
bne.b n65fail
bra.b n65byte
n65imw: cmp.b #"#",(a3)+
bne.w fail
n65word:bsr.b n65adr
bra.b n65spc
;n65db: bsr.b n65byte ;dc.b changed to wdm instruction
; moveq #1,d4
; move.b d0,d3
; rts
n65byte:bsr.b n65zp
n65spc: cmp.b #" ",(a3)+
bne.b n65fail
n65dummy:rts
n65zp: moveq #2,d4
cmp.b #"$",(a3)
beq.w atobyte_
bra.w atodnib
n65acu: cmp.b #"a",(a3)+
beq.b n65nop
n65fail:sf d7
n65nop: addq.w #1,a3
rts
n65zpix:cmp.b #"(",(a3)+
bne.b n65fail
bsr.b n65zp
bsr.b n65x
n65brac:cmp.b #")",(a3)+
bne.b n65fail
rts
n65zpi: pea n65spc(pc)
n65zi: cmp.b #"(",(a3)+
bne.b n65fail
bsr.b n65zp
bra.b n65brac
n65zpiy:bsr.b n65zi
n65y: cmp.b #",",(a3)+
bne.b n65fail
cmp.b #"y",(a3)+
bne.b n65fail
rts
n65zpx: bsr.b n65zp
bra.b n65x
n65adr: cmp.b #"$",(a3)
beq.b n65adr0
bsr.w atodnib
bra.b n65adr1
n65adr0:bsr.w atoword_
n65adr1:moveq #3,d4
move.w d0,d1
lsr.w #8,d1
rts
n65adrx:bsr.b n65adr
n65x: cmp.b #",",(a3)+
bne.b n65fail
cmp.b #"x",(a3)+
bne.b n65fail
rts
n65adry:bsr.b n65adr
bra.b n65y
n65zpy: bsr.b n65zp
bra.b n65y
n65jpix:cmp.b #"(",(a3)+
bne.b n65fail
bsr.b n65adr
bsr.b n65x
bra.b n65brac
n65jmpi:cmp.b #"(",(a3)+
bne.b n65fail
bsr.b n65adr
bra.b n65brac
n65brlg:bsr.b n65bre
sub.l para-base(a6),d0
subq.l #3,d0
move.l #$7fff,d1
cmp.l d1,d0
bls.b n65adr1
not.l d1
cmp.l d0,d1
bls.b n65adr1
bra.b n65fai2
n65bre: cmp.b #"$",(a3)
beq.w atolong_
bra.w atodnib
n65brel:moveq #2,d4
bsr.b n65bre
sub.l para-base(a6),d0
subq.l #2,d0
moveq #127,d1
cmp.l d1,d0
bls.b n65bre2
moveq #-128,d1
cmp.l d0,d1
bls.b n65bre2
n65fai2:sf d7
n65bre2:rts
n65zpl: pea n65spc(pc)
n65zlg: cmp.b #"[",(a3)+
bne.b n65fai2
bsr.w n65zp
cmp.b #"]",(a3)+
bne.b n65fai2
rts
n65zply:bsr.b n65zlg
bra.w n65y
n65srel:pea n65spc(pc)
n65sr: bsr.w n65zp
cmp.b #",",(a3)+
bne.b n65fai2
cmp.b #"s",(a3)+
bne.b n65fai2
rts
n65sriy:cmp.b #"(",(a3)+
bne.b n65fai2
bsr.b n65sr
bsr.w n65brac
bra.w n65y
n65adlg:pea n65spc(pc)
n65adl: cmp.b #"$",(a3)
beq.b n65adl0
bsr.w atodnib
bra.b n65adl1
n65adl0:bsr.w atolong_
n65adl1:moveq #4,d4
move.l d0,d1
lsr.l #8,d1
move.l d0,d2
swap d2
cmp.w #$ff,d2
bhi.b n65fai2
rts
n65adlx:bsr.b n65adl
bra.w n65x
c: cmp.b #3,d3
bne.b cq
move.l para-base(a6),a1
move.l para+4-base(a6),a2
move.l para+8-base(a6),a3
lea linebuf+1-base(a6),a0
lea linebuf+74-base(a6),a4
c0: move.b (a1)+,d0
cmp.b (a3)+,d0
beq.b c1
move.l a1,para-base(a6)
move.l a1,d6
bsr bufaddr
move.b outmode-base(a6),d0
beq.b ctable
movem.l a0-a2,-(a7)
pea ccont(pc)
subq.b #1,d0
beq mcore
bra acore
ccont: movem.l (a7)+,a0-a2
bra.b c1
ctable: move.l a1,d0
subq.l #1,d0
bsr.w longtoa_
addq.w #2,a0
cmp.l a4,a0
bcs.b c1
bsr.w rawline
addq.w #1,a0
c1: bsr.w stopit
beq.b c3
cmp.l a2,a1
bcs.b c0
c3: lea linebuf+1-base(a6),a1
cmp.l a1,a0
beq.b c2
bsr.w rawline
c2: st d7
cq: rts
fd: cmp.b #2,d3
bne.b fdq
move.l a2,d0 ;asc?
beq.b fdq
lea dostrkbuf-base(a6),a1 ;to allow scrolling
move.l a1,a0
fd6: move.b (a2)+,d0
cmp.b #34,d0
beq.b fd7
bset #5,d0 ;lowercase
move.b d0,(a0)+
cmp.l lineend-base(a6),a2
bhi.b fdq
bra.b fd6
fd7: move.b #"*",(a0)+
sf (a0)
move.l a1,a2 ;matchstring
fd0: move.l para-base(a6),d0
btst #0,d0
bne.b fdq
move.l d0,d6 ;match
move.l d0,a5
bsr.w disasm
move.l a5,para-base(a6)
lea lineeof-base(a6),a3
moveq #xchars-11-1,d0
moveq #" ",d1
fd4: cmp.b -(a3),d1
dbne d0,fd4 ;set text,0
sf 1(a3)
lea linebuf+11-base(a6),a3 ;disasm text
bsr.b wildcmp
bne.b fd1
bsr bufaddr ;store match address
bsr.w rawline
fd1: bsr.w stopit
beq.b fdab
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.b fd0
fd3: bsr.w clrlbuf
st d7
fdq: rts
fdab: bsr.b fd3
move.l a5,d0
doabort:lea linebuf+1-base(a6),a0
lea abotxt(pc),a1
bsr.w txttobuf
bsr.w longtoa_
bra.w rawline
MAXB = 8
MAXB28 = 128 ;MAXB*2*8
wildcmp:movem.l a2-a4,-(a7)
lea bitmap-base(a6),a4 ;a2:wild,a3:name->d0:0:match,1:nomatch
moveq #0,d2
xwclp: moveq #0,d0
move.b (a2),d1
bne.b xw1
tst.b (a3)
beq.b xwcdone
xw1: cmp.b #"*",d1
bne.b xw10
cmp.w #MAXB,d2
bne.b xw2
moveq #-1,d0 ; error
bra.b xwcdone
xw2: move.w d2,d0 ; back[bi][0] = w i.e. back+bi*8
lsl.w #3,d0 ; back[bi][1] = n
move.l a2,0(a4,d0.w)
addq.w #1,a2
move.l a3,4(a4,d0.w)
addq.w #1,d2
bra.b xwclp
xwgback:subq.w #1,d2
bmi.b xw5
move.w d2,d0
lsl.w #3,d0
move.l 4(a4,d0.w),a0
tst.b (a0)
beq.b xwgback
xw5: tst.w d2
bmi.b xwcret0
move.w d2,d0
lsl.w #3,d0
move.l 0(a4,d0.w),a2
addq.w #1,a2
addq.l #1,4(a4,d0.w)
addq.w #1,d2
move.l 4(a4,d0.w),a3
bra.b xwclp
xw10: cmp.b #"?",d1
bne.b xw20
tst.b (a3)
bne.b xwcbrk
tst.w d2
bne.b xwgback
bra.b xwcret0
xw20: move.b (a3),d0
cmp.b (a2),d0
beq.b xwcbrk
tst.w d2
bne.b xwgback
bra.b xwcret0
xwcbrk: tst.b (a2)+
bne.b xwcb1
subq.w #1,a2
xwcb1: tst.b (a3)+
bne.b xwclp
subq.w #1,a3
bra.w xwclp
xwcret0:moveq #1,d0
xwcdone:movem.l (a7)+,a2-a4
tst.w d0
rts
fmode: subq.l #1,d3
bne.b fmodeq
moveq #2,d1
move.l para-base(a6),d0
cmp.l d1,d0
bhi.b fmodeq
move.b d0,outmode-base(a6)
st d7
fmodeq: rts
f: move.l a2,d0 ;asc ?
beq.b f7
cmp.b #2,d3
bne.w fq
lea para+8-base(a6),a1
moveq #0,d0
moveq #2,d3
f9: move.b (a2)+,d0
cmp.b #34,d0
beq.b f7
move.l d0,(a1)+
addq.w #1,d3
cmp.b #16,d3
bne.b f9
f7: cmp.b #3,d3
blt.l fq
lea para+8-base(a6),a1
lea linebuf-base(a6),a0
move.l #" sea",(a0)+
move.l #"rchi",(a0)+
move.l #"ng f",(a0)+
move.l #"or: ",(a0)+
move.w d3,d2
subq.w #3,d2
f5: move.l (a1)+,d0
bsr.w bytetoa_
move.b #" ",(a0)+
dbf d2,f5
bsr.w rawline
addq.w #1,a0
move.l para-base(a6),a1
move.l para+4-base(a6),a2
move.b para+11-base(a6),d4
f0: cmp.b (a1),d4 ;quickfind
bne.b f6
move.l a1,a4
lea para+11-base(a6),a3
move.w d3,d2
subq.w #3,d2
f4: move.b (a4)+,d0
cmp.b (a3),d0
bne.b f1
addq.w #4,a3
dbf d2,f4
move.l a1,para-base(a6)
move.l a1,d6
bsr bufaddr
move.b outmode-base(a6),d0
beq.b ftable
movem.l a0-a2,-(a7)
pea fcont(pc)
subq.b #1,d0
beq mcore
bra acore
fcont: movem.l (a7)+,a0-a2
bra.b f1
ftable: move.l a1,d0
bsr.w longtoa_
addq.w #2,a0
lea linebuf+74-base(a6),a4
cmp.l a4,a0
bcs.b f1
bsr.w rawline
addq.w #1,a0
f1: bsr.w stopit
beq.b f3
f6: addq.w #1,a1
cmp.l a2,a1
bcs.b f0
f3: lea linebuf+1-base(a6),a1
cmp.l a1,a0
beq.b f2
bsr.w rawline
f2: st d7
fq: rts
frel: cmp.b #1,d3
bne.w frq
move.b (a0)+,d0
lsl.w #8,d0
move.b (a0),d0
or.w #$2020,d0 ;lowercase
cmp.w #"pc",d0
seq d4
moveq #-2,d0
and.l para-base(a6),d0
move.l d0,a1
sub.l a2,a2
cmp.l #$8000,d0
bls.b fr9
lea -$8000(a1),a2 ;min
fr9: lea $7ffe(a1),a4 ;max
fr1: tst.b d4
bne.b fr4
move.w (a2),d1
and.w #%1111000011111000,d1
cmp.w #%0101000011001000,d1 ;dbxx
beq.b fr5
move.b (a2),d1
and.w #%11110000,d1
cmp.w #%01100000,d1 ;bxx.x
bne.b fr0
move.b 1(a2),d1
ext.w d1
beq.b fr5 ;bxx.w
bra.b fr6 ;bxx.s
fr4:
moveq #%111111,d1
and.w (a2),d1 ;adr(pc)
cmp.w #%111010,d1
bne.b fr0
fr5: move.w 2(a2),d1
fr6: lea 2(a2,d1.w),a3
cmp.l para-base(a6),a3
bne.b fr0
move.l a2,d6
bsr bufaddr
move.l a2,a5
bsr.w disasm
bsr.w rawline
fr0: bsr.w stopit
beq.b fr8
addq.w #2,a2
cmp.l a2,a4
bcc.b fr1
fr8: st d7
frq: rts
time: bsr.w getclok
lea linebuf+1-base(a6),a0
move.l days-base(a6),d0
bsr.w todate
lea linebuf+25-base(a6),a0
move.l mins-base(a6),d0
divu #60,d0
bsr.w bytetod
move.b #":",(a0)+
swap d0
bsr.w bytetod
move.b #":",(a0)+
move.l ticks-base(a6),d0
divu #50,d0
bsr.w bytetod
lea linebuf+1-base(a6),a0
bsr.w rawline
st d7
timeq: rts
t: cmp.b #3,d3
bne.b tq
move.l para-base(a6),a0
move.l para+4-base(a6),a1
cmp.l a1,a0
bcc.b tq
move.l para+8-base(a6),a2
cmp.l a0,a2
bcc.b t0
t1: move.b (a0)+,(a2)+
cmp.l a1,a0
bcs.b t1
bra.b t2
t0: add.l a1,a2
sub.l a0,a2
t3: move.b -(a1),-(a2)
cmp.l a0,a1
bne.b t3 ;t 0 x x
t2: st d7
tq: rts
sysinfo:cmp.b #1,d3
bhi.w sysq
btst #0,4+3.w
bne.w syscorr
tst.l 4.w
beq.w syscorr
move.l 4.w,a4
lea memtxt(pc),a1
lea $142(a4),a3 ;0:memlist
move.l para-base(a6),d0
beq.b dolist
lea rsrctxt(pc),a1
lea $150(a4),a3 ;1:resourcelist
subq.l #1,d0
beq.b dolist
lea exectxt(pc),a1
lea $15e(a4),a3 ;2:devicelist
subq.l #1,d0
beq.b dolist
lea intrtxt(pc),a1
lea $16c(a4),a3 ;3:intlist
subq.l #1,d0
beq.b dolist
lea exectxt(pc),a1
lea $17a(a4),a3 ;4:liblist
subq.l #1,d0
beq.b dolist
lea porttxt(pc),a1
lea $188(a4),a3 ;5:portlist
subq.l #1,d0
beq.b dolist
lea tasktxt(pc),a1
lea $196(a4),a3 ;6:taskready
subq.l #1,d0
beq.b dolist
lea tasktxt(pc),a1
lea $1a4(a4),a3 ;7:taskwaiting
subq.l #1,d0
beq.b dolist
lea tasktxt(pc),a1
lea $114(a4),a3 ;8:thistask
subq.l #1,d0
beq.b dolist
lea rsndtxt(pc),a1
lea $12c(a4),a3 ;9:resident list
subq.l #1,d0
beq.w dorslst
bra.w sysq
dolist: bsr.w msgout
move.l (a3)+,a2
nextlst:addq.w #1,a0
cmp.l a3,a2
beq.w endlist
move.l a2,d0 ;addr
beq.w syscorr
btst #0,d0
bne.w syscorr
bsr.w longtoa_
move.l para-base(a6),d0
bne.w nomeml
lea linebuf+1-base(a6),a0 ;overwrite addr
move.l $14(a2),d0 ;lower
bsr.w longtoa_
addq.w #1,a0
move.l $10(a2),d0 ;first
bsr.w longtoa_
addq.w #1,a0
move.l $18(a2),d0 ;upper
bsr.w longtoa_
addq.w #1,a0
move.l $1c(a2),d0 ;free use only 24 bit
bsr.w adrtoa_
addq.w #1,a0
move.w $e(a2),d0 ;attr
bsr.w wordtoa_
move.b 9(a2),d0 ;pri
bsr.w dopri
bra.w namelst
nomeml: subq.l #2,d0 ;devlist
beq.b dodevl
subq.l #2,d0 ;liblist
bne.b nolibl
dodevl:
addq.w #1,a0
moveq #0,d0
move.w $20(a2),d0 ;opencount
bsr.w hextod
lea linebuf+17-base(a6),a0
move.w $14(a2),d0 ;version
bsr.w hextod
lea linebuf+23-base(a6),a0
move.w $16(a2),d0 ;revision
bsr.w hextod
lea linebuf+29-base(a6),a0
move.w $10(a2),d0 ;negsize
bsr.w hextod
lea linebuf+35-base(a6),a0
move.w $12(a2),d0 ;possize
bsr.w hextod
lea linebuf+41-base(a6),a0
move.w $1c(a2),d0 ;chksum
bsr.w wordtoa_
bra.w namelst
nolibl: subq.l #1,d0
bne.b noportl
move.l #" Sig",d1
move.l #"nal ",d2
move.b $e(a2),d0 ;flag
beq.b flagsig
move.l #" Sof",d1
move.l #"tint",d2
subq.b #1,d0
beq.b flagsig
move.l #" Ign",d1
move.l #"ore ",d2
flagsig:move.l d1,(a0)+
move.l d2,(a0)+
addq.w #2,a0
moveq #0,d0
move.b $f(a2),d0 ;sigbit
bsr.w hextod
lea linebuf+24-base(a6),a0
move.l $10(a2),a1 ;task
move.l a1,d0
beq.b nonamec
btst #0,d0
bne.w syscorr
move.l $a(a1),a1 ;taskname
move.l a1,d0
beq.b nonamec
moveq #22-1,d0
namecpy:move.b (a1)+,(a0)+
dbeq d0,namecpy
bra.b namecp2
nonamec:move.l #"----",(a0)
move.l (a0)+,(a0)
namecp2:bra.w namelst
noportl:subq.l #1,d0 ;6:taskready
beq.b taskrdy
subq.l #1,d0 ;7:taskwaiting
beq.b taskrdy
subq.l #1,d0 ;8:thistask
bne.w notaskl
taskrdy:addq.w #1,a0
lea typetab(pc),a1
move.b $8(a2),d0 ;type
cmp.b #14,d0
bsr.w indextx
lea linebuf+19-base(a6),a0
move.b 9(a2),d0 ;pri
bsr.w dopri
lea linebuf+24-base(a6),a0
lea statetb(pc),a1
move.b $f(a2),d0 ;state
cmp.b #6,d0
bsr.w indextx
lea linebuf+32-base(a6),a0
move.l $3a(a2),d0 ;splower
bsr.w longtoa_
addq.w #1,a0
move.l $3e(a2),d0
sub.l $3a(a2),d0 ;size
bsr.w hextod
lea linebuf+48-base(a6),a0
move.l $3e(a2),d0
sub.l $36(a2),d0 ;used
bsr.w hextod
nop
notaskl:
namelst:lea linebuf+54-base(a6),a0
move.l $a(a2),a1
move.l a1,d0
beq.b nolstn
moveq #26-1,d0
lstname:move.b (a1)+,(a0)+
dbeq d0,lstname
bra.b lstnam0
nolstn: move.l #"----",(a0)
move.l (a0)+,(a0)
lstnam0:bsr.w rawline
move.l (a2),a2
move.l a2,d0
beq.b endlist
btst #0,d0
bne.b syscorr
lea $114+4(a4),a1 ;thistask=node, no list
cmp.l a3,a1
bne.w nextlst
endlist:
st d7
sysq: rts
syscorr:bsr.w clrlbuf
st d7
lea corrtxt(pc),a1
bra.w msgout
indextx:bls.b tsstate
moveq #0,d0
tsstate:subq.b #1,d0
bmi.b fndind
endind: btst #7,(a1)+
beq.b endind
bra.b tsstate
fndind: bra.w txttobuf
dopri: addq.w #2,a0
ext.w d0
ext.l d0
bpl.b rsdpri
move.b #"-",-1(a0)
neg.l d0
rsdpri: bra.w hextod
dorslst:bsr.w msgout
move.l (a3),a3
nextrsl:addq.w #1,a0
rslind: move.l (a3)+,d0
beq.b endrsl
bclr #31,d0
beq.b rslnorm
move.l d0,a3
bra.b rslind
rslnorm:move.l d0,a2
bsr.w longtoa_
addq.w #1,a0
lea typetab(pc),a1
moveq #0,d0
move.b $c(a2),d0 ;type
cmp.b #14,d0
bsr.b indextx
lea linebuf+19-base(a6),a0
move.b $d(a2),d0 ;pri
bsr.b dopri
lea linebuf+40-base(a6),a0
move.l $12(a2),a1
move.l a1,d0
beq.b norsdn
moveq #40-1,d0
rsdname:move.b (a1)+,(a0)+
dbeq d0,rsdname
bra.b rsdnam0
norsdn: move.l #"----",(a0)
move.l (a0)+,(a0)
rsdnam0:
bsr.w rawline
bra.b nextrsl
endrsl: st d7
rts
custom: tst.l d3
bne.w customq
bsr clrscr
lea linebuf-base(a6),a4
lea custnam(pc),a2
lea cust2nm(pc),a3
moveq #0,d6
custom2:move.l a4,a0
move.l #$dff000,d0
add.w d6,d0
add.w d6,d0
bsr adrtoa_
addq.w #1,a0
cmp.b (a2),d6
bne.b custom1
lea 1(a2),a1
bsr txttobuf
move.l a1,a2
bra.b custom6
custom1:move.l a3,a1
custom5:cmp.b 1(a1),d6
bhi.b custom3
moveq #0,d2
move.b d6,d2
sub.b (a1),d2
bcs.b custom3
moveq #0,d1
move.b 2(a1),d1
divu d1,d2
swap d2
tst.w d2
bne.b custom3
addq.w #3,a1
custom4:move.b (a1)+,(a0)+
cmp.b #" ",(a1)
bhi.b custom4
swap d2
add.b (a1)+,d2
moveq #0,d0
move.b d2,d0
bsr hextod
bsr txttobuf
bra.b custom6
custom3:addq.w #3,a1
custom7:btst #7,(a1)+
beq.b custom7
cmp.b #-1,(a1)
bne.b custom5
bra.b custom8
custom6:lea 20(a4),a4
lea linebuf+60-base(a6),a0
cmp.l a0,a4
bls.b custom8
bsr rawline
move.l a0,a4
custom8:
move.b row-base(a6),d0
cmp.b rowsm1-base(a6),d0
bne.b customa
bsr waitrmb
beq.b custom9
bsr clrscr
customa:addq.w #1,d6
cmp.w #$100,d6
bne.w custom2
custom9:st d7
customq:rts
MinCopCom = 5 ; Minimum amount of MOVE commands for coplist
MaxWait = 11 ; Maximum amount of adjacent wait/skip commands
huntcop:sub.l a4,a4
move.l himem-base(a6),a5
tst.l d3
beq.b huntchp
subq.l #2,d3
bne.w huntcq
movem.l para-base(a6),a4-a5
cmp.l a4,a5
bls.w huntcq
move.l a4,d0
btst d3,d0 ;d3:0
bne.w huntcq
move.l a5,d0
btst d3,d0
bne.b huntcq
huntchp:move.l #$0088008a,d2 ;strobe regs
huntlp: cmp.l a4,a5 ;reached end yet?
beq.b endhunt
move.w (a4)+,d0
cmp.w d0,d2
beq.b huntstp ;find strobe
swap d2
cmp.w d0,d2
beq.b huntstp
addq.w #1,d0 ;$ffff
bne.b huntlp
cmp.w #$fffe,(a4)
bne.b huntlp
huntstp:addq.w #2,a4 ;next time continue search from here
lea -4(a4),a3 ;end of coplist
moveq #-MinCopCom,d3 ;minimum amount of commands
cntsrch:moveq #-MaxWait,d1 ;maximum amount wait/skip commands
srchlp: subq.b #1,d1
beq.b endsrch
moveq #2,d0 ;-$fffffffe
add.l -(a3),d0 ;get data
beq.b endsrch
subq.l #2,d0
swap d0
btst #0,d0 ;ignore wait/skip commands
bne.b srchlp
cmp.w d2,d0 ;strobe?
beq.b endsrch
swap d2
cmp.w d2,d0 ;strobe?
beq.b endsrch
cmp.w #$020,d0 ;read only
bcs.b endsrch
cmp.w #$1fe,d0 ;copnop
bhi.b endsrch
addq.l #1,d3 ;inc mincounter
move.l a3,d4 ;save current
bra.b cntsrch
endsrch:tst.l d3
bmi.b badlist
lea linebuf+1-base(a6),a0
move.l d4,d0
move.l a4,d1
bsr twolong_
bsr rawline
bsr stopit
beq.b endhunt
badlist:bra.b huntlp
endhunt:st d7
huntcq: rts
copper: cmp.b #2,d3
bgt.b copq
moveq #16-1,d5
discop:
cop1: bsr.b ccore
bsr.w stopit
beq.b cop3
cmp.b #2,d3
bne.b cop2
move.l para-base(a6),a0
cmp.l para+4-base(a6),a0
bcs.b cop1
bra.b cop3
cop2: dbf d5,cop1
cop3: st d7
copq: rts
ccore: lea linebuf-base(a6),a0
move.w #">.",(a0)+
move.l para-base(a6),d0
move.l d0,a2
btst #0,d0 ;even addr
bne.w copq
bsr.w longtoa ;chipmem, but use 32 bit
add.w #1,a0
move.l (a2),d1
moveq #-2,d0
cmp.l d0,d1
bne.b ncopend
lea copendl(pc),a1
bsr.w txttobuf
bra.w cop0
ncopend:move.l d1,d0
and.l #$10001,d0
cmp.l #$10000,d0
bne.b nowait
lea copwait(pc),a1
bra.b dohvpos
nowait: cmp.l #$10001,d0
bne.b noskip
lea copskip(pc),a1
dohvpos:bsr.w txttobuf
addq.w #4,a0
moveq #8,d2
rol.l d2,d1
move.b d1,d0 ;vert
bsr.w bytetoa_
move.b #",",(a0)+
rol.l d2,d1
move.b d1,d0
lsr.b #1,d0 ;horiz
bsr.w bytetoa_
move.b #",",(a0)+
rol.l d2,d1
moveq #"0",d0
bclr #7,d1 ;waitblt disable
beq.b wasclr
moveq #"1",d0
wasclr: move.b d0,(a0)+
move.b #",",(a0)+
move.b d1,d0 ;vert mask
bsr.w bytetoa_
move.b #",",(a0)+
rol.l d2,d1
move.b d1,d0
lsr.b #1,d0 ;horiz mask
bsr.w bytetoa_
bra.w cop0
noskip: lea copmove(pc),a1
bsr.w txttobuf
addq.w #4,a0
move.b #"#",(a0)+
move.w d1,d0 ;value
bsr.w wordtoa_
move.b #",",(a0)+
moveq #0,d0
move.w (a2),d1 ;dest
cmp.w #$3e,d1
bls.w hexdest
cmp.w #$1fe,d1
bhi.b hexdest
move.w d1,d0
lsr.w #1,d0 ;$040-$1fe /2
lea copname(pc),a1
cntcop: cmp.b (a1),d0
bne.b copsrch
addq.w #1,a1
cpycnam:move.b (a1)+,(a0) ;name found
bclr #7,(a0)+
beq.b cpycnam
bra.b cop0
copsrch:cmp.b #$1fe/2,(a1)+ ;unknown dest
beq.b copdis2
findnxt:btst #7,(a1)+
beq.b findnxt
bra.b cntcop
copdis2:lea cp2name(pc),a1
cntcop2:cmp.b (a1),d0 ;first
bcs.b copsrc2
cmp.b 1(a1),d0 ;last
bhi.b copsrc2
moveq #0,d2 ;numbercnt
move.b d0,d4
copnxt: cmp.b (a1),d4
beq.b fndcop
addq.b #1,d2
sub.b 2(a1),d4 ;period
cmp.b (a1),d4 ;last
bcc.b copnxt
bra.b copsrc2
fndcop: addq.w #3,a1
cpycnm2:move.b (a1)+,d0
cmp.b #1,d0
bhi.b copasci
add.b d0,d2
move.l d2,d0
bsr.w hextod
bra.b cpycnm2
copasci:move.b d0,(a0) ;name found
bclr #7,(a0)+
beq.b cpycnm2
bra.b cop0
copsrc2:cmp.b #-1,(a1) ;unknown dest
beq.b hexdest
addq.w #3,a1 ;skip infobytes
findn2: btst #7,(a1)+ ;skip name
beq.b findn2
bra.b cntcop2
hexdest:move.w d1,d0
bsr.w wordtoa_
cop0: addq.l #4,para-base(a6)
bra rawline
copaq:
copass: tst.b d3
beq.w copaq
btst #0,para+3-base(a6)
bne.b copaq
move.l a5,a0
addq.w #2,a0 ;skip >,
bsr.w skipspc ;check obsolete
copa0: cmp.l lineend-base(a6),a0
bhi.w copq
cmp.b #" ",(a0)+ ;search spc
bne.b copa0
copa1: cmp.l lineend-base(a6),a0
bhi.w endcopa
cmp.b #" ",(a0) ;skip spc
bne.b copa1_
addq.w #1,a0
bra.b copa1
copa1_: move.l a0,a2 ;cmdadr!
copa3: cmp.l lineend-base(a6),a0
bhi.b copa4
move.b (a0)+,d0
cmp.b #"Z",d0
bhi.b copa3
cmp.b #"A",d0
bcs.b copa3
bset #5,d0 ;lcase all
move.b d0,-1(a0)
bra.b copa3
copa4: lea copmove(pc),a1
bsr.w copcmp ;a2:cmdadr,>a3:nexttxt
bne.w nocopmv
cmp.b #"#",(a3)+
bne.w copassy
st d7
bsr.w atoword_
tst.b d7
beq.w copassy
move.w d0,d6 ;value
cmp.b #",",(a3)+
bne.w copassy
cmp.b #"$",(a3)
bne.b destsym
bsr.w atoword_
tst.b d7
beq.w copassy
btst #0,d0 ;moveflag
bne.w copassy
copmv4: swap d0 ;abs dest
move.w d6,d0
move.l d0,d6
bra.w copmake
destsym:lea copname(pc),a1
copmv3: move.l a3,a0
moveq #0,d0
move.b (a1)+,d0
copmv1: move.b (a1),d1
bset #5,d1 ;to lcase
bclr #7,d1
cmp.b (a0)+,d1
bne.b copmv0
btst #7,(a1)+
beq.b copmv1
add.w d0,d0 ;regadr
bra.b copmv4
copmv0: cmp.b #$1fe/2,d0 ;end of tab
beq.b ncopkey
copmv2: btst #7,(a1)+ ;next entry
beq.b copmv2
bra.b copmv3
ncopkey:
lea cp2name(pc),a1
copmv5: move.l a3,a0
moveq #0,d0
move.b (a1)+,d0 ;1st
moveq #0,d2
move.b (a1)+,d2 ;last
moveq #0,d3
move.b (a1)+,d3 ;step
copmv7: move.b (a1),d1
cmp.b #1,d1 ;nameindex?
bhi.b copmv9
moveq #0,d4
move.b (a0),d4
sub.b #"0",d4
bcs.w copmv9 ;assy
cmp.b #9,d4
bhi.w copmv9 ;assy
addq.w #1,a0
move.b (a0),d5
sub.b #"0",d5
bcs.b copmv10 ;1digit
cmp.b #9,d5
bhi.b copmv10
addq.w #1,a0
mulu #10,d4 ;2digit
add.b d5,d4
copmv10:sub.b d1,d4 ;numoffset
bmi.w copassy ;too low
add.w d3,d3
mulu d3,d4 ;regoffset
add.w d0,d0
add.w d0,d4 ;regdest
add.w d2,d2
cmp.w d2,d4
bhi.w copassy ;too high
bra.b copmv11
copmv9: bset #5,d1 ;to lcase
bclr #7,d1
cmp.b (a0)+,d1
bne.b copmv8
copmv11:btst #7,(a1)+
beq.b copmv7
move.w d4,d0 ;regdest
bra.w copmv4
copmv8: cmp.b #-1,d0 ;end of tab
beq.w copassy ;ncopkey
copmv6: btst #7,(a1)+ ;next entry
beq.b copmv6
bra.w copmv5
nocopmv:lea copwait(pc),a1
bsr.w copcmp
bne.b nocopwt
move.l #$10000,d6
bra.b waitskp
nocopwt:lea copskip(pc),a1
bsr.w copcmp
bne.b nocopsk
move.l #$10001,d6
waitskp:st d7
bsr.w atobyte_
tst.b d7
beq.w copassy
move.b d0,d4 ;vert
lsl.l #8,d4
cmp.b #",",(a3)+
bne.w copassy
bsr.w atobyte_
tst.b d7
beq.w copassy
add.b d0,d0
bcs.w copassy ;horiz
move.b d0,d4
lsl.l #8,d4
cmp.b #",",(a3)+
bne.b copassy
move.b (a3)+,d0 ;bltwait disable
moveq #"0",d1
cmp.b d0,d1
beq.b bltwait
moveq #"1",d1
cmp.b d0,d1
bne.b copassy
bset #7,d4
bltwait:cmp.b #",",(a3)+
bne.b copassy
bsr.w atobyte_
tst.b d7
beq.b copassy
cmp.b #$7f,d0 ;vert mask
bhi.b copassy
or.b d0,d4
lsl.l #8,d4
cmp.b #",",(a3)+
bne.b copassy
bsr.w atobyte_
tst.b d7
beq.b copassy
add.b d0,d0 ;horiz mask
bcs.b copassy
move.b d0,d4
or.l d4,d6
bra.b copmake
nocopsk:lea copendl(pc),a1
bsr.b copcmp
bne.b nocopel
moveq #-2,d6 ;endlist
bra.b copmake
nocopel:lea copdcl(pc),a1
bsr.b copcmp
bne.b nocopdc
st d7
bsr.w atolong_
tst.b d7
beq.b copassy
move.l d0,d6
bra.b copmake
nocopdc:bra.b copassy
copmake:move.l para-base(a6),a0
move.l d6,(a0)
bsr.w csup
moveq #1,d3
moveq #2-1,d5
bsr.w discop
copassy:bsr.w csup
move.b #11,col-base(a6)
endcopa:st d7
rts
copcmp: move.l a2,-(a7)
copcmp0:move.b (a1),d0
bset #5,d0 ;to lcase
bclr #7,d0
cmp.b (a2)+,d0
bne.b copdif
btst #7,(a1)+
beq.b copcmp0
move.l a2,a0
bsr.w skipspc ;eol check?
move.l a0,a3
moveq #0,d0
copdif: move.l (a7)+,a2
rts ;a3:nextptr,bne.b diff, beq.b equal
ob: moveq #0,d4
bra.b odoit
ow: moveq #1,d4
bra.b odoit
ol: moveq #2,d4
bra.b odoit
eb: moveq #3,d4
bra.b edoit
ew: moveq #4,d4
bra.b edoit
el: moveq #5,d4
edoit: lea eortxt(pc),a2
bra.b odo0
odoit: lea filltxt(pc),a2
odo0: move.b lpinfo(pc,d4.w),d5
cmp.b #8,d5
beq.b obyte
cmp.b #2,cpu-base(a6)
bcc.b obyte ;odd word/longword
btst #0,para+3-base(a6)
bne.b owq
obyte: subq.l #3,d3 ;3 parameters
bne.b owq
bset d5,d3 ;overflow
movem.l para-base(a6),d0/d1/d2
tst.b d5
beq.b olong
cmp.l d3,d2 ;argument to large
bcc.b owq
olong: move.l d0,a0
add.w d4,d4 ;2bytes/ptr
lea lptoa_(pc),a4
add.w lptoa_(pc,d4.w),a4
lsl.w #2,d4 ;8bytes/subroutine
jsr lpsubs(pc,d4.w)
move.l a0,d1 ;d0:start,a0:end
lea linebuf+1-base(a6),a0
bsr.w twolong_
move.l a2,a1
bsr.w txttobuf
move.l d2,d0
jsr (a4)
bsr.w rawline
st d7
owq: rts
lptoa_: dc.w bytetoa_-lptoa_,wordtoa_-lptoa_,longtoa_-lptoa_
dc.w bytetoa_-lptoa_,wordtoa_-lptoa_,longtoa_-lptoa_
lpinfo: dc.b 8,16,0,8,16,0 ;used bits,0:32
lpsubs: move.b d2,(a0)+
cmp.l d1,a0
bcs.b *-4
rts
move.w d2,(a0)+
cmp.l d1,a0
bcs.b *-4
rts
move.l d2,(a0)+
cmp.l d1,a0
bcs.b *-4
rts
eor.b d2,(a0)+
cmp.l d1,a0
bcs.b *-4
rts
eor.w d2,(a0)+
cmp.l d1,a0
bcs.b *-4
rts
eor.l d2,(a0)+
cmp.l d1,a0
bcs.b *-4
rts
nopit: subq.l #2,d3
bne.b nopitq
movem.l para-base(a6),d0-d1
btst d3,d0
bne.b nopitq
move.l d0,a0
nopit1: subq.l #1,d1
bmi.b nopit0
move.w #$4e71,(a0)+
bra.b nopit1
nopit0: st d7
nopitq: rts
implode:subq.l #2,d3
bmi.b noimpl
movem.l para-base(a6),d0-d2
subq.l #1,d3
beq.b impmode
moveq #0,d2
impmode:moveq #11,d3
cmp.l d3,d2
bhi.b noimpl
swap d2
btst #0,d0
bne.b noimpl
move.l d0,a0 ;start
sub.l d0,d1
bls.b noimpl
move.l d1,d0 ;length
move.l d0,d3
sub.l a1,a1
move.l d2,d1 ;mode
bsr.b doimp
lea linebuf+1-base(a6),a0
lea impetxt(pc),a1
move.l d0,d1
beq.b imperr
lea impatxt(pc),a1
bmi.b imperr
lea gaintxt+1(pc),a1
bsr txttobuf
sub.l d1,d3
move.l d3,d0
bsr hextoa_
lea impotxt(pc),a1
bsr txttobuf
move.l para-base(a6),d0
add.l d0,d1
bsr twolong_
bra.b impok
imperr: bsr txttobuf
impok: bsr rawline
st d7
noimpl: rts
;
; implode:
;
; In: a0.l=*buffer
; d0.l=data length
; d1.l=crunch mode
;
; Out: d0.l=<0:user break; 0:error; <>0:crunched length
;
doimp:
im00: movem.l d2-d7/a2-a6,-(sp)
moveq #$57,d2
im01: clr.w -(sp)
dbf d2,im01
move.l sp,a6
; move.l a5,2(a6) ;obsolete
cmp.l #$40,d0
blo im23
lsr.l #8,d1
scs (a6)
lsr.l #8,d1
cmp.b #12,d1
blo.s im02
moveq #0,d1
im02:
; move.l a1,6(a6) ;obsolete
move.l a0,10(a6)
move.l a0,$22(a6)
move.l a0,$26(a6)
move.l d0,$12(a6)
add.l d0,a0
move.l a0,14(a6)
lea imtab0(pc),a0
lsl.w #2,d1
move.l 0(a0,d1.w),d1
addq.l #1,d1
cmp.l d0,d1
bls.s im03
move.l d0,d1
subq.l #1,d1
im03: move.l d1,$1A(a6)
subq.l #1,d1
moveq #0,d0
im04: cmp.l (a0)+,d1
bls.s im05
addq.b #1,d0
bra.s im04
im05: move.b d0,1(a6)
lea $A4(a6),a1
moveq #12,d1
mulu d1,d0
lea imtab1(pc),a0
add.l d0,a0
subq.w #1,d1
im06: move.b (a0)+,(a1)+
dbf d1,im06
lea $74(a6),a1
lea $A4(a6),a0
moveq #11,d1
im07: move.b (a0)+,d0
moveq #0,d2
bset d0,d2
move.l d2,(a1)+
dbf d1,im07
lea $74(a6),a0
lea $84(a6),a1
moveq #7,d1
im08: move.l (a0)+,d0
add.l d0,(a1)+
dbf d1,im08
tst.b (a6)
beq.s im11
lea $74(a6),a1
moveq #7,d0
im09: move.l (a1)+,d1
move.w d1,(a2)+
dbf d0,im09
lea $A4(a6),a1
moveq #11,d0
im10: move.b (a1)+,(a2)+
dbf d0,im10
im11: move.b #7,$2D(a6)
im12: bsr im26
beq im22
bsr im28
beq.s im15
bsr im55
bne.s im13
; move.l $22(a6),a0
; move.l $26(a6),a1
; move.b (a0),(a1)
; addq.l #1,$22(a6)
; addq.l #1,$26(a6)
; addq.l #1,$30(a6)
; addq.l #1,$1E(a6)
; cmp.l #$4012,$30(a6)
lea $1e(a6),a5
addq.l #1,(a5)+ ;$1e
move.l (a5),a0 ;$22
addq.l #1,(a5)+ ;$22
move.l (a5),a1 ;$26
move.b (a0),(a1)
addq.l #1,(a5) ;$26
addq.l #1,$30(a6) ;$30
cmp.l #$4012,$30(a6)
blo.s im12
bra.s im15
im13: move.b $5C(a6),d0
move.l $60(a6),d1
bsr im37
move.b $5E(a6),d0
move.w $66(a6),d1
bsr im37
move.b $5D(a6),d0
move.w $64(a6),d1
cmp.b #13,d0
bne.s im14
move.l $26(a6),a0
move.b d1,(a0)+
move.l a0,$26(a6)
moveq #5,d0
moveq #$1F,d1
im14: bsr im37
moveq #0,d0
move.l d0,$30(a6) ;clr.l $30(a6)
move.b $2E(a6),d0
add.l d0,$22(a6)
bra im12
im15: bsr im26
beq im22
; move.l $22(a6),a0
; move.l $26(a6),a1
; move.b (a0),(a1)
; addq.l #1,$22(a6)
; addq.l #1,$26(a6)
; addq.l #1,$30(a6)
; addq.l #1,$1E(a6)
lea $1e(a6),a5
addq.l #1,(a5)+ ;$1e
move.l (a5),a0 ;$22
addq.l #1,(a5) ;$22
move.l (a5)+,d0 ;$22
move.l (a5),a1 ;$26
move.b (a0),(a1)
addq.l #1,(a5) ;$26
addq.l #1,$30(a6) ;$30
; move.l $22(a6),d0
cmp.l 14(a6),d0
bne.s im15
bsr im26
beq im22
tst.b (a6)
bne im19
move.l $26(a6),d0
sub.l 10(a6),d0
moveq #12,d1
cmp.l d1,d0 ;cmp.l #12,d0
blo im23
move.l $12(a6),d1
sub.l d0,d1
moveq #$36,d7
cmp.l d7,d1 ;cmp.l #$36,d1
bls im23
move.l 10(a6),a1
move.l $26(a6),a0
move.w #$ff00,d7 ;move.l #$FF00,d7
btst #0,d0
beq.s im16
moveq #0,d7
addq.l #1,d0
clr.b (a0)+
im16: move.l (a1),8(a0)
move.l #ImploderID,(a1)
move.l 4(a1),4(a0)
move.l $12(a6),4(a1)
move.l 8(a1),(a0)
move.l d0,8(a1)
moveq #$2e,d1
add.l d1,d0 ;add.l #$2E,d0
move.l d0,$16(a6)
move.l $30(a6),12(a0)
move.b $2C(a6),d1
and.w #$FE,d1
move.b $2D(a6),d0
bset d0,d1
or.w d7,d1
move.w d1,$10(a0)
lea $74(a6),a1
add.w #$12,a0
moveq #7,d0
im17: move.l (a1)+,d1
move.w d1,(a0)+
dbf d0,im17
lea $A4(a6),a1
moveq #11,d0
im18: move.b (a1)+,(a0)+
dbf d0,im18
bra.s im23
im19: move.l $26(a6),d0
sub.l 10(a6),d0
move.l $12(a6),d1
sub.l d0,d1
moveq #6,d2
cmp.l d2,d1 ;cmp.l #6,d1
bls.s im23
move.b $2C(a6),d1
and.b #$FE,d1
move.b $2D(a6),d2
bset d2,d1
move.l $26(a6),a0
btst #0,d0
beq.s im20
move.b d1,(a0)+
move.l $30(a6),(a0)
bra.s im21
im20: move.l $30(a6),(a0)+
move.b d1,(a0)
im21: addq.l #5,d0
move.l d0,$16(a6)
bra.s im23
im22: moveq #-1,d0
bra.s im24
im23: move.l $16(a6),d0
im24: moveq #$57,d2
im25: clr.w (sp)+
dbf d2,im25
movem.l (sp)+,d2-d7/a2-a6
tst.l d0
rts
imtab0: dc.l 128,256,512,1024,1792,3328,5376,9472,20736,37376,67840,67840
imtab1: dc.l $5050505,$5050505,$6060606,$5060707,$6060606,$7070606
dc.l $5060707,$7070707,$8080808,$5060708,$7070808,$8080909
dc.l $6070708,$7080909,$8090A0A,$6070708,$709090A,$80A0B0B
dc.l $6070808,$709090A,$80A0B0C,$6070808,$709090A,$90A0C0D
dc.l $6070708,$709090C,$90A0C0E,$6070809,$7090A0C,$90B0D0F
dc.l $6070808,$70A0B0B,$90C0D10,$6080809,$70B0C0C,$90D0E11
imtab2: dc.l $2060E,$1020304
imtab3: dc.l $1010101,$2030304,$405070E
imtab4: dc.l $20002,$20002,$6000A,$A0012,$16002A,$8A4012
im26: lea base(pc),a5
tst.w count-base(a5)
bne.b impno
move.w #10,count-base(a5)
bra.b im27
impno: rts ;beq.b abort
im27: movem.l d0-d1/a0-a1/a6,-(a7)
move.l 14(a6),d0
sub.l $22(a6),d0 ;togo
move.l $22(a6),d1
sub.l $26(a6),d1 ;saved
lea base(pc),a6
lea linebuf+1-base(a6),a0
lea togotxt(pc),a1
bsr txttobuf
bsr hextoa_
bsr txttobuf
move.l d1,d0
bsr hextoa_
bsr rawline
bsr csup
bsr stopit
movem.l (a7)+,d0-d1/a0-a1/a6
rts
im28: move.l $22(a6),a5
move.l 14(a6),d4
move.l a5,d0
addq.l #1,d0
add.l $1A(a6),d0
cmp.l d4,d0
bls.s im29
move.l d4,d0
move.l d0,d1
sub.l a5,d1
cmp.l #3,d1
bcc.s im29
moveq #0,d0
rts
im29: move.l d0,d5
move.l a5,a2
addq.l #1,a2
move.l a2,a4
moveq #1,d7
move.b (a5),d3
lea $34(a6),a3
im30: cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.b (a2)+,d3
beq.s im32
cmp.l a2,d5
bhi.s im30
im31: moveq #-1,d0
rts
im32: cmp.l a2,d5
bls.s im31
move.l a4,a0
move.l a2,a1
cmpm.b (a0)+,(a1)+
bne.s im30
cmpm.b (a0)+,(a1)+
bne.s im35
cmpm.b (a0)+,(a1)+
bne.s im34
move.w #251,d0
im33: cmpm.b (a0)+,(a1)+
dbne d0,im33
im34: cmp.l d4,a1
bls.s im35
move.l d4,a1
im35: move.l a1,d6
sub.l a2,d6
cmp.w d6,d7
bcc.s im30
move.w d6,d7
cmp.w #8,d6
bhi.s im36
tst.b -2(a3,d6.w)
bne im30
move.b d6,-2(a3,d6.w)
move.l a2,d0
sub.l a5,d0
subq.l #2,d0
move.w d6,d1
lsl.w #2,d1
move.l d0,0(a3,d1.w)
bra im30
im36: move.b d6,7(a3)
move.l a2,d0
sub.l a5,d0
subq.l #2,d0
move.l d0,$24(a3)
cmp.b #$FF,d6
bne im30
bra.s im31
im37: move.b $2C(a6),d2
move.b $2D(a6),d3
move.l $26(a6),a0
im38: lsr.l #1,d1
roxr.b #1,d2
subq.b #1,d3
bpl.s im39
moveq #7,d3
move.b d2,(a0)+
moveq #0,d2
im39: subq.b #1,d0
bne.s im38
move.l a0,$26(a6)
move.b d3,$2D(a6)
move.b d2,$2C(a6)
rts
im40: and.l #$FF,d0
cmp.b #13,d0
bhi.s im42
cmp.b #5,d0
bhi.s im41
lea imtab2(pc),a0
move.b -2(a0,d0.w),$71(a6)
move.b 2(a0,d0.w),$69(a6)
bra.s im44
im41: subq.b #6,d0
or.b #$F0,d0
move.b d0,$71(a6)
move.b #8,$69(a6)
bra.s im43
im42: move.b #$1F,$70(a6)
move.b d0,$71(a6)
move.b #13,$69(a6)
im43: moveq #5,d0
im44: subq.b #2,d0
move.l $30(a6),d2
lea imtab3(pc),a1
lea imtab4(pc),a0
add.l d0,a0
add.l d0,a0
cmp.w (a0),d2
bcc.s im45
move.b 0(a1,d0.w),d6
move.b d6,d3
addq.b #1,d3
sf $73(a6) ;move.b #0,$73(a6)
moveq #0,d4
bra.s im48
im45: cmp.w 8(a0),d2
bcc.s im46
move.b 4(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
move.b #2,$73(a6)
move.w (a0),d4
bra.s im48
im46: cmp.w $10(a0),d2
blo.s im47
moveq #0,d0
rts
im47: move.b 8(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
move.b #3,$73(a6)
move.w 8(a0),d4
im48: move.b d3,$6A(a6)
sub.w d4,d2
moveq #$10,d5
sub.b d6,d5
lsl.w d5,d2
im49: add.w d2,d2
roxl $72(a6)
subq.b #1,d6
bne.s im49
lea $A4(a6),a1
lea $74(a6),a0
add.w d0,a0
add.w d0,a0
add.w d0,a0
add.w d0,a0
cmp.l (a0),d1
bcc.s im50
move.b 0(a1,d0.w),d6
move.b d6,d3
addq.b #1,d3
moveq #0,d7
moveq #0,d4
bra.s im53
im50: cmp.l $10(a0),d1
bcc.s im51
move.b 4(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
moveq #2,d7
move.l (a0),d4
bra.s im53
im51: cmp.l $20(a0),d1
blo.s im52
moveq #0,d0
rts
im52: move.b 8(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
moveq #3,d7
move.l $10(a0),d4
im53: move.b d3,$68(a6)
sub.l d4,d1
moveq #$20,d5
sub.b d6,d5
lsl.l d5,d1
im54: add.l d1,d1
addx.l d7,d7
subq.b #1,d6
bne.s im54
move.l d7,$6C(a6)
moveq #-1,d0
rts
im55: clr.w $2A(a6)
clr.b $2E(a6)
lea $34(a6),a4
lea $3C(a6),a5
im56: move.l (a5)+,d1
move.b (a4)+,d0
beq.s im58
bsr im40
beq.s im58
moveq #0,d0
moveq #0,d1
move.b -1(a4),d0
lsl.w #3,d0
add.b $69(a6),d1
add.b $68(a6),d1
add.b $6A(a6),d1
sub.w d1,d0
bmi.s im58
cmp.w $2A(a6),d0
blo.s im58
move.w d0,$2A(a6)
move.b -1(a4),$2E(a6)
lea $5C(a6),a0
lea $68(a6),a1
moveq #12,d1
im57: move.b (a1)+,(a0)+
dbf d1,im57
im58: move.l a4,d0
sub.l a6,d0
cmp.w #$3C,d0
bne.s im56
clr.l -(a4)
clr.l -(a4)
tst.w $2E(a6)
rts
explode:subq.l #1,d3
bne.b exploq
move.l para-base(a6),d0
btst #0,d0
bne.b exploq
move.l d0,a0
move.l a0,d2 ;dest
move.l 4(a0),d3 ;decrunched length
bsr doexp
tst.l d0
lea linebuf+1-base(a6),a0
lea expetxt(pc),a1
beq.b experr
lea expotxt(pc),a1
bsr txttobuf
move.l d2,d0
move.l d2,d1
add.l d3,d1
bsr twolong_
bra.b expok
experr: bsr txttobuf
expok: bsr rawline
st d7
exploq: rts
;
; explode:
;
; Die entkomprimierten Daten werden in den gleichen Bereich geschrieben, in
; dem die komprimierten Daten stehen (dieser Bereich muß deshalb groß genug sein).
;
; In: a0.l=*buffer
;
; Out: d0.l=0:Error; -1:Ok
;
doexp: movem.l d2-d5/a2-a4,-(sp)
move.l a0,a3
move.l a0,a4
cmp.l #ImploderID,(a0)+
bne.s ex05
add.l (a0)+,a4
add.l (a0)+,a3
move.l a3,a2
move.l (a2)+,-(a0)
move.l (a2)+,-(a0)
move.l (a2)+,-(a0)
move.l (a2)+,d2
move.w (a2)+,d3
bmi.s ex00
subq.l #1,a3
ex00: lea -28(sp),sp
move.l sp,a1
moveq #6,d0
ex01: move.l (a2)+,(a1)+
dbf d0,ex01
move.l sp,a1
moveq #0,d4
ex02: tst.l d2
beq.s ex04
ex03: move.b -(a3),-(a4)
subq.l #1,d2
bne.s ex03
ex04: cmp.l a4,a0
blo.s ex07
lea 28(sp),sp
moveq #-1,d0
cmp.l a3,a0
beq.s ex06
ex05: moveq #0,d0
ex06: movem.l (sp)+,d2-d5/a2-a4
tst.l d0
rts
ex07: add.b d3,d3
bne.s ex08
move.b -(a3),d3
addx.b d3,d3
ex08: bcc.s ex20
add.b d3,d3
bne.s ex09
move.b -(a3),d3
addx.b d3,d3
ex09: bcc.s ex19
add.b d3,d3
bne.s ex10
move.b -(a3),d3
addx.b d3,d3
ex10: bcc.s ex18
add.b d3,d3
bne.s ex11
move.b -(a3),d3
addx.b d3,d3
ex11: bcc.s ex17
add.b d3,d3
bne.s ex12
move.b -(a3),d3
addx.b d3,d3
ex12: bcc.s ex13
move.b -(a3),d4
moveq #3,d0
bra.s ex21
ex13: add.b d3,d3
bne.s ex14
move.b -(a3),d3
addx.b d3,d3
ex14: addx.b d4,d4
add.b d3,d3
bne.s ex15
move.b -(a3),d3
addx.b d3,d3
ex15: addx.b d4,d4
add.b d3,d3
bne.s ex16
move.b -(a3),d3
addx.b d3,d3
ex16: addx.b d4,d4
addq.b #6,d4
moveq #3,d0
bra.s ex21
ex17: moveq #5,d4
moveq #3,d0
bra.s ex21
ex18: moveq #4,d4
moveq #2,d0
bra.s ex21
ex19: moveq #3,d4
moveq #1,d0
bra.s ex21
ex20: moveq #2,d4
moveq #0,d0
ex21: moveq #0,d5
move.w d0,d1
add.b d3,d3
bne.s ex22
move.b -(a3),d3
addx.b d3,d3
ex22: bcc.s ex25
add.b d3,d3
bne.s ex23
move.b -(a3),d3
addx.b d3,d3
ex23: bcc.s ex24
move.b extab0(pc,d0.w),d5
addq.b #8,d0
bra.s ex25
ex24: moveq #2,d5
addq.b #4,d0
ex25: move.b extab1(pc,d0.w),d0
ex26: add.b d3,d3
bne.s ex27
move.b -(a3),d3
addx.b d3,d3
ex27: addx.w d2,d2
subq.b #1,d0
bne.s ex26
add.w d5,d2
moveq #0,d5
move.l d5,a2
move.w d1,d0
add.b d3,d3
bne.s ex28
move.b -(a3),d3
addx.b d3,d3
ex28: bcc.s ex31
add.w d1,d1
add.b d3,d3
bne.s ex29
move.b -(a3),d3
addx.b d3,d3
ex29: bcc.s ex30
move.w 8(a1,d1.w),a2
addq.b #8,d0
bra.s ex31
ex30: move.w 0(a1,d1.w),a2
addq.b #4,d0
ex31: move.b $10(a1,d0.w),d0
ex32: add.b d3,d3
bne.s ex33
move.b -(a3),d3
addx.b d3,d3
ex33: addx.l d5,d5
subq.b #1,d0
bne.s ex32
addq.w #1,a2
add.l d5,a2
add.l a4,a2
ex34: move.b -(a2),-(a4)
subq.b #1,d4
bne.s ex34
bra ex02
extab0: dc.l $60A0A12
extab1: dc.l $1010101,$2030304,$405070E
stopit: cmp.b #$1b,ascii-base(a6)
beq.b stopit0
btst #10,$dff016
beq.b stopit
rts ;bne.b noquit
stopit0:clr.w buflen-base(a6) ;beq.b exitall
rts
waitrmb:cmp.b #$1b,ascii-base(a6)
beq.b stopit0
btst #10,$dff016
bne.b waitrmb
move.w #5,count-base(a6)
waitit1:tst.w count-base(a6)
bne.b waitit1
waitit0:btst #10,$dff016
beq.b waitit0
rts ;beq.b exitall
twolong_:
bsr.b longtoa_
move.b #"-",(a0)+
move.l d1,d0
bra.b longtoa_
twoadr_:bsr.b adrtoa_
move.b #"-",(a0)+
move.l d1,d0
bra.b adrtoa_
nibtoa_:move.b #"$",(a0)+
nibtoa: movem.l d0-d2,-(a7)
moveq #1-1,d2
ror.l #4,d0
bra.b lta0
bytetoa_:move.b #"$",(a0)+
bytetoa:movem.l d0-d2,-(a7)
moveq #2-1,d2
ror.l #8,d0
bra.b lta0
wordtoa_:move.b #"$",(a0)+
wordtoa:movem.l d0-d2,-(a7)
moveq #4-1,d2
swap d0
bra.b lta0
adrtoa_:move.b #"$",(a0)+
adrtoa: movem.l d0-d2,-(a7)
moveq #6-1,d2
lsl.l #8,d0
bra.b lta0
longtoa_:move.b #"$",(a0)+
longtoa:movem.l d0-d2,-(a7)
moveq #8-1,d2
lta0: rol.l #4,d0
moveq #$0f,d1
and.w d0,d1
move.b l2ascii(pc,d1.w),(a0)+
dbf d2,lta0
movem.l (a7)+,d0-d2
rts
l2ascii:dc.b "0123456789abcdef"
hextoa_:movem.l d0-d3,-(a7)
moveq #9,d2
cmp.l d2,d0
bls.b hta3
move.b #"$",(a0)+
hta3: sf d3
moveq #8-1,d2
hta0: rol.l #4,d0
moveq #$0f,d1
and.w d0,d1
bne.b hta1
tst.w d2
beq.b hta1
tst.b d3
beq.b hta2
hta1: st d3
move.b l2ascii(pc,d1.w),(a0)+
hta2: dbf d2,hta0
movem.l (a7)+,d0-d3
rts
wordtod:move.l d0,-(a7)
ext.l d0
divu #1000,d0
add.b #"0",d0
move.b d0,(a0)+
clr.w d0
swap d0
divu #100,d0
add.b #"0",d0
move.b d0,(a0)+
swap d0
bra.b btd0
bytetod:move.l d0,-(a7)
btd0: cmp.b #99,d0
bls.b btd1
moveq #99,d0
btd1: ext.w d0
ext.l d0
divu #10,d0
bra.b ntd1
nibtod: move.l d0,-(a7)
moveq #%1111,d0
and.l (a7),d0
divu #10,d0
beq.b ntd0
ntd1: add.b #"0",d0
move.b d0,(a0)+
ntd0: swap d0
add.b #"0",d0
move.b d0,(a0)+
move.l (a7)+,d0
rts
hextod: movem.l d0-d4/a1,-(a7)
lea divtab(pc),a1
moveq #10-1,d1
sf d4
hd0: moveq #"0",d2
move.l (a1)+,d3
hd1: cmp.l d3,d0
bcs.b hd2
st d4
sub.l d3,d0
addq.b #1,d2
bra.b hd1
hd2: tst.w d1
beq.b hd4
tst.b d4
beq.b hd3
hd4: move.b d2,(a0)+
hd3: dbf d1,hd0
movem.l (a7)+,d0-d4/a1
rts
divtab: dc.l 1000000000,100000000,10000000,1000000
dc.l 100000,10000,1000,100,10,1
hextob: movem.l d0-d4,-(a7)
sf d4
bsr.b hb3
bsr.b hb3
bsr.b hb3
st d4
bsr.b hb3
movem.l (a7)+,d0-d4
rts
hb3: rol.l #8,d0
move.b d0,d3
bne.b hb2
tst.b d4
beq.b hb4
hb2: st d4
bytetob:moveq #8-1,d2
hb0: moveq #"0",d1
add.b d3,d3
bcc.b hb1
moveq #"1",d1
hb1: move.b d1,(a0)+
dbf d2,hb0
move.b #" ",(a0)+
hb4: rts
atolong_:cmp.b #"$",(a3)
bne.b atolong
addq.w #1,a3
atolong:moveq #8-1,d2
bra.b atob2
atoword_:cmp.b #"$",(a3)
bne.b atoword
addq.w #1,a3
atoword:moveq #4-1,d2
bra.b atob2
atobyte_:cmp.b #"$",(a3)
bne.b atobyte
addq.w #1,a3
atobyte:moveq #2-1,d2
atob2: moveq #0,d0
atob1: move.b (a3),d1
cmp.b #"f",d1
bhi.b atob3
sub.b #"0",d1
bcs.b atob3
cmp.b #9,d1
bls.b atob0
cmp.b #"a"-"0",d1
bcs.b atob3
sub.b #"a"-"0"-10,d1
atob0: lsl.l #4,d0
or.b d1,d0
addq.w #1,a3
dbf d2,atob1
atob3: tst.l d0
rts
atodnib:moveq #0,d0 ;0-99
move.b (a3),d1
sub.b #"0",d1
bcs.b atdnb0
cmp.b #9,d1
bhi.b atdnb0
addq.w #1,a3
move.b d1,d0
move.b (a3),d1
sub.b #"0",d1
bcs.b atdnb0
cmp.b #9,d1
bhi.b atdnb0
addq.w #1,a3
mulu #10,d0
add.b d1,d0
atdnb0: tst.b d0
rts
atodlong:
moveq #0,d0
moveq #0,d1
moveq #10-1,d2
atol1: move.b (a3),d1
sub.b #"0",d1
bcs.b atodl0
cmp.b #9,d1
bhi.b atodl0
addq.w #1,a3
add.l d0,d0 ;*2
move.l d0,-(a7)
lsl.l #2,d0 ;*2*4
add.l (a7)+,d0
add.l d1,d0
dbf d2,atol1
atodl0: rts
dis6502:movem.l d0-d2/a0-a1/a4,-(a7)
move.l a5,d2
bsr.w clrlbuf
lea linebuf-base(a6),a0
move.w #">_",(a0)+
move.l a5,d0
bsr.w longtoa
moveq #$ffffffdf,d0
and.b (a5),d0
cmp.b #$c2,d0
bne.b nseprep
btst #5,(a5)
sne d1
moveq #%00110000,d0
and.b 1(a5),d0
beq.b nseprep
move.b 1(a5),d0
lea linebuf+40-base(a6),a0
move.b #";",(a0)+
btst #5,d0
beq.b noaccu
move.b #"a",(a0)+
move.b #":",(a0)+
tst.b autosel-base(a6)
beq.b noaccu
move.b d1,accu8-base(a6)
noaccu: btst #4,d0
beq.b noindx
btst #5,d0
beq.b noac0
move.b #",",-1(a0)
noac0: move.b #"x",(a0)+
move.b #",",(a0)+
move.b #"y",(a0)+
move.b #":",(a0)+
tst.b autosel-base(a6)
beq.b noindx
move.b d1,idxy8-base(a6)
noindx: lsl.b #3,d1
moveq #16,d0
add.b d1,d0
bsr.w hextod
move.b #"b",(a0)+
move.b #"i",(a0)+
move.b #"t",(a0)
nseprep:
lea linebuf+25-base(a6),a0
moveq #0,d0
move.b (a5)+,d0
add.w d0,d0
lea tab6502(pc),a4
add.w d0,a4
moveq #0,d1
move.b (a4)+,d1
mulu #3,d1
moveq #0,d0
move.b (a4)+,d0
lea txt6502(pc),a4
add.w d1,a4
move.b (a4)+,(a0)+
move.b (a4)+,(a0)+
move.b (a4)+,(a0)
addq.w #2,a0
add.w d0,d0
move.w d65mode(pc,d0.w),d0
jsr d65subs(pc,d0.w)
lea linebuf+12-base(a6),a0
lea linebuf+70-base(a6),a1
move.b #";",(a1)+
move.l d2,a4
sub.l a5,d2
d02hex: move.b (a4)+,d0
bsr.w bytetoa
moveq #$60,d1
and.b d0,d1
bne.b d02asc
moveq #".",d0
d02asc: move.b d0,(a1)+
addq.w #1,a0
addq.b #1,d2
bne.b d02hex
movem.l (a7)+,d0-d2/a0-a1/a4
rts
d65mode:dc.w d65nop-d65subs ;0
dc.w d65imi-d65subs ;1
dc.w d65adr-d65subs ;2
dc.w d65zp-d65subs ;3
dc.w d65acu-d65subs ;4
dc.w d65zpix-d65subs ;5
dc.w d65zpiy-d65subs ;6
dc.w d65zpx-d65subs ;7
dc.w d65adrx-d65subs ;8
dc.w d65adry-d65subs ;9
dc.w d65zpy-d65subs ;10
dc.w d65jmpi-d65subs ;11
dc.w d65brel-d65subs ;12
dc.w d65dummy-d65subs ;13
dc.w d65zpl-d65subs ;14
dc.w d65zply-d65subs ;15
dc.w d65zpi-d65subs ;16
dc.w d65srel-d65subs ;17
dc.w d65sriy-d65subs ;18
dc.w d65adlg-d65subs ;19
dc.w d65adlx-d65subs ;20
dc.w d65brlg-d65subs ;21
dc.w d65jpix-d65subs ;22
dc.w d65imac-d65subs ;23
dc.w d65imxy-d65subs ;24
d65subs:
d65adlx:pea d65x(pc)
d65adlg:moveq #0,d0
move.b 2(a5),d0
lsl.w #8,d0
move.b 1(a5),d0
lsl.l #8,d0
move.b (a5),d0
addq.w #3,a5
bra.b d65hex
d65imxy:tst.b idxy8-base(a6)
bra.b d65im
d65imac:tst.b accu8-base(a6)
d65im: beq.b d65imw
d65imi: move.b #"#",(a0)+
d65byte:bra.b d65zp
d65imw: move.b #"#",(a0)+
d65adr: cmp.b #$20,-1(a5) ;jsr abs
beq.b d65adr2
cmp.b #$4c,-1(a5) ;jmp abs
beq.b d65adr2
pea dsnesio(pc) ;comment io reg
d65adr2:moveq #0,d0
move.b 1(a5),d0
lsl.l #8,d0
move.b (a5),d0
addq.w #2,a5
bra.b d65hex
d65zp: moveq #0,d0
move.b (a5)+,d0
d65hex: bra.w hextoa_
d65acu: move.b #"a",(a0)+
d65nop: rts
d65zpix:move.b #"(",(a0)+
bsr.b d65zp
bsr.b d65x
d65brac:move.b #")",(a0)+
rts
d65zpi: move.b #"(",(a0)+
bsr.b d65zp
bra.b d65brac
d65zpiy:bsr.b d65zpi
d65y: move.b #",",(a0)+
move.b #"y",(a0)+
rts
d65zpx: bsr.b d65zp
bra.b d65x
d65adrx:bsr.b d65adr
d65x: move.b #",",(a0)+
move.b #"x",(a0)+
rts
d65adry:bsr.b d65adr
bra.b d65y
d65zpy: bsr.b d65zp
bra.b d65y
d65jpix:move.b #"(",(a0)+
bsr.b d65adr2 ;no io reg comment
bsr.b d65x
bra.b d65brac
d65jmpi:move.b #"(",(a0)+
bsr.b d65adr2 ;no io reg comment
bra.b d65brac
d65brel:move.b (a5)+,d0
ext.w d0
ext.l d0
add.l a5,d0
bra.b d65hex
d65brlg:move.b 1(a5),d0
lsl.w #8,d0
move.b (a5),d0
addq.w #2,a5
ext.l d0
add.l a5,d0
bra.b d65hex
;d65db: move.b -1(a5),d0 ;dc.b changed to wdm instruction
; bra.w bytetoa_
d65zply:pea d65y(pc)
d65zpl: move.b #"[",(a0)+
bsr.w d65zp
move.b #"]",(a0)+
d65dummy:rts
d65srel:bsr.w d65zp
move.b #",",(a0)+
move.b #"s",(a0)+
rts
d65sriy:move.b #"(",(a0)+
bsr.b d65srel
move.b #")",(a0)+
bra.w d65y
dsnesio:movem.l d0-d2/a0-a1,-(a7)
move.w d0,d1
sf d1
cmp.w #$4300,d1 ;dma special
bne.b dsnes2
move.b d0,d1
lsr.b #4,d1
add.b #"0",d1
and.w #$ff8f,d0 ;xx0x-$xx7x
dsnes2: lea snesadr(pc),a1
lea snesreg(pc),a0
dsnes3: tst.w (a1)
bmi.b dsnes0
cmp.w (a1)+,d0
bcs.b dsnes0
cmp.w (a1),d0
bls.b dsnes1
move.w (a1),d2
sub.w -(a1),d2
addq.w #1,d2
addq.w #4,a1
lsl.w #3,d2 ;8chr/entry
add.w d2,a0
bra.b dsnes3
dsnes1:
sub.w -(a1),d0
lsl.w #3,d0
lea (a0,d0.w),a1
lea linebuf+40-base(a6),a0
move.b #";",(a0)+
moveq #8-1,d2
dsnes4: move.b (a1)+,(a0)+
bne.b dsnes5
move.b d1,-1(a0)
dsnes5: dbf d2,dsnes4
dsnes0: movem.l (a7)+,d0-d2/a0-a1
rts
hlbrkpt:movem.l d0/d1/a0,-(a7)
lea brkpadr-base(a6),a0
moveq #brkpnum-1,d0
bsr.b matchit
bpl.b hlit0
lea mtchbuf-base(a6),a0
move.w #mtchnum-1,d0
bsr.b matchit
; bpl.b hlit0
hlit0: movem.l (a7)+,d0/d1/a0
rts
matchit:
hlbp1: move.l (a0)+,d1
beq.b hlbp0
cmp.l hililow-base(a6),d1
bcs.b hlbp0
cmp.l hiliupp-base(a6),d1
bcc.b hlbp0
st hilight-base(a6)
bra.b hlbp2
hlbp0: dbf d0,hlbp1
hlbp2: tst.w d0 ;bpl.b matched
rts
bufaddr:movem.l d0/d1/a0,-(a7)
lea mtchbuf-base(a6),a0
move.w #mtchnum-1,d0
bufadr0:move.l (a0)+,d1
bne.b bufadr1
move.l d6,-(a0)
bra.b bufadr2
bufadr1:cmp.l d6,d1
dbeq d0,bufadr0
bufadr2:movem.l (a7)+,d0/d1/a0
rts
match: lea linebuf-base(a6),a4
lea mtchbuf-base(a6),a1
subq.l #1,d3
bmi.b match0
bne.b matchq
tst.l para-base(a6)
bne.b matchq
move.l a1,a0
move.w #mtchnum-1,d0
match5: clr.l (a0)+
dbf d0,match5
match0: move.l a4,a0
lea 70(a0),a2
move.w #mtchnum-1,d2
match1: move.l (a1)+,d0
beq.b match2
addq.w #1,a0
bsr longtoa_
cmp.l a2,a0
bls.b match2
bsr rawline
match2: dbf d2,match1
cmp.l a0,a4
beq.b match3
bsr rawline
match3: st d7
matchq: rts
disasm: movem.l d0-d7/a0-a4/a6,-(a7) ;yo, funky again...
lea instr(pc),a4 ;a5:pc
move.l a5,d6
move.l a5,hililow-base(a6)
dis2: moveq #xchars/4-1,d0 ;redis
lea linebuf-base(a6),a0
move.l #" ",d1 ;fill linebuf
dis3: move.l d1,(a0)+
dbf d0,dis3
sf ea2nd-base(a6) ;begin with 1st eapos
move.l d6,a5
move.w (a5)+,d1 ;instr.w
dis0: move.w d1,d0
and.w (a4)+,d0 ;mask
cmp.w (a4),d0 ;instrframe
lea 14-2(a4),a4
bne.b dis0 ;scan instr
move.w 4-14(a4),d2 ;info.w
move.l d6,d0
lea linebuf-base(a6),a0
move.w #">,",(a0)+
bsr.w longtoa
addq.w #1,a0
lea -14+6(a4),a1
dis1: move.b (a1)+,(a0)+
bpl.b dis1
bclr #7,-1(a0) ;end
st d7
move.w d2,d4
and.w #$ff00,d4 ;sizeopt
cmp.w #s67,d4
bne.b nos67
bsr.w size67
nos67: cmp.w #s9a_,d4
bne.b nos9a_
bsr.w size9a_
nos9a_: cmp.w #s9a,d4
bne.b nos9a
bsr.w size9a
nos9a: cmp.w #s6,d4
bne.b nos6
bsr.w size6
nos6: cmp.w #s8,d4
bne.b nos8
bsr.w size8
nos8: cmp.w #stab,d4
bne.b nostab
bsr.w opspos
nostab: ;cmp.w #snop,d4
;bne.b nosnop
nosnop:
lea disoffs(pc),a1
ext.w d2 ;clr sizeopt
add.w d2,d2
move.w (a1,d2.w),d2
move.l d6,-(a7)
jsr dissubs(pc,d2.w) ;no d7,a4
move.l (a7)+,d6
tst.b d7
beq.w dis2
move.l a5,hiliupp-base(a6)
movem.l (a7)+,d0-d7/a0-a4/a6
rts
dissubs:
opfail=*-dissubs
moveq #-1,d0
opf0: move.w d0,$dff180
dbf d0,opf0
noops=*-dissubs
rts
dcwop=*-dissubs
move.w d1,d0
bra.w wordtoa_
eatoccr=*-dissubs
sf imsize-base(a6)
bsr.w doea
bra.w optoccr
eatosr=*-dissubs
move.b #1,imsize-base(a6)
bsr.w doea
bra.w optosr
ccrtoea=*-dissubs
bsr.w opccr
bra.b dissrea
srtoea=*-dissubs
bsr.w opsr
dissrea:bra.w dotoea
fpufmt2:dc.b "lsxpwdbp"
dfmvmem:lea movetxt+1(pc),a1 ;fmove
bsr txttobuf
move.b #".",(a0)+
move.w d6,d0
rol.w #6,d0
and.w #%111,d0
move.b fpufmt2(pc,d0.w),(a0)+
bsr opspos
moveq #%111000,d2
and.w d1,d2
bne.b no2dreg ;dn ?
tst.b d0 ;%000.l
beq.b no2dreg
subq.b #1,d0 ;%001.s
beq.b no2dreg
subq.b #3,d0 ;%100.w
beq.b no2dreg
subq.b #2,d0 ;%110.b
bne.b dmvfail
no2dreg:cmp.b #%001000,d2 ;an ?
beq.b dmvfail
moveq #%01111111,d5
and.w d6,d5 ;k factor
moveq #1,d3 ;static k
subq.b #%011,d0 ;p{#k}
beq.b dfmvk0
moveq #2,d3 ;dynamic k
subq.b #%111-%011,d0 ;p{dn}
beq.b dfmvk0
tst.b d5
bne.b dmvfail ;k factor>0 ?
moveq #0,d3 ;no k factor
dfmvk0: move.w d6,d0
lsr.w #7,d0
and.w #%111,d0
bsr.w dfp5 ;fpn
bsr dotoea
subq.b #1,d3 ;k factor ?
bmi.b dfmvk1
move.b #"{",(a0)+
tst.b d3 ;static ?
beq.b dfmvkp0
moveq #%1111,d0
and.b d5,d0
bne.b dmvfail ;unused bits
move.b #"d",(a0)+
lsr.b #4,d5
bra.b dfmvkp
dfmvkp0:move.b #"#",(a0)+
btst #6,d5
beq.b dfmvkp
bset #7,d5
neg.b d5
move.b #"-",(a0)+
dfmvkp: move.l d5,d0
bsr.w hextod
move.b #"}",(a0)+
dfmvk1: rts
dmvfail:bra fail
dfpu=*-dissubs
move.w (a5)+,d6 ;fpu extension word
move.w #$e000,d0
and.w d6,d0
cmp.w #$6000,d0
beq.w dfmvmem
move.w #$a000,d0
and.w d6,d0
bne.b dffail
btst #14,d6 ;r/m
bne.b dfp0
tst.b d1 ;ea field=0?
bne.b dffail
dfp0: lea fpuinst(pc),a1
moveq #%01111111,d0
and.w d6,d0
dfp2: move.b (a1)+,d2
bclr #7,d2
sne d3 ;0:fp0,ff:fp0,fp0
moveq #%01111000,d4
and.b d6,d4
cmp.b #%00110000,d4 ;sincos
seq d4
beq.b dfp1
cmp.b d2,d0
beq.b dfp1
addq.w #6,a1
tst.b (a1)
bne.b dfp2
dffail: sf d7
rts
fpufmt: dc.b "lsxpwdb*"
fpuims: dc.b %010,%010,%110,%110,%001,%100,%000,-1
dfp1: bsr.w txttobuf
move.b #".",(a0)+
move.w d6,d0
rol.w #6,d0
and.w #%111,d0
btst #14,d6
beq.b dfp3
cmp.w #%111,d0
beq.b dffail
move.b fpufmt(pc,d0),(a0)+
move.b fpuims(pc,d0.w),imsize-base(a6)
bsr.w opspos
moveq #%111000,d2
and.w d1,d2 ;src:datareg?
bne.b dfp8
tst.b d0 ;%000.l
beq.b dfp8
subq.b #1,d0 ;%001.s
beq.b dfp8
subq.b #3,d0 ;%100.w
beq.b dfp8
subq.b #2,d0 ;%110.b
bne.b dffail
dfp8: cmp.b #%001000,d2 ;an
beq.b dffail
bsr.w doea ;imsize!!!
st d0 ;dest fpureg
sf d3
bra.b dfp6
dfp3: move.b #"x",(a0)+
bsr.w opspos
bsr.b dfp5
dfp6: moveq #%01111111,d2
and.w d6,d2
cmp.b #%00111010,d2
bne.b dftst
and.w #$0380,d6 ;ftst:dst=0
bne.w fail
rts
dftst: tst.b d4
beq.b dsncs
moveq #%111,d2
and.w d6,d2
bsr.b dfp7
move.b #":",(a0)+
move.w d6,d0
lsr.w #7,d0
and.w #%111,d0
bra.b dfp5
dsncs: move.w d6,d2
lsr.w #7,d2
and.w #%111,d2
tst.b d3
bne.b dfp7 ;show fp0,fp0
cmp.b d0,d2
beq.b dfp4
dfp7: move.w d2,d0
move.b #",",(a0)+
dfp5: move.b #"f",(a0)+
move.b #"p",(a0)+
moveq #"0",d2
add.b d0,d2
move.b d2,(a0)+
dfp4: rts
dfmovemx=*-dissubs
move.w #$c700,d0
and.w (a5),d0
cmp.w #$c000,d0 ;fmovem fpx?
bne.w fail
move.w (a5)+,d3
btst #13,d3
bne.b dfmovm1
bsr doea
move.b #",",(a0)+
bra dofprx
dfmovm1:bsr dofprx
bra dotoea
dfmoveml=*-dissubs
st d5
bra.b dfmovem
dfmovel=*-dissubs
sf d5 ;no fmovem
dfmovem:move.w #$c3ff,d0
and.w (a5),d0
cmp.w #$8000,d0
bne.w fail
move.b #%010,imsize-base(a6) ;long
move.w (a5)+,d6
eor.w d0,d6
btst #10,d6
sne d4
btst #11,d6
sne d0
add.b d0,d4
btst #12,d6
sne d0
add.b d0,d4 ;singleflag:0:0,-1:1,-2:2,-3:3
beq.w fail ;0 fpcr
moveq #%111000,d0
and.w d1,d0 ;Dn?
bne.b nofdreg
cmp.b #-1,d4 ;1 fpcr?
bne.w fail
nofdreg:subq.w #%001000,d0 ;An?
bne.b nofareg
cmp.b #-1,d4 ;1 fpcr?
bne.w fail
btst #10,d6 ;fpcr=fpiar?
beq.w fail
nofareg:bclr #13,d6
beq.b tofpcr
bsr.b dofpcr
bra dotoea
tofpcr: bsr doea
move.b #",",(a0)+
dofpcr: move.b #"f",(a0)+
move.b #"p",(a0)+
moveq #"c",d0
bclr #12,d6
bne.b fpcr0
moveq #"s",d0
bclr #11,d6
bne.b fpcr0
move.b #"i",(a0)+
moveq #"a",d0
bclr #10,d6
beq.w fail
fpcr0: move.b d0,(a0)+
move.b #"r",(a0)+
tst.w d6
beq.b fpsingl
tst.b d5 ;fmovem?
beq.w fail
move.b #"/",(a0)+
bra.b dofpcr
fpsingl:rts
dfmovecr=*-dissubs
move.w (a5),d0
and.w #$fc40,d0
cmp.w #$5c00,d0
bne.w fail
moveq #$003f,d0
and.w (a5),d0
move.w d0,d1
beq.b dfmk1x
cmp.b #$30,d0
bcc.w dfmk3x
cmp.b #$0f,d0
bhi.w fail
cmp.b #$0b,d0
bcs.w fail
sub.b #$0b-1,d1
bra.b dfmk1x
dfmk3x: sub.b #$30-($0f-$0b)-2,d1
dfmk1x: move.b #"#",(a0)+
bsr.w hextoa_
move.w (a5)+,d0
bsr.w optofpx79
lea linebuf+40-base(a6),a0
move.b #";",(a0)+
lea fmconst(pc),a1
cmp.b #10,d1 ;Pi..100
bls.b skipcr
bsr.b dfmk0
moveq #0,d0
sub.b #9,d1 ;1E4..1E4096
bset d1,d0
bra.w hextod
skipcr: tst.b (a1)+
bpl.b skipcr
dbf d1,skipcr
dfmk0: bra.w txttobuf
dpccodewordrel=*-dissubs
moveq #-16,d0 ;$fff0 16 mmu ccodes
and.w (a5),d0
bne.w fail
move.w (a5)+,d0
bsr.w dopcc
bra.b dfcc0
dfccodewordrel=*-dissubs
moveq #-32,d0 ;$ffe0 32 fpu ccodes
and.w (a5),d0
bne.w fail
move.w (a5)+,d0
bsr.w dofcc
dfcc0: bsr.w opspos
bsr.w opdx02
move.b #",",(a0)+
move.w (a5)+,d0
lea -2(a5,d0.w),a1 ;instrlen:4bytes (oma bug)
bra.b wbx2
ccodewordrel=*-dissubs
move.w d1,d0
bsr.w docc
wbx4: bsr.w opspos
bsr.w opdx02
move.b #",",(a0)+
bra.b wbx3
wordcc=*-dissubs
move.w d1,d0
bsr.w docc
wordcc0:bsr.w chr2buf
dc.w ".w" ;bxx.w
bsr.w opspos
wordbxx=*-dissubs
wbx3: move.w (a5)+,d0
lea -2(a5,d0.w),a1
wbx2: move.l a1,d0
bra.w hextoa_ ;bra.w longtoa_
longcc=*-dissubs
move.w d1,d0
bsr.w docc
longcc0:bsr.w chr2buf
dc.w ".l" ;bxx.l
bsr.w opspos
longbxx=*-dissubs
move.l (a5)+,d0
lea -4(a5,d0.l),a1
bra.b wbx2
shortcc=*-dissubs
move.w d1,d0
bsr.w docc
bsr.w chr2buf
dc.w ".b"
bsr.w opspos
shortbxx=*-dissubs
move.b d1,d0
ext.w d0
lea (a5,d0.w),a1
bra.b wbx2
dbrapcc=*-dissubs
move.w d1,d0
bsr.w dopcc
bra.b dbra0
dbrafcc=*-dissubs
move.w d1,d0
bsr.w dofcc
dbra0: btst #6,d1
beq.b wordcc0
bra.b longcc0
eatoax=*-dissubs
bsr.w doea
bra.w optoax9b
ea2todx=*-dissubs
move.b #2,imsize-base(a6) ;68020:chk.l #i.l,<ea>
bra.b ea2dx
eatodx=*-dissubs
move.b #1,imsize-base(a6)
ea2dx:
size67eatodx=*-dissubs
bsr.w doea
bra.w optodx9b
dxtoea=*-dissubs ;no im possible
bsr.w opdx9b
move.w #$f1c0,d0
and.w d1,d0
cmp.w #$0100,d0 ;btst: pcrel allowed
beq.b dxtea0
bra.w dotoea
dxtea0: move.b #",",(a0)+
bra.w doea
iwordtoccr=*-dissubs
move.b #"#",(a0)+ ;8/16?
moveq #0,d0
move.b (a5)+,d0
bne.w fail
move.b (a5)+,d0
bsr.w hextoa_ ;bsr.w bytetoa_
bra.w optoccr
iwordtosr=*-dissubs
bsr.b iwrd
bra.w optosr
toiword:move.b #",",(a0)+
iword=*-dissubs
iwrd: move.b #"#",(a0)+
moveq #0,d0
move.w (a5)+,d0
bra.w hextoa_ ;bra.w wordtoa_
dlpstop=*-dissubs
cmp.w #$01c0,(a5)+
beq.b iwrd
bra.w fail
dtbl=*-dissubs
move.w (a5),d0
and.w #$8238,d0
bne.w fail
move.w (a5),d0
moveq #"s",d3
btst #11,d0
bne.b dtbls
moveq #"u",d3
dtbls: move.b d3,(a0)+
btst #10,d0
beq.b dtblr
move.b #"n",(a0)+
dtblr: bsr.w siz67d0 ;sets imsize,del:d0
move.w (a5)+,d3
btst #8,d3 ;datareg|eamode
beq.b dtbldat
moveq #%111111,d0
and.w d3,d0
bne.w fail
bsr.w doea
bra.b dtblreg
dtbldat:bsr.w opdx02
move.b #":",(a0)+
move.b #"d",(a0)+
move.w d3,d0
bsr.w op0xx02
dtblreg:move.w d3,d0
rol.w #4,d0
move.b #",",(a0)+
move.b #"d",(a0)+
bra.w op0xx02
inibtoea=*-dissubs
move.b #"#",(a0)+
move.w (a5)+,d0
and.l #%11111,d0 ;#0-31(7)
bsr.w hextod
move.w #$ffc0,d0
and.w d1,d0
cmp.w #$0800,d0 ;btst: pcrel allowed
beq.b inibea0
bra.w dotoea
inibea0:move.b #",",(a0)+
bra.w doea
dpccodeea=*-dissubs
moveq #-16,d0
and.w (a5),d0
bne.w fail
move.w (a5)+,d0
bsr.w dopcc
bra.b ccode0
fccodeea=*-dissubs
moveq #-32,d0
and.w (a5),d0
bne.w fail
move.w (a5)+,d0
bsr.w dofcc
bra.b ccode0
ccodeea=*-dissubs
move.w d1,d0
bsr.w docc
ccode0: bsr.w opspos
srcea=*-dissubs
bra.w doea
imoves=*-dissubs
move.w (a5)+,d3
move.w #$07ff,d0
and.w d3,d0
bne.w fail
bclr #11,d3
bne.b mvsrx
bsr.w doea
move.b #",",(a0)+
bra.w mvcrxcf
mvsrx: bsr.w mvcrxcf
bra.w dotoea
size67ixtoea=*-dissubs
bsr.w immediate
bra.w dotoea
size67i9btoea=*-dissubs
bsr.w opi9b
bra.w dotoea
size67x9btodx02=*-dissubs
btst #5,d1
beq.b shi9b
bsr.w opdx9b
bra.b shdx9b
shi9b: bsr.w opi9b
shdx9b: bra.w optodx02
itrap=*-dissubs
move.b #"#",(a0)+
move.w d1,d0
bra.w nibtod
srcdx02=*-dissubs
bra.w opdx02
imusp=*-dissubs
btst #3,d1
beq.b imusp0
bsr.w opusp
bra.w optoax02
imusp0: bsr.w opax02
bra.w optousp
dpmovefd=*-dissubs ;68030mmu only
move.w (a5),d0
cmp.w #$4100,d0 ;40:tc
beq.w dpmvfd
eor.w #%0000100100000000,d0 ;08:tt0,0c:tt1,48:srp,4c:crp
and.w #%1011101111111111,d0
bne.w fail
bra.b dpmvfd ;bit9=0
dpmove=*-dissubs
move.w #$01ff,d0
and.w (a5),d0
bne.w fail
dpmvfd: move.w (a5)+,d3
bclr #8,d3 ;pmovefd bit
bclr #9,d3
bne.b pmvtoea
bsr.w doea
move.b #",",(a0)+
bra.b pmvreg
pmvtoea:bsr.b pmvreg
bra.w dotoea
pmvreg: lea pregs(pc),a1
lsr.w #8,d3
pmvlp: move.b (a1)+,d0
beq.w fail
cmp.b d3,d0
beq.b pmvfnd
pmvscan:btst #7,(a1)+
beq.b pmvscan
bra.b pmvlp
pmvfnd: bra.w txttobuf
didbcac=*-dissubs ;68040
didb0: lsr.w #6,d1
moveq #3,d0
and.w d1,d0
move.b idctx(pc,d0.w),(a0)+
move.b #"c",(a0)+
rts
idctx: dc.l "ndib" ;nc,dc,ic,bc
didbind=*-dissubs
move.w d1,-(a7)
bsr.b didb0
move.w (a7)+,d1
bra.w toaindirect
dpflush40=*-dissubs ;pflush,ptestr,ptestw
bra.w aindirect
imovec=*-dissubs
move.w (a5)+,d3
btst #0,d1
bne.b toctrl
bsr.b mvcregs
move.b #",",(a0)+
bra.b mvcrxcf
toctrl: bsr.b mvcrxcf
move.b #",",(a0)+
mvcregs:lea cregs(pc),a1
move.w d3,d1
and.w #$0fff,d1
nxtctrl:cmp.w (a1),d1
beq.b mvcctrl
tst.w (a1)
addq.w #6,a1
bne.b nxtctrl
bra.w fail
mvcctrl:addq.w #2,a1
move.b (a1)+,(a0)+
move.b (a1)+,(a0)+
tst.b (a1)
beq.b ctrl3ch
move.b (a1)+,(a0)+
tst.b (a1)
beq.b ctrl3ch
move.b (a1),(a0)+
ctrl3ch:rts
mvcrxcf:move.w d3,d0 ;movec,moves
dbfireg:and.w #$f000,d0 ;bitfield
rol.w #4,d0
dbytreg:add.b #"0",d0
move.b #"a",(a0)+
bclr #3,d0
bne.b mvcax
addq.b #"d"-"a",-1(a0)
mvcax: move.b d0,(a0)+
rts
dbfieldtodx=*-dissubs
move.w (a5)+,d2
btst #15,d2
bne.w fail
bsr.b dbfi3
move.b #",",(a0)+
move.w d2,d0
bra.b dbfireg
ddxtobfield=*-dissubs
move.w (a5),d0
btst #15,d0
bne.w fail
bsr.b dbfireg
move.b #",",(a0)+
move.w (a5)+,d2
bra.b dbfi3
dbfield=*-dissubs
move.w (a5)+,d2
move.w d2,d0
and.w #$f000,d0
bne.w fail
dbfi3: bsr.w doea
move.b #"{",(a0)+
move.w d2,d0
lsr.w #6,d0
bsr.b dbfi2
move.b #":",(a0)+
move.w d2,d0
bsr.b dbfi2
move.b #"}",(a0)+
rts
dbfi2: btst #11-6,d0
bne.b dbfi1
and.b #%11111,d0
bne.b no32
moveq #32,d0
no32: bra.w bytetod
dbfi1: btst #10-6,d0 ;y00xxxy00xxx
bne.w fail
btst #9-6,d0
bne.w fail
move.b #"d",(a0)+
and.b #%111,d0
add.b #"0",d0
move.b d0,(a0)+
rts
dbkpt=*-dissubs
move.b #"#",(a0)+
bra.w opxx02
dpack=*-dissubs
btst #3,d1
beq.b dpadx
bsr.w chr2buf
dc.w "-("
bsr.w opax02
bsr.w chr4buf
dc.l "),-("
bsr.w opax9b
move.b #")",(a0)+
bra.b dpad0
dpadx: bsr.w opdx02
bsr.w optodx9b
dpad0: bra.w toiword
dmov16=*-dissubs
move.w (a5),d2
and.w #$8fff,d2
cmp.w #$8000,d2
bne.w fail
bsr.w aindirectpost
move.w (a5)+,d1
rol.w #4,d1
bra.w toaindirectpost
dmov162=*-dissubs
moveq #%010000,d2 ;(ax)
bclr #4,d1
bne.b dmov1
moveq #%011000,d2 ;(ax)+
dmov1: bclr #3,d1
beq.b dmov0
bsr.b dmov2
or.w d2,d1
bra.w dotoea
dmov0: or.w d2,d1
bsr.w doea
move.b #",",(a0)+
dmov2: bra.w abslong
imove=*-dissubs
move.w d1,d0
and.w #%0011000000000000,d0
rol.w #4,d0
bne.b imo0
sf d7
rts
imo0: lea sizemov(pc),a1
move.b (a1,d0.w),(a0)+
move.b 4(a1,d0.w),imsize-base(a6)
bsr.w opspos
bsr.w doea
move.w d1,d0
rol.w #7,d0
and.w #%111,d0
move.w d1,d3
lsr.w #3,d3
and.w #%111000,d3
or.w d3,d0
move.w d0,d1
bra.w dotoea
imoveq=*-dissubs
move.b #"#",(a0)+
moveq #0,d0
move.b d1,d0
bsr.w hextoa_ ;bsr.w bytetoa_
bra.w optodx9b
icallm=*-dissubs
tst.b (a5)
bne.w fail
move.w d1,-(a7)
move.b #"#",(a0)+
moveq #0,d0
move.b (a5)+,d0
bne.w fail
move.b (a5)+,d0
bsr.w hextoa_ ;bsr.w bytetoa_
move.w (a7)+,d1
bra.w dotoea
dcas=*-dissubs
bsr.w opspos
move.w (a5),d0
and.w #$0e38,d0
bne.w fail
move.w (a5),d0
move.b #"d",(a0)+
bsr.w op0xx02
move.b #",",(a0)+
move.w (a5)+,d0
lsr.w #6,d0
move.b #"d",(a0)+
bsr.w op0xx02
bra.w dotoea
dcas2=*-dissubs
moveq #"w",d2
btst #9,d1
beq.b dca0
moveq #"l",d2
dca0: move.b d2,(a0)+
bsr.w opspos
move.l (a5),d2
and.l #$0e380e38,d2
bne.w fail
move.l (a5),d2
bsr.b casop
move.b #",",(a0)+
lsr.l #6,d2
bsr.b casop
bsr.w chr2buf
dc.w ",("
move.w (a5)+,d0
bsr.w dbfireg
bsr.w chr3buf
dc.l "):("<<8
move.w (a5)+,d0
bsr.w dbfireg
move.b #")",(a0)+
rts
casop: move.l d2,d0
swap d0
move.b #"d",(a0)+
bsr.w op0xx02
move.w d2,d0
bsr.w chr2buf
dc.w ":d"
bra.w op0xx02
dchk2=*-dissubs
move.w (a5)+,d2
btst #11,d2
beq.w fail
bra.b dchkcmp
dcmp2=*-dissubs
move.w (a5)+,d2
btst #11,d2
bne.w fail
dchkcmp:bsr.w doea
move.b #",",(a0)+
move.w d2,d0
bra.w dbfireg
drtm=*-dissubs
moveq #$0f,d0
and.w d1,d0
bra.w dbytreg
dtpccsize=*-dissubs
move.w d1,d0
bsr.w docc
dtpc2: move.b #".",(a0)+
moveq #"w",d0
btst #0,d1
beq.b dtpc1
moveq #"l",d0
dtpc1: move.b d0,(a0)+
bsr.w opspos
move.b #"#",(a0)+
moveq #0,d0
btst d0,d1
bne.b dtpc0
move.w (a5)+,d0
bra.w hextoa_ ;bra.w wordtoa_
dtpc0: move.l (a5)+,d0
bra.w hextoa_ ;bra.w longtoa_
dtpcc=*-dissubs
move.w d1,d0
bra.w docc
dtpfccsize=*-dissubs
bsr.b dtpfcc0
bra.b dtpc2
dtpfcc=*-dissubs
dtpfcc0:moveq #-32,d0 ;$ffe0 ;32 fpu ccodes
and.w (a5),d0
bne.w fail
move.w (a5)+,d0
bra.w dofcc
dtppccsize=*-dissubs
bsr.b dtppcc0
bra.b dtpc2
dtppcc=*-dissubs
dtppcc0:moveq #-16,d0 ;$fff0 ;16 mmu ccodes
and.w (a5),d0
bne.w fail
move.w (a5)+,d0
bra.w dopcc
dfnop=*-dissubs
tst.w (a5)+ ;4byte command
seq d7
rts
dpvalid=*-dissubs
moveq #-8,d0
and.w (a5),d0
cmp.w #$2c00,d0
bne.w fail
move.w (a5)+,d0
move.b #"a",(a0)+
bsr.w op0xx02
bra.w dotoea
dpflusha=*-dissubs
cmp.w #$2400,(a5)+
seq d7
rts
dpflushr=*-dissubs
cmp.w #$a000,(a5)+
bne.w fail
bra.w doea
dpflushs=*-dissubs
cmp.b #$34,(a5)
beq.b dpfl4
dpfl5: bra.w fail
dpflush=*-dissubs
cmp.b #$30,(a5)
bne.b dpfl5
dpfl4: move.w (a5)+,d0
moveq #%00011000,d1
and.w d0,d1
bne.b dpfl1
moveq #%00000111,d1
moveq #"s",d2
and.w d0,d1
beq.b dpfl2
moveq #"d",d2
subq.b #1,d1
bne.w fail
dpfl2: move.b d2,(a0)+
bsr.w chr2buf
dc.w "fc"
bra.b dpfl3
dpfl1: cmp.w #%00011000,d1 ;illegal
beq.w fail
moveq #"#",d1
bclr #3,d0
beq.b dpfl0
moveq #"d",d1
dpfl0: move.b d1,(a0)+
bsr.w nibtoa
dpfl3: bsr.w chr2buf
dc.w ",#"
lsr.w #5,d0
bra.w op0xx02
dpload=*-dissubs
move.w (a5),d0
and.w #$fdf8,d0
cmp.w #$2010,d0
bne.w fail
dpte0: move.w (a5)+,d0
move.b #"r",(a0)
btst #9,d0
bne.b dplo0
addq.b #"w"-"r",(a0)
dplo0: bsr.w opspos
move.b #"#",(a0)+
bsr.w nibtoa
bra.w dotoea
dptest=*-dissubs
move.w (a5),d0
and.w #$e118,d0
cmp.w #$8110,d0
bne.w fail
move.w (a5),d2
bsr.b dpte0
bsr.w chr2buf
dc.w ",#"
move.w d2,d0
rol.w #6,d0
moveq #%111,d2
and.b d0,d2
beq.w fail ;level 0
bsr.w nibtoa
bsr.w chr2buf
dc.w ",a"
rol.w #5,d0
bclr #3,d0
bra.w nibtoa
ddivsll=*-dissubs
move.w (a5)+,d2
bchg #10,d2 ;dn:dm mode,set g=1
bne.w fail
bsr.b dmul5
bra.b ddivl
ddivull=*-dissubs
move.w (a5)+,d2
bchg #10,d2 ;dn:dm mode,set g=1
bne.w fail
bsr.b dmul4
ddivl: sub.b d2,d1
and.b #%111,d1 ;dm=dn
beq.w fail
rts
dmulsl=*-dissubs
dmul3: move.w (a5)+,d2
dmul5: btst #11,d2
beq.w fail
bra.b dmul1
dmulul=*-dissubs
dmul2: move.w (a5)+,d2
dmul4: btst #11,d2
bne.w fail
dmul1: move.w #$83f8,d0
and.w d2,d0
bne.w fail
move.b #%10,imsize-base(a6) ;longwords
bsr.w doea
move.b #",",(a0)+
move.w d2,d1
btst #10,d2
beq.b dmul0
bsr.w opdx02
move.b #":",(a0)+
rol.w #4,d1
bra.w opdx02
dmul0: rol.w #4,d1
bsr.w opdx02
sub.b d2,d1
and.b #%111,d1 ;mulxl ea,dn:dm=dn
bne.w fail
rts
icmpm=*-dissubs
bsr.w aindirectpost
rol.w #7,d1 ;(ax)+
bra.w toaindirectpost
xbcd=*-dissubs
bclr #14,d1
bclr #3,d1 ;dx
beq.b xbcdx
bset #5,d1 ;-(ax)
bset #14,d1
xbcdx: bsr.w doea ;no im possible
rol.w #7,d1
bra.w dotoea
size67adsbx=*-dissubs
bclr #14,d1
bclr #12,d1
bclr #3,d1 ;dx
beq.b adsbxdx
bset #14,d1 ;-(ax)
bset #5,d1
adsbxdx:bsr.w doea
rol.w #7,d1
bra.w dotoea
size6movep=*-dissubs
bset #5,d1 ;d(ax)
btst #7,d1
beq.b mptodx
bsr.w opdx9b
bra.w dotoea
mptodx: bsr.w doea
bra.w optodx9b
imovem=*-dissubs
move.w (a5)+,d3 ;regbits
btst #10,d1 ;dir
bne.b torx
bsr.w dorx
bra.w dotoea
torx: bsr.w doea
move.b #",",(a0)+
bra.w dorx
dx9btodx02=*-dissubs
bsr.w opdx9b
bra.w optodx02
ax9btoax02=*-dissubs
bsr.w opax9b
bra.w optoax02
dx9btoax02=*-dissubs
bsr.w opdx9b
bra.w optoax02
dlinklg=*-dissubs
bsr.b iunl0
bsr.w chr2buf
dc.w ",#"
bra.w dtpc0
ilink=*-dissubs
bsr.b iunl0
bra.w toiword
iunlk=*-dissubs
iunl0: bra.w opax02
size8eatoax9b=*-dissubs
bsr.w doea
bra.b optoax9b
size8: btst #8,d1
beq.b siz60
bra.b siz61
size6: btst #6,d1
bne.b siz61
siz60: moveq #"w",d0
move.b #1,imsize-base(a6)
bra.b siz62
siz61: moveq #"l",d0
move.b #2,imsize-base(a6)
siz62: move.b #".",(a0)+
move.b d0,(a0)
bra.b opspos
size9a_:move.w d1,d0 ;01.b,10.w,11.l,00.*
lsr.w #3,d0
sub.w #%01000000,d0
bra.b si9a
size9a: move.w d1,d0 ;00.b,01.w,10.l,11.*
lsr.w #3,d0
bra.b si9a
size67: move.w d1,d0
siz67d0:
si9a: and.w #%11000000,d0
cmp.w #%11000000,d0
beq.w fail
lsr.w #6,d0
move.b d0,imsize-base(a6) ;00.b,01.w,10.l,11.*
move.b #".",(a0)+
move.b sizetxt(pc,d0.w),(a0)
opspos: lea linebuf+23-base(a6),a0 ;ftrapngle.l
rts
sizetxt:dc.l "bwl*"
opi9b: move.b #"#",(a0)+
move.w d1,d0
and.w #%111000000000,d0
rol.w #7,d0
bne.b i9b0
moveq #8,d0
i9b0: bra.w nibtod
optoax9b:move.b #",",(a0)+
opax9b: move.b #"a",(a0)+
bra.b opxx
optodx9b:move.b #",",(a0)+
opdx9b: move.b #"d",(a0)+
opxx: move.w d1,d0
and.w #%111000000000,d0
rol.w #7,d0
add.b #"0",d0
move.b d0,(a0)+
rts
optoax02:move.b #",",(a0)+
opax02: move.b #"a",(a0)+
bra.b opxx02
optodx02:move.b #",",(a0)+
opdx02: move.b #"d",(a0)+
opxx02: move.w d1,d0
op0xx02:and.w #%111,d0
add.b #"0",d0
move.b d0,(a0)+
rts
optofpx79:move.b #",",(a0)+
opfpx79:bsr.b chr2buf
dc.w "fp"
lsr.w #7,d0
bra.b op0xx02
optousp:move.b #",",(a0)+
opusp: lea usptxt(pc),a1
bra.b txttobuf
optoccr:move.b #",",(a0)+
opccr: lea ccrtxt(pc),a1
bra.b txttobuf
optosr: move.b #",",(a0)+
opsr: lea srtxt(pc),a1
txttobuf:
move.b (a1)+,(a0)
bclr #7,(a0)+
beq.b txttobuf
txtq: rts
chr2buf:move.l a1,-(a7) ;copies 2 chrs below bsr chr2buf
move.l 4(a7),a1
move.b (a1)+,(a0)+
move.b (a1)+,(a0)+
move.l (a7)+,a1
addq.l #2,(a7)
rts
chr3buf: ;copies 3 chrs below bsr chr3buf
chr4buf:move.l a1,-(a7) ;copies 4 chrs below bsr chr4buf
move.l 4(a7),a1
move.b (a1)+,(a0)+
move.b (a1)+,(a0)+
move.b (a1)+,(a0)+
tst.b (a1)
beq.b chr0
move.b (a1)+,(a0)+
chr0: move.l (a7)+,a1
addq.l #4,(a7)
rts
bcpltobuf:move.b (a1)+,d0
bcpl0: subq.b #1,d0
bmi.b bcpl1
move.b (a1)+,(a0)+
bra.b bcpl0
bcpl1: rts
dorx: move.w d1,d0
and.w #%111000,d0
cmp.w #%100000,d0 ;-(ax)
bne.b drx8
moveq #16-1,d2
drx9: lsr.w #1,d3
roxl.w #1,d0
dbf d2,drx9
move.w d0,d3
drx8: sf d5
clr.w d2
moveq #"d",d0
bsr.b drx0
moveq #"a",d0
drx0: moveq #8,d4
drx1: tst.w d4
beq.b drx5
btst d2,d3
bne.b drx2
addq.w #1,d2
subq.w #1,d4
bra.b drx1
drx2: tas d5
beq.b drx3
move.b #"/",(a0)+
drx3: move.b d0,(a0)+
move.b d2,(a0)
add.b #"0",(a0)
bclr #3,(a0)+
sf d6
drx4: addq.w #1,d2
subq.w #1,d4
beq.b drx6
btst d2,d3
beq.b drx6
st d6
bra.b drx4
drx6: tst.b d6
beq.b drx7
move.b #"-",(a0)+
move.b d0,(a0)+
move.b d2,(a0)
add.b #"0"-1,(a0)
bclr #3,(a0)+
drx7: tst.w d4
beq.b drx5
subq.w #1,d4
addq.w #1,d2
bra.b drx1
drx5: rts
dofprx: move.w d1,d0
and.w #%111000,d0
beq.w fail ;Dn
cmp.w #%001000,d0 ;An
beq.w fail
moveq #%01110000,d6
and.l d3,d6 ;pos
cmp.b d3,d6
beq.b dfprxa
moveq #-1,d6 ;neg:bad dynamic mask
dfprxa: lsr.b #4,d6
add.b #"0",d6 ;dynamic mask
cmp.w #%100000,d0 ;-(ax)
bne.b dfprx8
btst #13,d3 ;dr field
beq.w fail ;to FPx?
btst #12,d3 ;mode
bne.w fail ;no predec mode?
moveq #8-1,d2
dfprx9: lsr.b #1,d3
roxl.b #1,d0
dbf d2,dfprx9
move.b d0,d3
bra.b dfprx0
dfprx8: btst #12,d3 ;mode
beq.w fail ;predec mode?
dfprx0: btst #11,d3
beq.b dfpstat
tst.l d6
bmi.w fail ;bad dynamic mask
move.b #"d",(a0)+
move.b d6,(a0)+
dfprx5: rts
dfpstat:sf d0
moveq #8-1,d2
dfprx1: tst.w d2
bmi.b dfprx5
btst d2,d3
bne.b dfprx2
subq.w #1,d2
bra.b dfprx1
dfprx2: tas d0
beq.b dfprx3
move.b #"/",(a0)+
dfprx3: move.b #"f",(a0)+
move.b #"p",(a0)+
move.b #"7",(a0)
sub.b d2,(a0)+
sf d6
dfprx4: subq.w #1,d2
bmi.b dfprx6
btst d2,d3
beq.b dfprx6
st d6
bra.b dfprx4
dfprx6: tst.b d6
beq.b dfprx7
move.b #"-",(a0)+
move.b #"f",(a0)+
move.b #"p",(a0)+
move.b #"7"-1,(a0)
sub.b d2,(a0)+
dfprx7: tst.w d2
bmi.b dfprx5
subq.w #1,d2
bra.b dfprx1
docc: lea ccodetxt(pc),a1
and.w #%111100000000,d0
lsr.w #7,d0
lea (a1,d0.w),a1
move.b (a1)+,(a0)+
tst.b (a1)
beq.b docc0
move.b (a1)+,(a0)+
docc0: rts
dopcc: lea pccodetxt(pc),a1
and.w #%001111,d0
add.w d0,d0
lea (a1,d0.w),a1
move.b (a1)+,(a0)+
move.b (a1)+,(a0)+
rts
dofcc: lea fccodetxt(pc),a1
and.w #%011111,d0
add.w d0,d0
add.w d0,d0
lea (a1,d0.w),a1
move.b (a1)+,(a0)+ ;1..4 chars
tst.b (a1)
beq.b dofcc0
move.b (a1)+,(a0)+
tst.b (a1)
beq.b dofcc0
move.b (a1)+,(a0)+
tst.b (a1)
beq.b dofcc0
move.b (a1)+,(a0)+
dofcc0: rts
dotoea: move.w d1,d0
and.w #%111111,d0
cmp.w #%111001,d0 ;dest:(pc),d(pc),#xx invalid
bls.b doto0
sf d7
rts
doto0: move.b #",",(a0)+
doea: moveq #%111000,d0
and.w d1,d0
lsr.w #2,d0
pea eatab(pc)
move.w eatab(pc,d0.w),d0 ;ext.l obsolete
add.l d0,(a7)
rts
eatab: dc.w ddirect-eatab
dc.w adirect-eatab
dc.w aindirect-eatab
dc.w aindirectpost-eatab
dc.w aindirectpre-eatab
dc.w aindirectdisp-eatab
dc.w aindirectindex-eatab
dc.w mode7-eatab
ddirect:move.b #"d",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b d0,(a0)+
rts
adirect:move.b #"a",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b d0,(a0)+
rts
toaindirect:
move.b #",",(a0)+
aindirect:
move.b #"(",(a0)+
move.b #"a",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b d0,(a0)+
move.b #")",(a0)+
bsr.w setbase
bra.w eaval
toaindirectpost:
move.b #",",(a0)+
aindirectpost:
move.b #"(",(a0)+
move.b #"a",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b d0,(a0)+
move.b #")",(a0)+
move.b #"+",(a0)+
bsr.w setbase
bra.w eaval
aindirectpre:
move.b #"-",(a0)+
move.b #"(",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b #"a",(a0)+
move.b d0,(a0)+
move.b #")",(a0)+
bsr.w setbase
bra.w eaval
aindirectdisp:
move.b #"(",(a0)+
move.w (a5),d0
bsr.w swordtoa_
move.b #",",(a0)+
move.b #"a",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b d0,(a0)+
move.b #")",(a0)+
bsr.w setbase
move.w (a5)+,d0
ext.l d0
add.l d0,basereg-base(a6)
bra.w eaval
aindirectindex:
btst #0,(a5)
bne.w indfull
bsr.w setbase
move.b #"(",(a0)+
move.w (a5),d0
bsr.w sbytetoa_
ext.w d0
ext.l d0
add.l d0,basereg-base(a6)
move.b #",",(a0)+
move.b #"a",(a0)+
moveq #%000111,d0
and.w d1,d0
add.b #"0",d0
move.b d0,(a0)+
move.b #",",(a0)+
moveq #"d",d0
btst #7,(a5)
beq.b ind0
moveq #"a",d0
ind0: move.b d0,(a0)+
moveq #%01110000,d0
and.b (a5),d0
lsr.b #4,d0
add.b #"0",d0
move.b d0,(a0)+
movem.l d1/a1,-(a7)
move.w #%11110000,d0
and.b (a5),d0
lsr.b #2,d0
lea regs-base(a6),a1
move.l (a1,d0.w),d1
move.b #".",(a0)+
moveq #"l",d0
btst #3,(a5)
bne.b ind1
moveq #"w",d0
ext.l d1
ind1: move.b d0,(a0)+
moveq #%00000110,d0
and.b (a5),d0
beq.b ind2
lsr.b #1,d0
move.b #"*",(a0)+
move.b scale(pc,d0.w),(a0)+
ind2: lsl.l d0,d1
add.l d1,basereg-base(a6)
move.b #")",(a0)+
movem.l (a7)+,d1/a1
addq.w #2,a5
bra.w eaval
scale: dc.l "1248"
pcindfull:
indfull:moveq #%00001000,d0
and.w (a5),d0
bne.w reserved ;fail
moveq #%01000111,d0
and.w (a5),d0
cmp.b #%01000100,d0
bcc.w reserved
cmp.b #%00000100,d0
beq.w reserved
moveq #%00110000,d0
and.w (a5),d0
beq.w reserved
move.w d2,-(a7)
move.w (a5)+,d2 ;full format extension
move.b #"(",(a0)+
moveq #%00000111,d0
and.w d2,d0
beq.b nomemind
move.b #"[",(a0)+
nomemind:
moveq #%111111,d0
and.w d1,d0
cmp.w #%111011,d0 ;pc indirect?
bne.b nopcind
moveq #%00110000,d0
and.w d2,d0
lsr.w #4,d0
btst #7,d2
beq.b nozpc
bsr.w displace
cmp.b #"[",-1(a0)
beq.b noidisp
move.b #",",(a0)+
noidisp:move.b #"z",(a0)+
bra.b dozpc
nozpc: subq.b #1,d0
beq.b dozpc
subq.b #1,d0
beq.b nozpc1
move.l a5,d0
add.l (a5)+,d0
subq.l #2,d0
bsr.w hextoa_
; move.b #".",(a0)+
; move.b #"l",(a0)+
bra.b nozpc0
nozpc1: move.w (a5)+,d0
ext.l d0
add.l a5,d0
subq.l #4,d0
bsr.w hextoa_
move.b #".",(a0)+
move.b #"w",(a0)+
nozpc0: move.b #",",(a0)+
dozpc: move.b #"p",(a0)+
move.b #"c",(a0)+
bra.b baseok
nopcind:moveq #%00110000,d0 ;base displacement
and.w d2,d0
lsr.w #4,d0
bsr.w displace
moveq #%000111,d0
and.w d1,d0
btst #7,d2 ;bs
bne.b basesupr
cmp.b #"[",-1(a0)
beq.b noidis2
cmp.b #"(",-1(a0)
beq.b noidis2
move.b #",",(a0)+
noidis2:move.b #"a",(a0)+
add.b #"0",d0
move.b d0,(a0)+
bra.b baseok
basesupr:
tst.b d0
bne.w basfail
baseok:
btst #2,d2 ;postindex?
beq.b nopost
move.b #"]",(a0)+
nopost: btst #6,d2
bne.b indsupr
cmp.b #"[",-1(a0)
beq.b indpre
cmp.b #"(",-1(a0)
beq.b indpre
move.b #",",(a0)+
indpre: moveq #"d",d0
tst.w d2
bpl.b dindx
moveq #"a",d0
dindx: move.b d0,(a0)+
move.w #%0111000000000000,d0
and.w d2,d0
rol.w #4,d0
add.b #"0",d0
move.b d0,(a0)+
move.b #".",(a0)+
moveq #"l",d0
btst #11,d2
bne.b dind1
moveq #"w",d0
dind1: move.b d0,(a0)+
move.w #%0000011000000000,d0
and.w d2,d0
beq.b dind2
rol.w #7,d0
move.b #"*",(a0)+
move.b scale3(pc,d0.w),(a0)+
dind2: bra.b indok
scale3: dc.l "1248"
indsupr:move.w #%1111111000000000,d0
and.w d2,d0
bne.b indfail
indok: moveq #%00000111,d0
and.w d2,d0
beq.b nopre
btst #2,d2
bne.b nopre
move.b #"]",(a0)+
nopre:
moveq #%00000011,d0 ;outer displacement
and.w d2,d0
beq.b nomemind2
cmp.b #1,d0
beq.b nokoma
move.b #",",(a0)+
nokoma: bsr.b displace
nomemind2:
move.b #")",(a0)+
indquit:move.w (a7)+,d2
rts
indfail:
basfail:sf d7
bra.b indquit
displace:
subq.b #1,d0
beq.b nullouter
subq.b #1,d0
beq.b wordouter
move.l (a5)+,d0
bsr.w hextoa_
; move.b #".",(a0)+
; move.b #"l",(a0)+
rts
wordouter:
move.w (a5)+,d0 ;upper word=0
bsr.w hextoa_
move.b #".",(a0)+
move.b #"w",(a0)+
nullouter:
rts
mode7: moveq #%000111,d0
and.w d1,d0
add.w d0,d0
pea mod7tab(pc)
move.w mod7tab(pc,d0.w),d0
add.l d0,(a7)
rts
mod7tab:dc.w absshort-mod7tab
dc.w abslong-mod7tab
dc.w pcindirect-mod7tab
dc.w pcindex-mod7tab
dc.w immediate-mod7tab
dc.w reserved-mod7tab
dc.w reserved-mod7tab
dc.w reserved-mod7tab
absshort:
move.b #"(",(a0)+
moveq #0,d0
move.w (a5)+,d0
bsr.w hextoa_
move.b #")",(a0)+
move.b #".",(a0)+
move.b #"w",(a0)+
rts
abslong:move.b #"(",(a0)+
move.l (a5)+,d0
bsr.w hextoa_
move.b #")",(a0)+
rts
pcindirect:
move.b #"(",(a0)+
moveq #-2,d0
add.w (a5)+,d0
ext.l d0
add.l a5,d0
bsr.w hextoa_
move.b #",",(a0)+
move.b #"p",(a0)+
move.b #"c",(a0)+
move.b #")",(a0)+
rts
pcindex:btst #0,(a5)
bne.w pcindfull
move.b #"(",(a0)+
move.w (a5),d0
ext.w d0
ext.l d0
add.l a5,d0
move.l d0,basereg-base(a6)
bsr.w hextoa_
move.b #",",(a0)+
move.b #"p",(a0)+
move.b #"c",(a0)+
move.b #",",(a0)+
moveq #"d",d0
btst #7,(a5)
beq.b pcind0
moveq #"a",d0
pcind0: move.b d0,(a0)+
moveq #%01110000,d0
and.b (a5),d0
lsr.b #4,d0
add.b #"0",d0
move.b d0,(a0)+
movem.l d1/a1,-(a7)
move.w #%11110000,d0
and.b (a5),d0
lsr.b #2,d0
lea regs-base(a6),a1
move.l (a1,d0.w),d1
move.b #".",(a0)+
moveq #"l",d0
btst #3,(a5)
bne.b pcind1
moveq #"w",d0
ext.l d1
pcind1: move.b d0,(a0)+
moveq #%00000110,d0
and.b (a5),d0
beq.b pcind2
lsr.b #1,d0
move.b #"*",(a0)+
move.b scale2(pc,d0.w),(a0)+
pcind2: lsl.l d0,d1
add.l d1,basereg-base(a6)
move.b #")",(a0)+
movem.l (a7)+,d1/a1
addq.w #2,a5
bra.w eaval
scale2: dc.l "1248"
immediate:
move.b #"#",(a0)+
moveq #0,d0
move.w (a5)+,d0
tst.b imsize-base(a6)
bne.b imword
cmp.w #$ff,d0
bhi.b reserved ;fail
bra.w hextoa_
imword: cmp.b #%001,imsize-base(a6)
bne.b imlong
bra.w hextoa_
imlong: cmp.b #%010,imsize-base(a6)
bne.b fpu4wrd
swap d0
move.w (a5)+,d0
bra.w hextoa_
imresvd:cmp.b #%011,imsize-base(a6)
beq.b reserved
fpu4wrd:cmp.b #%100,imsize-base(a6) ;%1xx fpu imsize
bne.b fpu5wrd
fpu4w0: swap d0
move.w (a5)+,d0
bsr.w longtoa_
fpu2w0: move.l (a5)+,d0
bra.w longtoa
fpu5wrd:cmp.b #%101,imsize-base(a6)
beq.b reserved
fpu6wrd:cmp.b #%110,imsize-base(a6)
bne.b reserved
bsr.b fpu4w0
bra.b fpu2w0
reserved:
sf d7
rts
setbase:move.l a1,-(a7)
lea regs-base(a6),a1
moveq #%000111,d0
and.w d1,d0
lsl.w #2,d0
move.l 8*4(a1,d0.w),basereg-base(a6) ;contents An
move.l (a7)+,a1
rts
eaval: btst #2,dissign-base(a6)
beq.b eaval1
move.l a0,-(a7)
move.l basereg-base(a6),d0
lea linebuf+60-base(a6),a0 ;longest movem.l .... !
move.b #";",(a0)+
tst.b ea2nd-base(a6)
beq.b eaval0
lea 10(a0),a0
eaval0: bsr.w longtoa_
st ea2nd-base(a6)
move.l (a7)+,a0
eaval1: rts
sbytetoa_:move.l d0,-(a7)
btst #0,dissign-base(a6)
beq.b sby0
tst.b d0
bpl.b sby0
neg.b d0
move.b #"-",(a0)+
sby0: and.l #$ff,d0
btst #1,dissign-base(a6)
beq.b sby1
bsr.w hextod
bra.b sby2
sby1: bsr.w hextoa_ ;bsr.w bytetoa_
sby2: move.l (a7)+,d0
rts
swordtoa_:move.l d0,-(a7)
btst #0,dissign-base(a6)
beq.b swo0
tst.w d0
bpl.b swo0
neg.w d0
move.b #"-",(a0)+
swo0: and.l #$ffff,d0
btst #1,dissign-base(a6)
beq.b swo1
bsr.w hextod
bra.b swo2
swo1: bsr.w hextoa_ ;bsr.w wordtoa_
swo2: move.l (a7)+,d0
rts
assubs:
aopfail=*-assubs
anoops=*-assubs
rts
adcwop=*-assubs
bsr.w atoword_
move.w d0,op68000-base(a6)
rts
aeatoccr=*-assubs
sf imsize-base(a6)
bsr.w assea
lea toccrtxt(pc),a0
bra.w cmptxt
aeatosr=*-assubs
move.b #1,imsize-base(a6)
bsr.w assea
lea tosrtxt(pc),a0
bra.w cmptxt
accrtoea=*-assubs
lea ccrtxt(pc),a0
bra.b assrea
asrtoea=*-assubs
lea srtxt(pc),a0
assrea: bsr.w cmptxt
bra.w asstoea
abrapcc=*-assubs
bsr.w asspccode
bra.b abraf0
abrafcc=*-assubs
bsr.w assfccode
abraf0: or.w d0,op68000-base(a6)
cmp.b #".",(a3)+
bne.w fail
cmp.b #"w",(a3)+
beq.b awdcc0
bset #6,op68000+1-base(a6) ;long
cmp.b #"l",-1(a3)
beq.b algcc0
bra.b awdbxx1 ;fail
awordcc=*-assubs
bsr.w assccode
cmp.b #".",(a3)+
bne.b awdbxx1 ;fail
cmp.b #"w",(a3)+ ;bxx.w
bne.b awdbxx1 ;fail
awdcc0: bsr.w asstab
awordbxx=*-assubs
awdrel: bsr.w atolong_
subq.l #2,d0
sub.l lginstr-base(a6),d0 ;fdbx dx,lab...
sub.l para-base(a6),d0
move.l d0,d1
;beq.b awdbxx1 ;beq.w *+2
bpl.b awdbxx0
not.l d1
awdbxx0:cmp.l #$7fff,d1
bhi.b awdbxx1
bra.w storeword
awdbxx1:sf d7
rts
alongcc=*-assubs
bsr.w assccode
cmp.b #".",(a3)+
bne.b awdbxx1 ;fail
cmp.b #"l",(a3)+ ;bxx.l
bne.b awdbxx1 ;fail
algcc0: bsr.w asstab
alongbxx=*-assubs
bsr.w atolong_
subq.l #2,d0
sub.l para-base(a6),d0
bra.w storelong
ashortcc=*-assubs
bsr.w assccode
cmp.b #".",(a3)+
bne.b ashbxx1 ;fail
moveq #"b",d0
sub.b (a3)+,d0
beq.b ashort0
cmp.b #"b"-"s",d0 ;clone
bne.b ashbxx1 ;fail
ashort0:bsr.w asstab
ashortbxx=*-assubs
ashbxx: bsr.w atolong_
subq.l #2,d0
sub.l para-base(a6),d0
or.b d0,op68000+1-base(a6)
beq.b ashbxx1
bpl.b ashbxx0
not.l d0
ashbxx0:moveq #$7f,d1
cmp.l d1,d0
bls.b ashbxx2
ashbxx1:sf d7
ashbxx2:rts
aeatoax=*-assubs
bsr.w assea
bra.w asstoax9b
aea2todx=*-assubs
move.b #2,imsize-base(a6)
bra.b aea2dx
aeatodx=*-assubs
move.b #1,imsize-base(a6)
aea2dx:
asize67eatodx=*-assubs
bsr.w assea
bra.w asstodx9b
adxtoea=*-assubs
bsr.w assdx9b
bra.w asstoea
aiwordtoccr=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bsr.w atobyte_
bsr.w storeword
lea toccrtxt(pc),a0
bra.w cmptxt
aiwordtosr=*-assubs
bsr.b aiwrd
lea tosrtxt(pc),a0
bra.w cmptxt
aiword=*-assubs
aiwrd: cmp.b #"#",(a3)+
bne.w fail
bsr.w atoword_
bra.w storeword
alpstop=*-assubs
move.w #$01c0,d0
bsr.w storeinstr
bra.b aiwrd
atbl=*-assubs
moveq #0,d0 ;unsigned
moveq #"u",d1
sub.b (a3)+,d1
beq.b atblu
add.b #"s"-"u",d1
bne.w fail
bset #11,d0 ;signed
atblu: cmp.b #"n",(a3)
bne.b atbln
bset #10,d0 ;round
addq.w #1,a3
atbln: cmp.b #".",(a3)+
bne.w fail
moveq #"b",d1
sub.b (a3)+,d1
beq.b atblb
bset #6,d0
cmp.b #"b"-"w",d1
beq.b atblb
cmp.b #"b"-"l",d1
bne.w fail
eor.b #%11000000,d0
atblb: bsr.w storeinstr
bsr.w asstab
cmp.b #"d",(a3)+
bne.b atblea
bsr.w assxx02
cmp.b #":",(a3)+
bne.w fail
bsr.w assdn02
or.b d0,op68000+3-base(a6)
bra.b atbld
atblea: subq.w #1,a3
bsr.w assea
bset #0,op68000+2-base(a6)
atbld: cmp.b #",",(a3)+
bne.w fail
bsr.w assdn02
rol.w #4,d0
or.b d0,op68000+2-base(a6)
rts
afpu=*-assubs
sf d7
rts
afmovemx=*-assubs
moveq #0,d0
bsr.w storeinstr
cmp.b #"d",(a3)
beq.b afmvmx0 ;dynamic mask
cmp.b #"f",(a3)
beq.b afmvmx0
bsr assea
cmp.b #",",(a3)+
bne.w fail
bra assfprx
afmvmx0:bset #13,op68000+2-base(a6)
bsr assfprx
bsr asstoea
moveq #%111000,d0
and.w op68000-base(a6),d0
beq.w fail ;dn
cmp.b #%001000,d0 ;an
beq.w fail
cmp.b #%111100,d0 ;#
beq.w fail
cmp.b #%100000,d0 ;-(an)?
bne.b afmvmx1
move.b op68000+3-base(a6),d1 ;rl
moveq #8-1,d0
afmvmx2:lsr.b #1,d1
roxl.b #1,d2
dbf d0,afmvmx2
move.b d2,op68000+3-base(a6)
bclr #12,op68000+2-base(a6) ;predec mode
afmvmx1:rts
afmoveml=*-assubs
st d5
bra.b afmovem
afmovel=*-assubs
sf d5 ;fmovem flag
afmovem:moveq #0,d4 ;fpcr counter
move.w #$8000,d0
bsr.w storeinstr
move.b #%010,imsize-base(a6) ;long
pea fpiar0(pc) ;fpiar,An check
cmp.b #"f",(a3)
bne.b afpcr1
bset #13,op68000+2-base(a6)
bsr.b afpcr
bra asstoea
afpcr1: bsr assea
cmp.b #",",(a3)+
bne.b fpfail
afpcr: cmp.b #"f",(a3)+
bne.b fpfail
cmp.b #"p",(a3)+
bne.b fpfail
moveq #12,d2
cmp.b #"c",(a3)
beq.b afpcr0
moveq #11,d2
cmp.b #"s",(a3)
beq.b afpcr0
moveq #10,d2
cmp.b #"i",(a3)+
bne.b fpfail
cmp.b #"a",(a3)
bne.b fpfail
afpcr0: addq.w #1,a3
cmp.b #"r",(a3)+
bne.b fpfail
bset d2,op68000+2-base(a6)
addq.b #1,d4 ;fpcr counter
cmp.b #"/",(a3)
bne.b afpcr2
tst.b d5 ;fmovem flag
beq.b fpfail
addq.w #1,a3
bra.b afpcr
afpcr2: rts
fpiar0: moveq #%111000,d0
and.b op68000+1-base(a6),d0 ;ea field
bne.b fpiar1 ;Dn?
cmp.b #1,d4 ;1 fpcr?
bne.b fpfail
fpiar1: subq.b #%001000,d0 ;An
bne.b fpcrok
cmp.b #1,d4 ;1 fpcr?
bne.b fpfail
btst #10,op68000+2-base(a6) ;fpiar?
bne.b fpcrok
fpfail: sf d7
fpcrok: rts
afmovecr=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bsr.w atobyte_
beq.b amfk0
cmp.b #$3f,d0
bhi.w fail
cmp.b #$0b,d0
bcs.w fail
cmp.b #$0f,d0
bls.b amfk0
cmp.b #$30,d0
bcs.w fail
amfk0: or.w #$5c00,d0
bsr.w storeword
bra.w asstofpx79
assfprx:move.w #$d000,d0 ;postincr/cntrl mode
cmp.b #"d",(a3) ;dynamic mask?
bne.b arxmvm2
addq.w #1,a3
move.b (a3)+,d0
sub.b #"0",d0
bcs.b arxfail
cmp.b #7,d0
bhi.b arxfail
lsl.b #4,d0
bset #11,d0 ;dynamic
bra.b arxmvm1
arxmvm2:cmp.b #"f",(a3)+
bne.b arxfail
cmp.b #"p",(a3)+
bne.b arxfail
move.b (a3)+,d1
sub.b #"0",d1
bcs.b arxfail
cmp.b #7,d1
bhi.b arxfail
moveq #7,d3
sub.b d1,d3
bset d3,d0
arxmvm4:cmp.b #",",(a3)
beq.b arxmvm1
cmp.b #"/",(a3)+
beq.b arxmvm2
cmp.b #"-",-1(a3)
bne.b arxmvm1
cmp.b #"f",(a3)+
bne.b arxfail
cmp.b #"p",(a3)+
bne.b arxfail
move.b (a3)+,d2
sub.b #"0",d2
bcs.b arxfail
cmp.b #7,d2
bhi.b arxfail
cmp.b d1,d2
bls.b arxfail
arxmvm3:addq.b #1,d1
moveq #7,d3
sub.b d1,d3
bset d3,d0
cmp.b d1,d2
bne.b arxmvm3
bra.b arxmvm4
arxmvm1:or.w d0,op68000+2-base(a6)
rts
arxfail:bra fail
apccodewordrel=*-assubs
bsr.w asspccode
bra.b accode1
afccodewordrel=*-assubs
bsr.w assfccode
accode1:bsr.w storeinstr ;instr
bra.b accode0 ;4bytes instrlen ok (oma bug)
accodewordrel=*-assubs
bsr.w assccode
accode0:bsr.w asstab
bsr.w assdx02
cmp.b #",",(a3)+
beq.w awdrel
sf d7
rts
ainibtoea=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bsr.w atodnib
cmp.b #31,d0
bhi.w fail
bsr.w storeinstr
bra.w asstoea
apccodeea=*-assubs
bsr.w asspccode
bra.b asrc1
afccodeea=*-assubs
bsr.w assfccode
asrc1: bsr.w storeinstr
bra.b asrc0
accodeea=*-assubs
bsr.w assccode
asrc0: bsr.w asstab
asrcea=*-assubs
bra.w assea
aimoves=*-assubs
bsr.w storeinstr ;space
moveq #0,d3
cmp.b #",",2(a3) ;xx,<ea>
bne.b actlmvs
bset #11,d3
bsr.w amvcreg
addq.w #1,a3
bsr.w assea
bra.b aimvs0
actlmvs:bsr.w assea
cmp.b #",",(a3)+
bne.w fail
bsr.w amvcreg
aimvs0: move.w d3,op68000+2-base(a6)
rts
asize8eatoax9b=*-assubs
bsr.w assea
bra.w asstoax9b
asize67ixtoea=*-assubs
cmp.b #"#",(a3)
bne.w fail
bsr.w assea ;#$xx.x
bra.w asstoea ;clr previous ea !
asize67i9btoea=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bsr.w atobyte
beq.w fail
cmp.b #8,d0
bhi.w fail
bne.b ai9b0
sf d0
ai9b0: add.b d0,d0
or.b d0,op68000-base(a6)
bra.w asstoea
asize67x9btodx02=*-assubs
cmp.b #"#",(a3)+
bne.b ashft0
bsr.w atobyte
beq.w fail
cmp.b #8,d0
bhi.w fail
bne.b ashft1
sf d0
ashft1: add.b d0,d0
or.b d0,op68000-base(a6)
bra.w asstodx02
ashft0: bset #5,op68000+1-base(a6)
subq.w #1,a3
bsr.w assdx9b
bra.w asstodx02
aitrap=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bsr.w atodnib
cmp.b #15,d0
bhi.w fail
or.b d0,op68000+1-base(a6)
rts
asrcdx02=*-assubs
bra.w assdx02
aimusp=*-assubs
lea usptxt(pc),a0
cmp.b #"a",(a3)
beq.b aimusp0
bset #3,op68000+1-base(a6)
bsr.b aimusp1
cmp.b #",",(a3)+
bra.w assax02
aimusp0:bsr.w assax02
cmp.b #",",(a3)+
bne.w fail
aimusp1:bra.w cmptxt
apmovefd=*-assubs ;68030mmu only
move.w #$0100,d0
bsr.b apmvfd
move.w op68000+2-base(a6),d0
cmp.w #$4100,d0 ;40:tc
beq.w apfdok
eor.w #%0000100100000000,d0 ;08:tt0,0c:tt1,48:srp,4c:crp
and.w #%1011101111111111,d0
bne.w fail
apfdok: rts
apmove=*-assubs
bsr.b apreg
move.l a1,a3 ;restore ptr
tas d7 ;fail?, ignore fail
beq.b afromea
apmv2ea:move.w #$200,d0
bsr.w storeinstr
bsr.b apreg
bra.w asstoea
afromea:moveq #0,d0
apmvfd: bsr.w storeinstr
bsr.w assea
cmp.b #",",(a3)+
bne.w fail
apreg: lea pregs(pc),a0
move.l a3,a1
aprglp: move.b (a0)+,d1
beq.w fail
aprgcmp:moveq #$7f,d0
and.b (a0),d0
cmp.b (a3)+,d0
bne.b aprgskp
tst.b (a0)+
bpl.b aprgcmp
bra.b aprok
aprgskp:tst.b (a0)+
bpl.b aprgskp
move.l a1,a3
bra.b aprglp
aprok: or.b d1,op68000+2-base(a6)
rts
aidbcac=*-assubs
aidb3: move.b (a3)+,d1
cmp.b #"c",(a3)+
bne.b aidb2
moveq #4-1,d0
lea idctx(pc),a0
aidb1: cmp.b (a0,d0.w),d1
beq.b aidb0
dbf d0,aidb1
aidb2: bra.w fail
aidb0: lsl.w #6,d0
or.w d0,op68000-base(a6)
rts
aidbind=*-assubs
bsr.b aidb3
cmp.b #",",(a3)+
bne.w fail
apflush40=*-assubs
cmp.b #"(",(a3)+
bne.w fail
bsr.w assax02
cmp.b #")",(a3)+
bne.w fail
rts
aimovec=*-assubs
moveq #0,d3
cmp.b #"t",(a3) ;movec tc, (68040)
beq.b actlmvc
cmp.b #",",2(a3) ;xx,xxx(x)
bne.b actlmvc
bset #0,op68000+1-base(a6)
bsr.b amvcreg
addq.w #1,a3 ;cmp.b #",",(a3)+ bne.w fail
bsr.b actrlmv
bra.b aimvc0
actlmvc:bsr.b actrlmv
cmp.b #",",(a3)+
bne.w fail
bsr.b amvcreg
aimvc0: move.w d3,d0
bra.w storeword
actrlmv:lea cregs-6(pc),a2
actrl1: addq.w #6,a2
tst.b (a2)
bmi.w actrl4
moveq #0,d1
actrl2: move.b 2(a2,d1.w),d0
beq.b actrl0
cmp.b (a3,d1.w),d0
bne.b actrl1
addq.b #1,d1
cmp.b #4,d1
bne.b actrl2
actrl0: or.w (a2),d3
add.w d1,a3
rts
actrl4: sf d7 ;fail
rts
amvcreg:move.b (a3)+,d0
cmp.b #"d",d0
beq.b mvcdx
bset #15,d3 ;ax
cmp.b #"a",d0
bne.w actrl4
mvcdx: bsr.w assrn02
ror.w #4,d0
or.w d0,d3 ;ax/dx
rts
abfieldtodx=*-assubs
bsr.b abfi3
cmp.b #",",(a3)+
bne.w fail
cmp.b #"d",(a3)+
bne.w fail
moveq #0,d3
bsr.b mvcdx
or.w d3,op68000+2-base(a6)
rts
adxtobfield=*-assubs
cmp.b #"d",(a3)+
bne.w fail
moveq #0,d3
bsr.b mvcdx
cmp.b #",",(a3)+
bne.w fail
bsr.b abfi3
or.w d3,op68000+2-base(a6)
rts
abfield=*-assubs
abfi3: bsr.w storeinstr
bsr.w assea
cmp.b #"{",(a3)+
bne.w fail
bsr.b abfi2
and.w #%111111,d0
lsl.w #6,d0
move.w d0,d2
cmp.b #":",(a3)+
bne.w fail
bsr.b abfi2
and.w #%111111,d0
or.w d2,d0
cmp.b #"}",(a3)+
bne.w fail
move.w d0,op68000+2-base(a6)
rts
abfi2: cmp.b #"d",(a3)
beq.b abfi1
bsr.w atodnib
beq.w fail
cmp.b #32,d0
bhi.w fail
bclr #5,d0 ;bitfield32=0
rts
abfi1: addq.w #1,a3
move.b (a3)+,d0
sub.b #"0",d0
bcs.w fail
cmp.b #7,d0
bhi.w fail
bset #5,d0
rts
abkpt=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bra.w assxx02
apack=*-assubs
cmp.b #"-",(a3)
bne.b apadx
addq.w #1,a3
cmp.b #"(",(a3)+
bne.w fail
bsr.w assax02
lea xbcdtxt(pc),a0
bsr.w cmptxt
bsr.w assax9b
cmp.b #")",(a3)+
bne.w fail
bset #3,op68000+1-base(a6)
bra.b apad0
apadx: bsr.w assdx02
bsr.w asstodx9b
apad0: cmp.b #",",(a3)+
bne.w fail
bra.w aiwrd
amov16=*-assubs
cmp.b #"(",(a3)+
bne.w fail
bsr.w assax02
lea cmpmtxt(pc),a0
bsr.w cmptxt
bsr.w assan02
ror.w #4,d0
or.w #$8000,d0
bra.w storeinstr
amov162=*-assubs
cmp.b #"a",1(a3) ;(ax)
bne.b amov0
cmp.b #"(",(a3)+
bne.w fail
bsr.w assax02
cmp.b #")",(a3)+
bne.w fail
moveq #%000000,d1
cmp.b #"+",(a3)+
beq.b amov1
subq.w #1,a3
moveq #%010000,d1
amov1: cmp.b #",",(a3)+
bne.w fail
or.b d1,op68000+1-base(a6)
amov2: move.w op68000-base(a6),-(a7)
bsr.w assea
moveq #%111111,d0
and.w op68000-base(a6),d0
move.w (a7)+,op68000-base(a6)
cmp.w #%111001,d0
bne.w fail
rts
amov0: bsr.b amov2
cmp.b #",",(a3)+
bne.w fail
cmp.b #"(",(a3)+
bne.w fail
bsr.w assax02
cmp.b #")",(a3)+
bne.w fail
moveq #%001000,d1
cmp.b #"+",(a3)+
beq.b amov3
moveq #%011000,d1
amov3: or.b d1,op68000+1-base(a6)
rts
aimove=*-assubs
moveq #%01,d0
sf imsize-base(a6)
cmp.b #"b",(a3)
beq.b aimov0
moveq #%11,d0
addq.b #1,imsize-base(a6)
cmp.b #"w",(a3)
beq.b aimov0
moveq #%10,d0
addq.b #1,imsize-base(a6)
cmp.b #"l",(a3)
bne.w fail
aimov0: lsl.b #4,d0
or.b d0,op68000-base(a6)
addq.w #1,a3
bsr.w asstab
bsr.w assea
move.w op68000-base(a6),-(a7)
bsr.w asstoea
move.w op68000-base(a6),d1
move.w (a7)+,op68000-base(a6)
move.w d1,d0
and.w #%111,d0
ror.w #7,d0
or.w d0,op68000-base(a6)
and.w #%111000,d1
lsl.w #3,d1
or.w d1,op68000-base(a6)
rts
aimoveq=*-assubs
sf imsize-base(a6)
bsr.w assea
move.w op68000-base(a6),d0
clr.l oplen-base(a6)
and.w #%111111,d0 ;#x
cmp.w #%111100,d0
bne.w fail
move.b op68000+3-base(a6),op68000+1-base(a6)
bra.w asstodx9b
aicallm=*-assubs
cmp.b #"#",(a3)+
bne.w fail
bsr.w atobyte_ ;d0.l
bsr.w storeinstr
bra.w asstoea
acas=*-assubs
bsr.b assdn02
move.w d0,d2
cmp.b #",",(a3)+
bne.w fail
bsr.b assdn02
lsl.w #6,d0
or.w d2,d0
bsr.w storeinstr
bra.w asstoea
assan02:cmp.b #"a",(a3)+
bne.w fail
bra.b assrn02
assdn02:cmp.b #"d",(a3)+
bne.w fail
assrn02:move.b (a3)+,d0
sub.b #"0",d0
bcs.w fail
cmp.b #7,d0
bhi.w fail
ext.w d0
rts
acas2=*-assubs
cmp.b #"w",(a3)
beq.b aca0
cmp.b #"l",(a3)
bne.w fail
bset #9,op68000-base(a6)
aca0: addq.w #1,a3
bsr.w asstab
bsr.b assdn02
swap d0
cmp.b #":",(a3)+
bne.b cas2fl
bsr.b assdn02
move.l d0,d1
cmp.b #",",(a3)+
bne.b cas2fl
bsr.b assdn02
swap d0
cmp.b #":",(a3)+
bne.b cas2fl
bsr.b assdn02
lsl.l #6,d0
or.l d0,d1
cmp.b #",",(a3)+
bne.b cas2fl
cmp.b #"(",(a3)+
bne.b cas2fl
moveq #0,d3
bsr.w amvcreg
cmp.b #")",(a3)+
bne.b cas2fl
cmp.b #":",(a3)+
bne.b cas2fl
cmp.b #"(",(a3)+
bne.b cas2fl
swap d3
bsr.w amvcreg
cmp.b #")",(a3)+
bne.b cas2fl
or.l d1,d3
move.l d3,d0
bra.w storelong
cas2fl: sf d7
rts
achk2=*-assubs
move.w #$0800,d3
bra.b achkcmp
acmp2=*-assubs
moveq #0,d3
achkcmp:bsr.w storeinstr
bsr.w assea
cmp.b #",",(a3)+
bne.b cas2fl
bsr.w amvcreg ;or.w ?,d3
move.w d3,op68000+2-base(a6)
rts
artm=*-assubs
moveq #0,d3
bsr.w amvcreg
rol.w #4,d3
or.w d3,op68000-base(a6) ;0000ynnn
rts
atppccsize=*-assubs
bsr.w asspccode
bra.b atpc2
atpfccsize=*-assubs
bsr.w assfccode
atpc2: bsr.w storeinstr
bra.b atpc1
atpccsize=*-assubs
bsr.w assccode
atpc1: cmp.b #".",(a3)+
bne.w fail
move.b (a3)+,d0
bsr.w asstab
cmp.b #"w",d0
beq.w aiwrd
cmp.b #"l",d0
bne.w fail
bset #0,op68000+1-base(a6)
atpc0: cmp.b #"#",(a3)+
bne.w fail
bsr.w atolong_
bra.w storelong
atpcc=*-assubs
bsr.w assccode
cmp.b #" ",(a3)+
bne.w fail
rts
apvalid=*-assubs
bsr.w assan02
or.w #$2c00,d0
bsr.b afstore
bra.w asstoea
atppcc=*-assubs
bsr.w asspccode
bra.b afst0
atpfcc=*-assubs
bsr.w assfccode
afst0: cmp.b #" ",(a3)+
bne.w fail
afstore:bra.w storeinstr
afnop=*-assubs
moveq #0,d0 ;4byte command
bra.b afstore
apflusha=*-assubs
move.w #$2400,d0
bra.b afstore
apflushr=*-assubs
move.w #$a000,d0
bsr.b afstore
bra.w assea
apflushs=*-assubs
move.w #$3400,d3
bra.b apfl3
apflush=*-assubs
move.w #$3000,d3
apfl3: move.b (a3)+,d2
cmp.b #"f",(a3)
bne.b apfl1
addq.w #1,a3
cmp.b #"c",(a3)+
bne.w fail
moveq #%00000000,d1
cmp.b #"s",d2
beq.b apfl2
moveq #%00000001,d1
cmp.b #"d",d2
beq.b apfl2
bra.w fail
apfl1: moveq #%00010000,d1
moveq #"#",d0
sub.b d2,d0
beq.b apfl0
cmp.b #"#"-"d",d0
bne.w fail
moveq #%00001000,d1
apfl0: bsr.w assrn02
or.w d0,d1
apfl2: cmp.b #",",(a3)+
bne.w fail
cmp.b #"#",(a3)+
bne.w fail
bsr.w assrn02
lsl.w #5,d0
or.w d1,d0
or.w d3,d0 ;$3000|$3400
bra.b afstore
apload=*-assubs
move.w #$2010,d1
apte0: moveq #"w",d0
sub.b (a3)+,d0
beq.b aplo0
bset #9,d1
subq.b #"w"-"r",d0
bne.w fail
aplo0: bsr.w asstab
cmp.b #"#",(a3)+
bne.w fail
bsr.w assrn02
or.w d1,d0
bsr.w afstore
bra.w asstoea
aptest=*-assubs
move.w #$8110,d1
bsr.b apte0
cmp.b #",",(a3)+
bne.w fail
cmp.b #"#",(a3)+
bne.w fail
bsr.w assrn02
ror.w #6,d0
beq.w fail ;level 0?
move.w d0,d1
cmp.b #",",(a3)+
bne.w fail
cmp.b #"a",(a3)+
bne.w fail
bsr.w assrn02
rol.w #5,d0
or.w d1,d0
or.w d0,op68000+2-base(a6)
rts
adivsll=*-assubs
move.w #$800,d0
bra.b adivs0
adivull=*-assubs
moveq #0,d0
adivs0: bsr.w storeinstr
move.b #%10,imsize-base(a6)
bsr.w assea
cmp.b #",",(a3)+
bne.w fail
bsr.w assdn02 ;d0.w
move.w d0,d3
cmp.b #":",(a3)+
bne.w fail
bsr.w assdn02
cmp.b d0,d3
beq.w fail
bra.b notwo
amulsl=*-assubs
move.w #$800,d0
bra.b amuls0
amulul=*-assubs
moveq #0,d0
amuls0: bsr.w storeinstr
move.b #%10,imsize-base(a6)
bsr.w assea
cmp.b #",",(a3)+
bne.w fail
bsr.w assdn02 ;d0.w
move.w d0,d3
cmp.b #":",(a3)+
bne.b notwo
bset #10,d3
bsr.w assdn02
notwo: ror.w #4,d0 ;mulx.l ea,dm:dm=dn
or.w d0,d3
or.w d3,op68000+2-base(a6)
rts
aicmpm=*-assubs
cmp.b #"(",(a3)+
bne.w fail
bsr.w assax02
lea cmpmtxt(pc),a0
bsr.w cmptxt
bsr.w assax9b
cmp.b #")",(a3)+
bne.w fail
cmp.b #"+",(a3)+
bne.w fail
rts
asize67adsbx=*-assubs ;same!
axbcd=*-assubs
aasxbcd:cmp.b #"-",(a3)+
bne.b axbcd0
bset #3,op68000+1-base(a6)
cmp.b #"(",(a3)+
bne.b axbcd2 ;fail
bsr.w assax02
lea xbcdtxt(pc),a0
bsr.w cmptxt
bsr.w assax9b
cmp.b #")",(a3)+
beq.b axbcd1 ;no fail
axbcd2: sf d7
axbcd1: rts
axbcd0: subq.w #1,a3
bsr.w assdx02
bra.w asstodx9b
asize6movep=*-assubs
cmp.b #"d",(a3)
beq.b amovp0
bsr.w assea
move.w op68000-base(a6),d0
bclr #5,op68000+1-base(a6)
and.w #%111000,d0
cmp.w #%101000,d0
bne.w fail
bra.w asstodx9b
amovp0: bset #7,op68000+1-base(a6)
bsr.w assdx9b
bsr.w asstoea
move.w op68000-base(a6),d0
bclr #5,op68000+1-base(a6)
and.w #%111000,d0
cmp.w #%101000,d0
bne.w fail
rts
aimovem=*-assubs
moveq #0,d0
bsr storeinstr
cmp.b #"d",(a3)
beq.b aimovm0
cmp.b #"a",(a3)
beq.b aimovm0
bset #10,op68000-base(a6)
bsr.w assea
cmp.b #",",(a3)+
bne.w fail
bsr.b assrx
bra.b aimovm7
aimovm0:bsr.b assrx
bsr.w asstoea
aimovm7:moveq #%111000,d0
and.w op68000-base(a6),d0
cmp.w #%100000,d0 ;-(an)
bne.b aimovm8
move.w op68000+2-base(a6),d1 ;rl
moveq #16-1,d0
aimovm9:lsr.w #1,d1
roxl.w #1,d2
dbf d0,aimovm9
move.w d2,op68000+2-base(a6)
aimovm8:rts
assrx: clr.w d0
aimovm2:move.b 1(a3),d1
sub.b #"0",d1
bcs.w fail
cmp.b #7,d1
bhi.w fail
cmp.b #"d",(a3)
beq.b aimovm5
cmp.b #"a",(a3)
bne.w fail
addq.b #8,d1
aimovm5:addq.w #2,a3
bset d1,d0
aimovm4:cmp.b #",",(a3)
beq.b aimovm1
cmp.b #"/",(a3)+
beq.b aimovm2
cmp.b #"-",-1(a3)
bne.b aimovm1
move.b 1(a3),d2
sub.b #"0",d2
bcs.w fail
cmp.b #7,d2
bhi.w fail
cmp.b #"d",(a3)
beq.b aimovm6
cmp.b #"a",(a3)
bne.w fail
addq.b #8,d2
aimovm6:addq.w #2,a3
cmp.b d1,d2
bls.w fail
aimovm3:addq.b #1,d1
bset d1,d0
cmp.b d1,d2
bne.b aimovm3
bra.b aimovm4
aimovm1:move.w d0,op68000+2-base(a6)
rts
adx9btodx02=*-assubs
bsr.b assdx9b
bra.b asstodx02
aax9btoax02=*-assubs
bsr.b assax9b
bra.b asstoax02
adx9btoax02=*-assubs
bsr.b assdx9b
bra.b asstoax02
aiunlk=*-assubs
bra.b assax02
alinklg=*-assubs
bsr.b assax02
cmp.b #",",(a3)+
bne.b fail
bra.w atpc0
ailink=*-assubs
bsr.b assax02
cmp.b #",",(a3)+
bne.b fail
bra.w aiwrd
asstoax9b:cmp.b #",",(a3)+
bne.b fail
assax9b:cmp.b #"a",(a3)+
beq.b assxx9b
bra.b fail
asstodx9b:cmp.b #",",(a3)+
bne.b fail
assdx9b:cmp.b #"d",(a3)+
bne.b fail
assxx9b:move.b (a3)+,d0
sub.b #"0",d0
bcs.b fail
cmp.b #7,d0
bhi.b fail
lsl.w #8,d0
add.w d0,d0 ;asl.w #1,d0
or.w d0,op68000-base(a6)
rts
asstoax02:cmp.b #",",(a3)+
bne.b fail
assax02:cmp.b #"a",(a3)+
bne.b fail
bra.b assxx02
asstodx02:cmp.b #",",(a3)+
bne.b fail
assdx02:cmp.b #"d",(a3)+
bne.b fail
assxx02:move.b (a3)+,d0
sub.b #"0",d0
bcs.b fail
cmp.b #7,d0
bhi.b fail
or.b d0,op68000+1-base(a6)
rts
fail: sf d7
rts
asstofpx79:
cmp.b #",",(a3)+
bne.b fail
assfpx79:cmp.b #"f",(a3)+
bne.b fail
cmp.b #"p",(a3)+
bne.b fail
move.b (a3)+,d0
sub.b #"0",d0
bcs.b fail
cmp.b #7,d0
bhi.b fail
ext.w d0
lsl.w #7,d0
or.w d0,op68000+2-base(a6) ;fpu instr!
rts
assccode:clr.w d0
lea ccodetxt(pc),a0
asscc0: move.b (a3),d1
lsl.w #8,d1
move.b 1(a3),d1
tst.b 1(a0) ;"t",0;"f",0
bne.b asscc2
sf d1
asscc2: cmp.w (a0)+,d1
beq.b asscc1
add.w #$0100,d0
cmp.w #$1000,d0
bne.b asscc0
bra.b fail
asscc1: addq.w #1,a3
tst.b d1 ;"t",0;"f",0
beq.b asscc3
addq.w #1,a3
asscc3: or.w d0,op68000-base(a6)
rts
assfccode:
moveq #[32-1]*4,d0
assfcc2:lea fccodetxt(pc),a0
lea (a0,d0.w),a0
move.l a3,-(a7)
moveq #4-1,d1
assfcc0:cmpm.b (a3)+,(a0)+
bne.b assfcc1
tst.b (a0)
dbeq d1,assfcc0
cmp.b #"e",(a3) ;ngle preference
beq.b assfcc1
addq.w #4,a7 ;remove a3
lsr.w #2,d0
rts
assfcc1:move.l (a7)+,a3
subq.w #4,d0
bpl.b assfcc2
bra.w fail
asspccode:
move.b (a3)+,d1
lsl.w #8,d1
move.b (a3)+,d1
lea pccodetxt(pc),a0
moveq #[16-1]*2,d0
asspcc0:cmp.w (a0,d0.w),d1
beq.b asspcc1
subq.w #2,d0
bpl.b asspcc0
bra.w fail
asspcc1:lsr.w #1,d0
rts
cmpt0: cmp.b (a3)+,d0
bne.w fail
cmptxt: move.b (a0)+,d0
bclr #7,d0
beq.b cmpt0
cmp.b (a3)+,d0
bne.w fail
rts
storeinstr:addq.l #2,lginstr-base(a6)
storeword:
lea op68000-2-base(a6),a0
move.w (a0),d1 ;oplen!
addq.w #1,(a0)+
add.w d1,d1
move.w d0,2(a0,d1.w)
rts
storelong:
lea op68000-2-base(a6),a0
move.w (a0),d1 ;oplen!
addq.w #2,(a0)+
add.w d1,d1
move.l d0,2(a0,d1.w)
rts
asstab: cmp.l lineend-base(a6),a3
bhi.w fail
cmp.b #" ",(a3)+
beq.b asstab
asstab0:subq.w #1,a3
rts
asstoea:cmp.b #",",(a3)+
bne.w fail
assea: and.w #$ffc0,op68000-base(a6)
cmp.b #"d",(a3) ;dx
beq.w assdx02
or.w #$0008,op68000-base(a6)
cmp.b #"a",(a3) ;ax
beq.w assax02
and.w #$ffc0,op68000-base(a6)
cmp.b #"(",(a3) ;(ax)|(ax)+
bne.b assea0
cmp.b #"a",1(a3)
bne.b assea0
addq.w #1,a3
or.w #$0010,op68000-base(a6)
bsr.w assax02
cmp.b #")",(a3)+
bne.w fail
cmp.b #"+",(a3)
bne.b assea1
addq.w #1,a3
or.w #$0018,op68000-base(a6)
assea1: rts
assea0: cmp.b #"-",(a3) ;-(ax)
bne.b assea2
cmp.b #"(",1(a3)
bne.w fail
addq.w #2,a3
or.w #$0020,op68000-base(a6)
bsr.w assax02
cmp.b #")",(a3)+
bne.w fail
rts
assea2: cmp.b #"#",(a3)
bne.b assea3
addq.w #1,a3
or.w #$003c,op68000-base(a6)
cmp.b #34,(a3)
bne.b assea16
addq.w #1,a3
moveq #0,d0
moveq #5-1,d1
assea18:cmp.b #34,(a3)+
beq.b assea17
lsl.l #8,d0
move.b -1(a3),d0
dbf d1,assea18
bra.w fail
assea16:cmp.b #"$",(a3)
beq.b assea22
bsr.w atodlong
bra.b assea17
assea22:bsr.w atolong_
assea17:move.b imsize-base(a6),d1
beq.b assea13
cmp.b #%01,d1
beq.b assea14
cmp.b #%10,d1
bne.w fail
swap d0
bsr.b assea15
swap d0
bra.b assea15
assea13:cmp.l #$ff,d0
bhi.w fail
assea14:cmp.l #$ffff,d0
bhi.w fail
assea15:bra.w storeword
assea3: cmp.b #"(",(a3)+ ;(x.l),(x.w),(d,ax,rx.x)
bne.w fail
sf d2
cmp.b #"-",(a3) ;sign?
bne.b assea19
addq.w #1,a3
st d2
assea19:move.w d2,-(a7)
cmp.b #"$",(a3)
beq.b assea24
bsr.w atodlong
bra.b assea23
assea24:bsr.w atolong_
assea23:move.w (a7)+,d2
cmp.b #",",(a3) ;d( !(d, ?
bne.w assea4
tst.b d2
beq.b assea20
neg.l d0
assea20:addq.w #1,a3
cmp.b #"a",(a3) ;d(ax !(d,ax
bne.w assea5
move.l d0,-(a7)
bsr.w assax02
move.l (a7)+,d0
move.l d0,d1
bpl.b assea21
neg.l d1
assea21:cmp.b #")",(a3)+ ;d(ax) !(d,ax)
bne.b assea6
or.w #$0028,op68000-base(a6)
cmp.l #$ffff,d1 ;abs(d0)
bhi.w fail
bra.w storeword
assea6: cmp.b #",",-1(a3) ; !(d,ax,rx.x)
bne.w fail
or.w #$0030,op68000-base(a6)
cmp.l #$ff,d1 ;abs(d0)
bhi.w fail
assea9: and.w #$ff,d0
cmp.b #"d",(a3)+
beq.b assea7
cmp.b #"a",-1(a3)
bne.w fail
bset #15,d0
assea7: move.b (a3)+,d1
sub.b #"0",d1
bcs.w fail
cmp.b #7,d1
bhi.w fail
ext.w d1
ror.w #4,d1
or.w d1,d0
cmp.b #".",(a3)+
bne.w fail
cmp.b #"w",(a3)+
beq.b assea8
cmp.b #"l",-1(a3)
bne.w fail
bset #11,d0
assea8: cmp.b #"*",(a3)
bne.b assea8b
addq.w #1,a3
moveq #-"1",d1
add.b (a3)+,d1
beq.b assea8b
or.w #%01000000000,d0
subq.b #1,d1
beq.b assea8b
eor.w #%11000000000,d0
subq.b #2,d1
beq.b assea8b
eor.w #%01000000000,d0
subq.b #4,d1
bne.w fail
assea8b:cmp.b #")",(a3)+ ;d(ax,rx.x) !(d,ax,rx.x)
bne.w fail
bra.w storeword
assea5: cmp.b #"p",(a3)+
bne.w fail
cmp.b #"c",(a3)+
bne.w fail
cmp.b #")",(a3)+ ;d(pc) !(d,pc)
bne.b assea10
or.w #$003a,op68000-base(a6)
subq.l #2,d0 ;fixed instr len
sub.l lginstr-base(a6),d0 ;extension (mulx.l,cas2...)
sub.l para-base(a6),d0
bsr.w storeword
move.l d0,d1
ext.l d1
cmp.l d0,d1
bne.w fail
rts
assea10:or.w #$003b,op68000-base(a6)
subq.l #2,d0 ;fixed instr len
sub.l lginstr-base(a6),d0 ;extension (mulx.l,cas2...)
sub.l para-base(a6),d0
move.b d0,d1
ext.w d1
ext.l d1
cmp.l d1,d0
bne.b assfail
cmp.b #",",-1(a3)
beq.w assea9 ;d(pc,rx.x) !(d,pc,rx.x)
assfail:sf d7
rts
assea4: cmp.b #")",(a3)+
bne.w fail
cmp.b #".",(a3)
beq.b assea11
or.w #$0039,op68000-base(a6)
swap d0
bsr.w storeword
swap d0
bra.w storeword
assea11:addq.w #1,a3
cmp.b #"w",(a3)+
bne.w fail
or.w #$0038,op68000-base(a6)
cmp.l #$ffff,d0
bhi.w fail
bra.w storeword
;gfxname:dc.b "graphics.library",0
even
;hang the pope
dc.b version
initxt: dc.b "BeerMon V0."
dc.b version/10+"0",-version/10*10+version+"0",rev
dc.b " 680"!$80,"0,"!$80
dc.b " GfxMem,"!$80
dc.b " mode, morbid version"!$80
mmutxt: dc.b "NoMMU"!$80,"68851"!$80,"(MMU)"!$80,"(MMU)"!$80
fputxt: dc.b "NoFPU"!$80,"68881"!$80,"68882"!$80,"(FPU)"!$80
chiptxt:dc.b "512K"!$80,"1 MB"!$80,"1.5M"!$80,"2 MB"!$80
muttxt: dc.b "mutilating"!$80
frztxt: dc.b "deep frost"!$80 ;one of the celtic ones?
trktxt: dc.b ": track "!$80
hedtxt: dc.b " head "!$80
sectxt: dc.b " sector "!$80
blktxt: dc.b " block "!$80
drvtxt: dc.b " Disk in drive DFn: is "!$80
nodisk: dc.b "not present"!$80
ndostxt:dc.b "not a dos disk"!$80
dskvtxt:dc.b "not validated"!$80
filesys:dc.b "Filesystem: "!$80,"not international nFS, "!$80
chktxt: dc.b "without correct checksum"!$80
wrdisk: dc.b "writeprotected"!$80
logtxt: dc.b "logged"!$80
mnttxt: dc.b "not mounted"!$80
bpltxt: dc.b "Mem: "!$80
worktxt:dc.b "Scr"!$80
abstxt: dc.b "(ABS) "!$80
systxt: dc.b "(SYS) "!$80
codetxt:dc.b " Code "!$80
buftxt: dc.b " Exg"!$80
navltxt:dc.b " not available"!$80
filltxt:dc.b " filled with "!$80
eortxt: dc.b " exored with "!$80
abotxt: dc.b "function aborted at "!$80
objtxt: dc.b "object created: "!$80
expetxt:dc.b "cannot decrunch data"!$80
expotxt:dc.b "decrunched data: "!$80
impetxt:dc.b "cannot crunch data"!$80
impatxt:dc.b "crunch aborted"!$80
impotxt:dc.b ", crunched data: "!$80
togotxt:dc.b "to go:"!$80 ;\
gaintxt:dc.b " gained:"!$80 ;/
nmmutxt:dc.b "You don't have a MMU!"!$80
nmmutx1:dc.b "You don't have a 68851 MMU!"!$80
nmmutx2:dc.b "68040 MMU is not supported yet!"!$80
brktxt: dc.b "Breakpoint "!$80
bpnoram:dc.b "not in RAM!"!$80
bpextxt:dc.b "exists"!$80
bpnftxt:dc.b "not found"!$80
bpstxt: dc.b "set"!$80
bprmtxt:dc.b "removed"!$80
bpfltxt:dc.b "buffer full"!$80
bpbctxt:dc.b "buffer cleared"!$80
chktxt1:dc.b "old chksum: "!$80
chktxt2:dc.b " new chksum: "!$80
nkicktx:dc.b "No Kickstart!"!$80
nmgdtxt:dc.b "No Megadrive ROM!"!$80
smdinva:dc.b "Invalid header"!$80
smdxfer:dc.b "Current address "!$80
smdtogo:dc.b ", blocks to go "!$80
smdcvco:dc.b "Conversion completed"!$80
smdabor:dc.b "Transfer aborted"!$80
smdcomp:dc.b "Transfer completed"!$80
smdtime:dc.b "Transfer timeout"!$80
nametxt:dc.b "Name:"!$80
mromtxt:dc.b "KB ROM, "!$80
backtxt:dc.b " backed up" ;\
mramtxt:dc.b " RAM, "!$80 ;/
manutxt:dc.b "manu:"!$80 ;\
mvertxt:dc.b ", v:"!$80 ;/
maptxt: dc.b "Mode:nD, Bitmap is "!$80,"invalid ("!$80
synctxt:dc.b "Sync: "!$80
invltxt:dc.b " (invalid)"!$80
voltxt: dc.b "Volume: ",34!$80
dirtxt: dc.b "(Dir)"!$80
dlnktxt:dc.b "dirlink: ",34!$80
flnktxt:dc.b "hardlink: ",34!$80
usdtxt: dc.b " used blocks, "!$80
fretxt: dc.b " free blocks"!$80
bytetxt:dc.b " free bytes"!$80
savetxt:dc.b "saving: ",34!$80
loadtxt:dc.b "loading: ",34!$80
typetxt:dc.b "typing: ",34!$80
rerrtxt:dc.b "read error ("!$80
veritxt:dc.b "verify error ("!$80
retrytx:dc.b "(r)etry, (i)gnore, (a)bort"!$80
trk0txt:dc.b "seek error (30), track 0 not found"!$80
bittxt: dc.b "bad bitmap"!$80
dskftxt:dc.b "disk full"!$80
nenotxt:dc.b "not enough free space"!$80
dnmtxt: dc.b "directory not empty"!$80
dextxt: dc.b "directory exists"!$80
diftxt: dc.b "directory is a file"!$80
dnftxt: dc.b "directory not found"!$80
fextxt: dc.b "file exists"!$80
fidtxt: dc.b "file is a directory"!$80
fnftxt: dc.b "file not found"!$80
formtxt:dc.b "Formatting track nn head 0"!$80
fcpltxt:dc.b "Formatting completed"!$80
fabotxt:dc.b "Formatting aborted"!$80
insttxt:dc.b "disk installed"!$80
smaptxt:dc.b "Active keymap: usa"!$80,"german"!$80
calctxt:dc.b "Overflow"!$80
prttxt: dc.b "Printer "!$80
vfytxt: dc.b "Verify "!$80
sndtxt: dc.b "Soundaddress "!$80
memtxt: dc.b " lower first upper size attr pri name"!$80
rsrctxt:dc.b "address name"!$80
intrtxt:dc.b "address name"!$80
exectxt:dc.b "address open ver rev nsize psize chksum name"!$80
porttxt:dc.b "address flag sigbit sigtask name"!$80
tasktxt:dc.b "address type pri state splower size used name"!$80
rsndtxt:dc.b "address type pri name"!$80
corrtxt:dc.b "exec lists corrupt"!$80
conftxt:dc.b "board type address-range size flags product manu "
dc.b " serialnum romoffset"!$80
nobdtxt:dc.b "no unconfigured boards found!"!$80
unkntxt:dc.b "unknown"!$80
zorro2: dc.b "zorro-II"!$80
zorro3: dc.b "zorro-III"!$80
a3info: dc.b "Page Detect:"
a3stc: dc.b "nnn Burst:"
a3burst:dc.b "nnn Wrap:"
a3bwrap:dc.b "nnn Chips:"
a3chips:dc.b "nnnnnnn Refresh Rate:"
a3refr: dc.b "nnn Version:"!$80
a3info2:dc.b "Timeout:"!$80
a3disab:dc.b "disabled"!$80
a3dsack:dc.b "DSACK"!$80
a3berr: dc.b "BERR"!$80
a3kbrst:dc.b " Keyboard Reset:o"!$80," ID:"!$80
; dc.b" DMAC:old"!$80,"new"!$80
resvtxt:dc.b "reserved"!$80
months: dc.b "JanFebMarAprMayJunJulAugSepOctNovDec"
exctxt: dc.b $3e,$80
dc.b "BUS ERROR",$87
dc.b "ADDRESS ERROR: INSTRUCTION $ ACCESSED"!$80
dc.b "ILLEGAL",$81
dc.b "DIVISION BY ZERO"!$80
dc.b "CHK",$81
dc.b "TRAPV",$81
dc.b "PRIVILEGE",$84
dc.b "TRACE MODE"!$80
dc.b "LINE-A",$83
dc.b "LINE-F",$83
dc.b "($30)",$88
dc.b "PROTOCOLL",$84
dc.b "FORMAT ERROR",$87
dc.b "UNINITIALISED",$82
dc.b "($40)",$88
dc.b "($44)",$88
dc.b "($48)",$88
dc.b "($4C)",$88
dc.b "($50)",$88
dc.b "($54)",$88
dc.b "($58)",$88
dc.b "($5C)",$88
dc.b "SPURIOUS",$82
dc.b "LEVEL 1",$82
dc.b "LEVEL 2",$82
dc.b "LEVEL 3",$82
dc.b "LEVEL 4",$82
dc.b "LEVEL 5",$82
dc.b "LEVEL 6",$82
dc.b "LEVEL 7",$82
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b $85
dc.b "BRANCH/UNORDERED",$86
dc.b "INEXACT RESULT",$86
dc.b "DIVISION BY ZERO",$86
dc.b "UNDERFLOW",$86
dc.b "OPERAND ERROR",$86
dc.b "OVERFLOW",$86
dc.b "SIGNAL NAN",$86
dc.b "UNIMPLEMENTED DATA TYPE",$86
dc.b "MMU SETUP",$87
dc.b "68851_1",$87
dc.b "68851_2",$87
dc.b "($EC)",$88
dc.b "($F0)",$88
dc.b "($F4)",$88
dc.b "($F8)",$88
dc.b "($FC)",$88
excext: dc.b $08,$80 ;$80
dc.b " INSTRUCTION"!$80 ;$81
dc.b " INTERRUPT"!$80 ;$82
dc.b " EMULATION"!$80 ;$83
dc.b " VIOLATION"!$80 ;$84
dc.b "TRAP INSTRUCTION"!$80 ;$85
dc.b " FPU EXCEPTION"!$80 ;$86
dc.b " EXCEPTION"!$80 ;$87
dc.b " RESERVED"!$80 ;$88
copmove:dc.b "Move"!$80
copskip:dc.b "Skip"!$80
copwait:dc.b "Wait"!$80
copendl:dc.b "EndList"!$80
copdcl: dc.b "dc.l"!$80
even
ccodetxt: dc.b "t",0,"f",0,"hilscccsneeqvcvsplmigeltgtle" ;even!
pccodetxt: dc.b "bsbclslcssscasacwswcisicgsgccscc" ;even!
fccodetxt: dc.l "f"<<24 ;fpu condition codes
dc.l "eq"<<16
dc.l "ogt"<<8
dc.l "oge"<<8
dc.l "olt"<<8
dc.l "ole"<<8
dc.l "ogl"<<8
dc.l "or"<<16
dc.l "un"<<16
dc.l "ueq"<<8
dc.l "ugt"<<8
dc.l "uge"<<8
dc.l "ult"<<8
dc.l "ule"<<8
dc.l "ne"<<16
dc.l "t"<<24
dc.l "sf"<<16
dc.l "seq"<<8
dc.l "gt"<<16
dc.l "ge"<<16
dc.l "lt"<<16
dc.l "le"<<16
dc.l "gl"<<16
dc.l "gle"<<8
dc.l "ngle"
dc.l "ngl"<<8
dc.l "nle"<<8
dc.l "nlt"<<8
dc.l "nge"<<8
dc.l "ngt"<<8
dc.l "sne"<<8
dc.l "st"<<16
fmconst:dc.b "1E"!$80,"Pi"!$80,"Log10(2)"!$80,"e"!$80,"Log2(e)"!$80
dc.b "Log10(e)"!$80,"0.0"!$80,"ln(2)"!$80,"ln(10)"!$80
dc.b "1"!$80,"10"!$80,"100"!$80
usptxt: dc.b "usp"!$80
toccrtxt: dc.b ","
ccrtxt: dc.b "ccr"!$80
tosrtxt: dc.b ","
srtxt: dc.b "sr"!$80
xbcdtxt: dc.b "),-("!$80
cmpmtxt: dc.b ")+,("!$80
even
cregs: dc.b $08,$07,"srp",0 ;68040
dc.b $08,$06,"urp",0 ;68040
dc.b $08,$05,"mmur" ;68040
dc.b $08,$04,"isp",0
dc.b $08,$03,"msp",0
dc.b $08,$02,"caar" ;68020/30 only
dc.b $08,$01,"vbr",0
dc.b $08,$00,"usp",0
dc.b $00,$07,"dtt1" ;68040
dc.b $00,$06,"dtt0" ;68040
dc.b $00,$05,"itt1" ;68040
dc.b $00,$04,"itt0" ;68040
dc.b $00,$03,"tc",0,0 ;68040
dc.b $00,$02,"cacr"
dc.b $00,$01,"dfc",0
dc.b $00,$00,"sfc",0
dc.b $80
pregs: dc.b $08,"tt0"!$80
dc.b $0c,"tt1"!$80
dc.b $40,"tc"!$80
dc.b $44,"drp"!$80 ;68851 only
dc.b $48,"srp"!$80
dc.b $4c,"crp"!$80
dc.b $50,"cal"!$80 ;68851 only
dc.b $58,"scc"!$80 ;68851 only
dc.b $5c,"ac"!$80 ;68851 only
dc.b $60,"mmusr"!$80 ;68030 mmusr = 68851 psr
dc.b $60,"psr"!$80 ;68030 mmusr = 68851 psr
dc.b $64,"pcsr"!$80 ;68851 only
dc.b $ac,"val"!$80,0 ;68851 only
sizemov: dc.b "*blw",%11,%00,%10,%01
dcbtxt: dc.b "dc.b "!$80
gortxt: dc.b "holy hell,death to us,god is slaughtered,drink his blood"
typetab: dc.b "Unknown"!$80
dc.b "Task"!$80
dc.b "Interpt."!$80
dc.b "Device"!$80
dc.b "MsgPort"!$80
dc.b "Message"!$80
dc.b "FreeMsg"!$80
dc.b "ReplyMsg"!$80
dc.b "Resource"!$80
dc.b "Library"!$80
dc.b "Memory"!$80
dc.b "SoftInt"!$80
dc.b "Font"!$80
dc.b "Process"!$80
dc.b "Semaphor"!$80
statetb: dc.b "Invalid"!$80
dc.b "Added"!$80
dc.b "Running"!$80
dc.b "Ready"!$80
dc.b "Waiting"!$80
dc.b "Except"!$80
dc.b "Removed"!$80
helptxt:dc.b 'm <s><e>'!$80
dc.b 'Memory Dump'!$80
dc.b 'a <s><e>'!$80
dc.b 'ASCII Dump'!$80
dc.b 'bin<wltq> <s><e>'!$80
dc.b 'Binary Dump'!$80
dc.b 't [s][e][target]'!$80
dc.b 'TransferMem'!$80
dc.b 'c [s][e][target]'!$80
dc.b 'CompareMem'!$80
dc.b 'o [s][e][byte]'!$80
dc.b 'Occupy Mem'!$80
dc.b 'ow [s][e][word]'!$80
dc.b 'Occupy Mem'!$80
dc.b 'ol [s][e][longword]'!$80
dc.b 'Occupy Mem'!$80
dc.b 'e [s][e][byte]'!$80
dc.b 'EXOR Mem'!$80
dc.b 'ew [s][e][word]'!$80
dc.b 'EXOR Mem'!$80
dc.b 'el [s][e][longword]'!$80
dc.b 'EXOR Mem'!$80
dc.b 'nop [adr][num]'!$80
dc.b 'Fill With NOP'!$80
dc.b 'imp [s][e]<mode>'!$80
dc.b 'Implode Memory'!$80
dc.b 'exp [addr]'!$80
dc.b 'Explode Memory'!$80
dc.b 'f [s][e][b]<..>'!$80
dc.b 'Find Bytes'!$80
dc.b 'f [s][e]["text"]'!$80
dc.b 'Find Text'!$80
dc.b 'fmode [0|1|2]'!$80
dc.b 'Show Tab|Hex|Text'!$80
dc.b 'fi [s][e]["?*text"]'!$80
dc.b 'Find Instr.'!$80
dc.b 'F [addr]'!$80
dc.b 'Find Branch'!$80
dc.b 'F [addr] pc'!$80
dc.b 'Find PC-rel.'!$80
dc.b 'match [0]'!$80
dc.b 'Show/Clr MatchBuf'!$80
dc.b 'p [s][e]<period>'!$80
dc.b 'Play Sample'!$80
dc.b 'b <addr>'!$80
dc.b 'View Bitplane'!$80
dc.b 'cls'!$80
dc.b 'Clear Screen'!$80
dc.b 'B [rgb1] [rgb2]'!$80
dc.b 'Set Colors'!$80
dc.b 'W <addr>'!$80
dc.b 'Move Workspace'!$80
dc.b 'r <value register>'!$80
dc.b 'Load CPU'!$80
dc.b 'R'!$80
dc.b 'Show FPU'!$80
dc.b 'mmu'!$80
dc.b 'Show MMU'!$80
dc.b 'mmuon'!$80
dc.b 'Enable MMU'!$80
dc.b 'mmuoff'!$80
dc.b 'Disable MMU'!$80
dc.b 'settt0 [x]'!$80
dc.b 'modify TT0 (MMU)'!$80
dc.b 'settt1 [x]'!$80
dc.b 'modify TT1 (MMU)'!$80
dc.b 'settc [x]'!$80
dc.b 'modify TC (MMU)'!$80
dc.b 'setsrp [x y]'!$80
dc.b 'modify SRP (MMU)'!$80
dc.b 'setcrp [x y]'!$80
dc.b 'modify CRP (MMU)'!$80
dc.b 'setdrp [x y]'!$80
dc.b 'modify DRP (MMU)'!$80
dc.b 'setmmusr [x]'!$80
dc.b 'modify SR (MMU)'!$80
dc.b 'bl'!$80
dc.b 'List Breakpoints'!$80
dc.b 'bs [addr]'!$80
dc.b 'Set Breakpoint'!$80
dc.b 'bc [0|addr]'!$80
dc.b 'Clr Breakpoint'!$80
dc.b 'g [addr]'!$80
dc.b 'Start Program'!$80
dc.b 'i'!$80
dc.b 'Display Vectors'!$80
dc.b 'd <s><e>'!$80
dc.b 'Disassemble 680x0'!$80
dc.b 'dm'!$80
dc.b 'Toggle Dec/Hex'!$80
dc.b 'ds'!$80
dc.b 'Toggle Signed'!$80
dc.b 'dv'!$80
dc.b 'Toggle Eff.Addr'!$80
dc.b 'n [addr]'!$80
dc.b 'Assemble 680x0'!$80
dc.b 'u <s><e>'!$80
dc.b 'Disassemble 65816'!$80
dc.b 'N [addr]'!$80
dc.b 'Assemble 65816'!$80
dc.b 'accu [8|16]'!$80
dc.b '65816 Accu Size'!$80
dc.b 'index [8|16]'!$80
dc.b '65816 Index Size'!$80
dc.b 'auto'!$80
dc.b '65816 Auto Size'!$80
dc.b 'K <Fn ',39,'text1|text2..',39,'>'!$80
dc.b 'Set FKey'!$80
dc.b 'D <n>'!$80
dc.b 'Select Drive'!$80
dc.b 'dir <f>'!$80
dc.b 'Show Directory'!$80
dc.b 'bootsum [addr]'!$80
dc.b 'Bootblk Checksum'!$80
dc.b 'datasum [addr]'!$80
dc.b 'Datablk Checksum'!$80
dc.b 'bitsum [addr]'!$80
dc.b 'Bitmap Checksum'!$80
dc.b 'kicksum [addr]'!$80
dc.b 'Kickstart Chk'!$80
dc.b 'megasum [addr]'!$80
dc.b 'Sega MD Checksum'!$80
dc.b 'famisum [addr]'!$80
dc.b 'Famicon Checksum'!$80
dc.b 'rawplay [addr]'!$80
dc.b 'Transfer Raw'!$80
dc.b 'smdplay [addr]'!$80
dc.b 'Transfer SMD'!$80
dc.b 'famiplay [addr]'!$80
dc.b 'Transfer SMC'!$80
dc.b 'smd2raw [addr]'!$80
dc.b 'Convert To Raw'!$80
dc.b 'v <sync>'!$80
dc.b 'Set Sync Word'!$80
dc.b 'vc <track>'!$80
dc.b 'Search Sync Word'!$80
dc.b 'format [name]<q><0..3>'!$80
dc.b 'Format Disk'!$80
dc.b 'install <0..3|4>'!$80
dc.b 'Install DOS\n|1.3'!$80
dc.b 'verify'!$80
dc.b 'Toggle Verify'!$80
dc.b 'info'!$80
dc.b 'Report Diskinfo'!$80
dc.b 'M'!$80
dc.b 'Show Block Map'!$80
dc.b 'l [addr][cyl]<num>'!$80
dc.b 'Read Cylinder'!$80
dc.b 's [addr][cyl]<num>'!$80
dc.b 'Write Cylinder'!$80
dc.b 'l [addr][sec]<num> s'!$80
dc.b 'Read Sector'!$80
dc.b 's [addr][sec]<num> s'!$80
dc.b 'Write Sector'!$80
dc.b 'type "file"'!$80
dc.b 'Type File'!$80
dc.b 'L "file" [addr]'!$80
dc.b 'Load File'!$80
dc.b 'S "file" [s][e]'!$80
dc.b 'Save File'!$80
dc.b 'cd :'!$80
dc.b 'Go To Rootdir'!$80
dc.b 'cd [subdir]'!$80
dc.b 'Change Dir'!$80
dc.b 'mk [subdir]'!$80
dc.b 'Make Directory'!$80
dc.b 'del "file/dir"'!$80
dc.b 'Delete File/Dir'!$80
dc.b 'k'!$80
dc.b 'Toggle Keymap'!$80
dc.b 'config'!$80
dc.b 'Config Boards'!$80
dc.b 'gary'!$80
dc.b 'A3000/A4000 Info'!$80
dc.b 'ramsey'!$80
dc.b 'A3000/A4000 Info'!$80
dc.b 'P'!$80
dc.b 'Toggle Printer'!$80
dc.b 'h [beg][end]<dst><jmp>'!$80
dc.b 'Create Hunk'!$80
dc.b 'time'!$80
dc.b 'Show Date/Time'!$80
dc.b '/ [n]'!$80
dc.b 'Show Systeminfo'!$80
dc.b 'V <s><e>'!$80
dc.b 'Disasm Copper'!$80
dc.b 'cop <s e>'!$80
dc.b 'Find Copperlists'!$80
dc.b 'custom'!$80
dc.b 'Customreg Help'!$80
dc.b '? [value] <exp value>'!$80
dc.b 'Calculator'!$80
dc.b 'x'!$80
dc.b 'quit'!$80
dc.b 0
custnam:dc.b $0/2,"BltDDat"!$80
dc.b $2/2,"DMAConR"!$80
dc.b $4/2,"VPosR"!$80
dc.b $6/2,"VHPosR"!$80
dc.b $8/2,"DskDatR"!$80
dc.b $e/2,"ClxDat"!$80
dc.b $10/2,"ADKConR"!$80
dc.b $16/2,"PotGoR"!$80
dc.b $18/2,"SerDatR"!$80
dc.b $1a/2,"DskBytR"!$80
dc.b $1c/2,"IntEnaR"!$80
dc.b $1e/2,"IntReqR"!$80
dc.b $20/2,"DskPth"!$80
dc.b $22/2,"DskPtl"!$80
dc.b $24/2,"DskLen"!$80
dc.b $26/2,"DskDat"!$80
dc.b $28/2,"RefPtr"!$80
dc.b $2a/2,"VPosW"!$80
dc.b $2c/2,"VHPosW"!$80
dc.b $2e/2,"CopCon"!$80
dc.b $30/2,"SerDat"!$80
dc.b $32/2,"SerPer"!$80
dc.b $34/2,"PotGo"!$80
dc.b $36/2,"JoyTest"!$80
dc.b $38/2,"StrEqu"!$80
dc.b $3a/2,"StrVbl"!$80
dc.b $3c/2,"StrHor"!$80
dc.b $3e/2,"StrLong"!$80
copname:dc.b $44/2,"BltAFWM"!$80
dc.b $46/2,"BltALWM"!$80
dc.b $48/2,"BltCPth"!$80
dc.b $4a/2,"BltCPtl"!$80
dc.b $4c/2,"BltBPth"!$80
dc.b $4e/2,"BltBPtl"!$80
dc.b $50/2,"BltAPth"!$80
dc.b $52/2,"BltAPtl"!$80
dc.b $54/2,"BltDPth"!$80
dc.b $56/2,"BltDPtl"!$80
dc.b $58/2,"BltSize"!$80
dc.b $5a/2,"BltCon2"!$80 ;big agnus
dc.b $5c/2,"BltSizV"!$80 ;big agnus
dc.b $5e/2,"BltSizH"!$80 ;big agnus
dc.b $60/2,"BltCMod"!$80
dc.b $62/2,"BltBMod"!$80
dc.b $64/2,"BltAMod"!$80
dc.b $66/2,"BltDMod"!$80
dc.b $70/2,"BltCDat"!$80
dc.b $72/2,"BltBDat"!$80
dc.b $74/2,"BltADat"!$80
dc.b $78/2,"SprHDat"!$80 ;big agnus
dc.b $7c/2,"DeniseID"!$80 ;big agnus
dc.b $7e/2,"DskSync"!$80
dc.b $8c/2,"CopIns"!$80 ;no effect
dc.b $8e/2,"DiwStrt"!$80
dc.b $90/2,"DiwStop"!$80
dc.b $92/2,"DDFStrt"!$80
dc.b $94/2,"DDFStop"!$80
dc.b $96/2,"DMACon"!$80
dc.b $98/2,"ClxCon"!$80
dc.b $9a/2,"IntEna"!$80
dc.b $9c/2,"IntReq"!$80
dc.b $9e/2,"AdkCon"!$80
dc.b $10c/2,"BplCon4"!$80 ;aga
dc.b $10e/2,"ClxCon2"!$80 ;aga
dc.b $1c0/2,"HTotal"!$80 ;big agnus
dc.b $1c2/2,"HSStop"!$80 ;big agnus
dc.b $1c4/2,"HBStrt"!$80 ;big agnus
dc.b $1c6/2,"HBStop"!$80 ;big agnus
dc.b $1c8/2,"VTotal"!$80 ;big agnus
dc.b $1ca/2,"VSStop"!$80 ;big agnus
dc.b $1cc/2,"VBStrt"!$80 ;big agnus
dc.b $1ce/2,"VBStop"!$80 ;big agnus
dc.b $1d0/2,"SprHStrt"!$80 ;big agnus
dc.b $1d2/2,"SprHStop"!$80 ;big agnus
dc.b $1d4/2,"BplHStrt"!$80 ;big agnus
dc.b $1d6/2,"BplHStop"!$80 ;big agnus
dc.b $1d8/2,"HHPosW"!$80 ;big agnus
dc.b $1da/2,"HHPosR"!$80 ;big agnus
dc.b $1dc/2,"BeamCon0"!$80 ;big agnus
dc.b $1de/2,"HSStrt"!$80 ;big agnus
dc.b $1e0/2,"VSStrt"!$80 ;big agnus
dc.b $1e2/2,"HCenter"!$80 ;big agnus
dc.b $1e4/2,"DiwHigh"!$80 ;big agnus
dc.b $1e6/2,"BplHMod"!$80 ;big agnus
dc.b $1e8/2,"SprHPth"!$80 ;big agnus
dc.b $1ea/2,"SprHPtl"!$80 ;big agnus
dc.b $1ec/2,"BplHPth"!$80 ;big agnus
dc.b $1ee/2,"BplHPtl"!$80 ;big agnus
dc.b $1fc/2,"FMode"!$80 ;aga
dc.b $1fe/2,"CopNOP"!$80 ;needed
cust2nm:dc.b $a/2,$c/2,2/2,"Joy",0,"Dat"!$80 ;0,1
dc.b $12/2,$14/2,2/2,"Pot",0,"Dat"!$80 ;0,1
cp2name: ;first,last,step,name,nameindex,name!$80
dc.b $40/2,$42/2,2/2,"BltCon",0," "!$80 ;0,1
dc.b $80/2,$84/2,4/2,"Cop",1,"Lch"!$80 ;1,2
dc.b $82/2,$86/2,4/2,"Cop",1,"Lcl"!$80 ;1,2
dc.b $88/2,$8a/2,2/2,"CopJmp",1," "!$80 ;1,2
dc.b $a0/2,$d0/2,16/2,"Aud",0,"Lch"!$80 ;0-3
dc.b $a2/2,$d2/2,16/2,"Aud",0,"Lcl"!$80 ;0-3
dc.b $a4/2,$d4/2,16/2,"Aud",0,"Len"!$80 ;0-3
dc.b $a6/2,$d6/2,16/2,"Aud",0,"Per"!$80 ;0-3
dc.b $a8/2,$d8/2,16/2,"Aud",0,"Vol"!$80 ;0-3
dc.b $aa/2,$da/2,16/2,"Aud",0,"Dat"!$80 ;0-3
dc.b $e0/2,$fc/2,4/2,"Bpl",1,"Pth"!$80 ;1-8
dc.b $e2/2,$fe/2,4/2,"Bpl",1,"Ptl"!$80 ;1-8
dc.b $100/2,$106/2,2/2,"BplCon",0," "!$80 ;0-3(ecs)
dc.b $108/2,$10a/2,2/2,"Bpl",1,"Mod"!$80 ;1,2
dc.b $110/2,$11e/2,2/2,"Bpl",1,"Dat"!$80 ;1-8 no effect
dc.b $120/2,$13c/2,4/2,"Spr",0,"Pth"!$80 ;0-7
dc.b $122/2,$13e/2,4/2,"Spr",0,"Ptl"!$80 ;0-7
dc.b $140/2,$178/2,8/2,"Spr",0,"Pos"!$80 ;0-7
dc.b $142/2,$17a/2,8/2,"Spr",0,"Ctl"!$80 ;0-7
dc.b $144/2,$17c/2,8/2,"Spr",0,"DatA"!$80 ;0-7
dc.b $146/2,$17e/2,8/2,"Spr",0,"DatB"!$80 ;0-7
dc.b $180/2,$1be/2,2/2,"Color",0," "!$80 ;0-31
dc.b -1
xopfail=0 ;dummy
xnoops=1
xdcwop=2
xeatoccr=3
xeatosr=4
xsrtoea=5
xwordbxx=6
xwordcc=7
xshortbxx=8
xshortcc=9
xeatoax=10
xeatodx=11
xdxtoea=12
xiwordtoccr=13
xiwordtosr=14
xiword=15
xccodewordrel=16
xinibtoea=17
xccodeea=18
xsrcea=19
xsize67eatodx=20
xsize8eatoax9b=21
xsize67adsbx=22
xsize67ixtoea=23
xsize67i9btoea=24
xsize67x9btodx02=25
xitrap=26
xsrcdx02=27
ximusp=28
ximove=29
ximoveq=30
xicmpm=31
xxbcd=32
xsize6movep=33
ximovem=34
xdx9btodx02=35
xax9btoax02=36
xdx9btoax02=37
xiunlk=38
xilink=39
ximovec=40
xccrtoea=41
xmoves=42
xbfield=43
xbfieldtodx=44
xdxtobfield=45
xbkpt=46
xlongbxx=47
xlongcc=48
xcallm=49
xcas=50
xcas2=51
xchk2=52
xcmp2=53
xrx03=54
xccode=55
xccodesize=56
xilinklg=57
xmulul=58
xmulsl=59
xdivull=60
xdivsll=61
xpack=62
xea2todx=63 ;chk.l
xfccode=64
xfccodesize=65
xfccodewordrel=66
xfccodeea=67
xfnop=68
xfmovecr=69
xpmove=70
xpmovefd=71
xpflusha=72
xpflush=73
xpload=74
xptest=75
xidbcac=76
xidbind=77
xmov16=78
xpccodeea=79
xpccodewordrel=80
xpccode=81
xpccodesize=82
xbrapcc=83
xbrafcc=84
xpflushs=85
xpflushr=86
xpvalid=87
xpflush40=88
xmov162=89
xlpstop=90
xtbl=91
xfpu=92
xfmovel=93
xfmoveml=94
xfmovemx=95
even
disoffs:dc.w opfail,noops,dcwop,eatoccr,eatosr,srtoea,wordbxx,wordcc
dc.w shortbxx,shortcc,eatoax,eatodx,dxtoea,iwordtoccr
dc.w iwordtosr,iword,ccodewordrel,inibtoea,ccodeea,srcea
dc.w size67eatodx,size8eatoax9b,size67adsbx,size67ixtoea
dc.w size67i9btoea,size67x9btodx02,itrap,srcdx02,imusp
dc.w imove,imoveq,icmpm,xbcd,size6movep
dc.w imovem,dx9btodx02,ax9btoax02,dx9btoax02
dc.w iunlk,ilink,imovec,ccrtoea,imoves,dbfield,dbfieldtodx
dc.w ddxtobfield,dbkpt,longbxx,longcc,icallm,dcas,dcas2
dc.w dchk2,dcmp2,drtm,dtpcc,dtpccsize,dlinklg,dmulul,dmulsl
dc.w ddivull,ddivsll,dpack,ea2todx,dtpfcc,dtpfccsize
dc.w dfccodewordrel,fccodeea,dfnop,dfmovecr,dpmove,dpmovefd
dc.w dpflusha,dpflush,dpload,dptest,didbcac,didbind,dmov16
dc.w dpccodeea,dpccodewordrel,dtppcc,dtppccsize,dbrapcc,dbrafcc
dc.w dpflushs,dpflushr,dpvalid,dpflush40,dmov162,dlpstop
dc.w dtbl,dfpu,dfmovel,dfmoveml,dfmovemx
assoffs:dc.w aopfail,anoops,adcwop,aeatoccr,aeatosr,asrtoea
dc.w awordbxx,awordcc
dc.w ashortbxx,ashortcc,aeatoax,aeatodx,adxtoea,aiwordtoccr
dc.w aiwordtosr,aiword,accodewordrel,ainibtoea,accodeea,asrcea
dc.w asize67eatodx,asize8eatoax9b,asize67adsbx,asize67ixtoea
dc.w asize67i9btoea,asize67x9btodx02,aitrap,asrcdx02,aimusp
dc.w aimove,aimoveq,aicmpm,axbcd,asize6movep
dc.w aimovem,adx9btodx02,aax9btoax02,adx9btoax02
dc.w aiunlk,ailink,aimovec,accrtoea,aimoves,abfield,abfieldtodx
dc.w adxtobfield,abkpt,alongbxx,alongcc,aicallm,acas,acas2
dc.w achk2,acmp2,artm,atpcc,atpccsize,alinklg,amulul,amulsl
dc.w adivull,adivsll,apack,aea2todx,atpfcc,atpfccsize
dc.w afccodewordrel,afccodeea,afnop,afmovecr,apmove,apmovefd
dc.w apflusha,apflush,apload,aptest,aidbcac,aidbind,amov16
dc.w apccodeea,apccodewordrel,atppcc,atppccsize,abrapcc,abrafcc
dc.w apflushs,apflushr,apvalid,apflush40,amov162,alpstop
dc.w atbl,afpu,afmovel,afmoveml,afmovemx
; xyyyyyyy 0:fp0,1:fp0,fp0
fpuinst:dc.b %10110000,"sincos"!128 ;order!
dc.b %00011000,"abs"!128,0,0,0
dc.b %01011000,"sabs"!128,0,0
dc.b %01011100,"dabs"!128,0,0
dc.b %00011100,"acos"!128,0,0
dc.b %10100010,"add"!128,0,0,0
dc.b %11100010,"sadd"!128,0,0
dc.b %11100110,"dadd"!128,0,0
dc.b %00001100,"asin"!128,0,0
dc.b %00001010,"atan"!128,0,0
dc.b %00001101,"atanh"!128,0
dc.b %10111000,"cmp"!128,0,0,0
dc.b %00011101,"cos"!128,0,0,0
dc.b %00011001,"cosh"!128,0,0
dc.b %10100000,"div"!128,0,0,0
dc.b %11100000,"sdiv"!128,0,0
dc.b %11100100,"ddiv"!128,0,0
dc.b %00010000,"etox"!128,0,0
dc.b %00011110,"getexp"!128
dc.b %00011111,"getman"!128
dc.b %00000001,"int"!128,0,0,0
dc.b %00000011,"intrz"!128,0
dc.b %00010101,"log10"!128,0
dc.b %00010110,"log2"!128,0,0
dc.b %00010100,"logn"!128,0,0
dc.b %00000110,"lognp1"!128
dc.b %10100001,"mod"!128,0,0,0
movetxt:dc.b %10000000,"move"!128,0,0
dc.b %11000000,"smove"!128,0
dc.b %11000100,"dmove"!128,0
dc.b %10100011,"mul"!128,0,0,0
dc.b %11100011,"smul"!128,0,0
dc.b %11100111,"dmul"!128,0,0
dc.b %00011010,"neg"!128,0,0,0
dc.b %01011010,"sneg"!128,0,0
dc.b %01011110,"dneg"!128,0,0
dc.b %10100101,"rem"!128,0,0,0
dc.b %10100110,"scale"!128,0
dc.b %10100100,"sgldiv"!128
dc.b %10100111,"sglmul"!128
dc.b %00001110,"sin"!128,0,0,0
dc.b %00000010,"sinh"!128,0,0
dc.b %00000100,"sqrt"!128,0,0
dc.b %01000001,"ssqrt"!128,0
dc.b %01000101,"dsqrt"!128,0
dc.b %10101000,"sub"!128,0,0,0
dc.b %11101000,"ssub"!128,0,0
dc.b %11101100,"dsub"!128,0,0
dc.b %00001111,"tan"!128,0,0,0
dc.b %00001001,"tanh"!128,0,0
dc.b %00010010,"tentox"!128
dc.b %00111010,"tst"!128,0,0,0
dc.b %00010001,"twotox"!128
dc.b 0
even
instr: dc.w $ffff,$4afc,snop!xnoops
dc.b "illegal"!128,0
dc.w $ffff,$4e70,snop!xnoops
dc.b "reset"!128,0,0,0
dc.w $ffff,$4e71,snop!xnoops
dc.b "nop"!128,0,0,0,0,0
dc.w $ffff,$4e73,snop!xnoops
dc.b "rte"!128,0,0,0,0,0
dc.w $ffff,$4e75,snop!xnoops
dc.b "rts"!128,0,0,0,0,0
dc.w $ffff,$4e77,snop!xnoops
dc.b "rtr"!128,0,0,0,0,0
dc.w $ffff,$4afa,snop!xnoops ;cpu32 only
dc.b "bgnd"!128,0,0,0,0
dc.w $ffc0,$f200,snop!xfpu ;68881
dc.b "f"!128,0,0,0,0,0,0,0
dc.w $ffc0,$f200,stab!xfmovel ;68881
dc.b "fmove.l"!128,0
dc.w $ffc0,$f200,stab!xfmoveml ;68881
dc.b "fmovem.l"!128
dc.w $ffc0,$f200,stab!xfmovemx ;68881
dc.b "fmovem.x"!128
dc.w $ffff,$f200,stab!xfmovecr ;68881
dc.b "fmovecr"!128,0
dc.w $ffff,$f280,snop!xfnop ;68881
dc.b "fnop"!128,0,0,0,0
dc.w $ffff,$f510,snop!xnoops ;68040 only!
dc.b "pflushan"!128
dc.w $ffff,$f518,snop!xnoops ;68040 only!
dc.b "pflusha!"!128
dc.w $ffff,$f000,snop!xpflusha ;68020 order!
dc.b "pflusha"!128,0
dc.w $ffff,$f000,stab!xpflushs ;68851 only order!
dc.b "pflushs"!128,0
dc.w $ffc0,$f000,stab!xpflushr ;68851 only order!
dc.b "pflushr"!128,0
dc.w $fff8,$f500,stab!xpflush40 ;68040 only!
dc.b "pflushn"!128,0
dc.w $fff8,$f508,stab!xpflush40 ;68040 only!
dc.b "pflush"!128,0,0
dc.w $fff8,$f548,stab!xpflush40 ;68040 only!
dc.b "ptestw"!128,0,0
dc.w $fff8,$f568,stab!xpflush40 ;68040 only!
dc.b "ptestr"!128,0,0
dc.w $ffff,$f000,stab!xpflush ;68020 order!
dc.b "pflush"!128,0,0
dc.w $ffc0,$f000,stab!xpvalid ;68851 only
dc.b "pvalid"!128,0,0
dc.w $ffff,$003c,stab!xiwordtoccr
dc.b "ori"!128,0,0,0,0,0
dc.w $ffff,$023c,stab!xiwordtoccr
dc.b "andi"!128,0,0,0,0
dc.w $ffff,$0a3c,stab!xiwordtoccr
dc.b "eori"!128,0,0,0,0
dc.w $ffff,$007c,stab!xiwordtosr
dc.b "ori"!128,0,0,0,0,0
dc.w $ffff,$027c,stab!xiwordtosr
dc.b "andi"!128,0,0,0,0
dc.w $ffff,$0a7c,stab!xiwordtosr
dc.b "eori"!128,0,0,0,0
dc.w $f1f8,$c140,stab!xdx9btodx02
dc.b "exg"!128,0,0,0,0,0
dc.w $f1f8,$c148,stab!xax9btoax02
dc.b "exg"!128,0,0,0,0,0
dc.w $f1f8,$c188,stab!xdx9btoax02
dc.b "exg"!128,0,0,0,0,0
dc.w $fff8,$4e58,stab!xiunlk
dc.b "unlk"!128,0,0,0,0
dc.w $fff8,$4808,stab!xilinklg ;68020
dc.b "link.l"!128,0,0
dc.w $fff8,$4e50,stab!xilink
dc.b "link"!128,0,0,0,0
dc.w $fff8,$4848,stab!xbkpt ;68020
dc.b "bkpt"!128,0,0,0,0
dc.w $f1f0,$8140,stab!xpack ;68020
dc.b "pack"!128,0,0,0,0
dc.w $f1f0,$8180,stab!xpack ;68020
dc.b "unpk"!128,0,0,0,0
dc.w $fff0,$4e40,stab!xitrap
dc.b "trap"!128,0,0,0,0
dc.w $f100,$7000,stab!ximoveq
dc.b "moveq"!128,0,0,0
dc.w $ffff,$f800,stab!xlpstop ;cpu32 only
dc.b "lpstop"!128,0,0
dc.w $ffff,$4e72,stab!xiword
dc.b "stop"!128,0,0,0,0
dc.w $ffff,$4e74,stab!xiword ;68010
dc.b "rtd"!128,0,0,0,0,0
dc.w $fdff,$0cfc,snop!xcas2 ;68020
dc.b "cas2."!128,0,0,0
dc.w $fff8,$4840,stab!xsrcdx02
dc.b "swap"!128,0,0,0,0
dc.w $fff8,$49c0,stab!xsrcdx02 ;68020
dc.b "extb"!128,0,0,0,0
dc.w $ffb8,$4880,s6!xsrcdx02
dc.b "ext"!128,0,0,0,0,0
dc.w $fff0,$06c0,stab!xrx03 ;68020
dc.b "rtm"!128,0,0,0,0,0
;????
dc.w $fffe,$f07a,snop!xpccodesize ;68851 only order!
dc.b "ptrap"!128,0,0,0
dc.w $ffff,$f07c,snop!xpccode ;68851 only order!
dc.b "ptrap"!128,0,0,0
dc.w $fffe,$f27a,snop!xfccodesize ;68881 order!
dc.b "ftrap"!128,0,0,0
dc.w $ffff,$f27c,snop!xfccode ;68881 order!
dc.b "ftrap"!128,0,0,0
dc.w $f0fe,$50fa,snop!xccodesize ;68020 order!
dc.b "trap"!128,0,0,0,0
dc.w $f0ff,$50fc,snop!xccode ;68020 order!
dc.b "trap"!128,0,0,0,0
dc.w $ffff,$4e76,snop!xnoops ;order!
dc.b "trapv"!128,0,0,0
;????
dc.w $ff3f,$f418,stab!xidbcac ;68040
dc.b "cinva"!128,0,0,0
dc.w $ff38,$f408,stab!xidbind ;68040
dc.b "cinvl"!128,0,0,0
dc.w $ff38,$f410,stab!xidbind ;68040
dc.b "cinvp"!128,0,0,0
dc.w $ff3f,$f438,stab!xidbcac ;68040
dc.b "cpusha"!128,0,0
dc.w $ff38,$f428,stab!xidbind ;68040
dc.b "cpushl"!128,0,0
dc.w $ff38,$f430,stab!xidbind ;68040
dc.b "cpushp"!128,0,0
dc.w $fff8,$f620,stab!xmov16 ;68040 order!
dc.b "move16"!128,0,0
dc.w $ffe0,$f600,stab!xmov162 ;68040
dc.b "move16"!128,0,0
dc.w $f138,$b108,s67!xicmpm
dc.b "cmpm"!128,0,0,0,0
dc.w $f1f0,$c100,stab!xxbcd
dc.b "abcd"!128,0,0,0,0
dc.w $f1f0,$8100,stab!xxbcd
dc.b "sbcd"!128,0,0,0,0
dc.w $f130,$d100,s67!xsize67adsbx
dc.b "addx"!128,0,0,0,0
dc.w $f130,$9100,s67!xsize67adsbx
dc.b "subx"!128,0,0,0,0
dc.w $ffc0,$f000,stab!xpmovefd ;68030 only
dc.b "pmovefd"!128,0
dc.w $ffc0,$f000,stab!xpmove ;68020
dc.b "pmove"!128,0,0,0
dc.w $ffc0,$f000,snop!xpload ;68020
dc.b "pload"!128,0,0,0
dc.w $ffc0,$f000,snop!xptest ;68020
dc.b "ptest"!128,0,0,0
dc.w $ffc0,$e8c0,stab!xbfield ;68020
dc.b "bftst"!128,0,0,0
dc.w $ffc0,$eac0,stab!xbfield ;68020
dc.b "bfchg"!128,0,0,0
dc.w $ffc0,$ecc0,stab!xbfield ;68020
dc.b "bfclr"!128,0,0,0
dc.w $ffc0,$eec0,stab!xbfield ;68020
dc.b "bfset"!128,0,0,0
dc.w $ffc0,$e9c0,stab!xbfieldtodx ;68020
dc.b "bfextu"!128,0,0
dc.w $ffc0,$ebc0,stab!xbfieldtodx ;68020
dc.b "bfexts"!128,0,0
dc.w $ffc0,$edc0,stab!xbfieldtodx ;68020
dc.b "bfffo"!128,0,0,0
dc.w $ffc0,$efc0,stab!xdxtobfield ;68020
dc.b "bfins"!128,0,0,0
dc.w $ffc0,$06c0,stab!xcallm ;68020
dc.b "callm"!128,0,0,0
dc.w $ffc0,$40c0,stab!xsrtoea
dc.b "move"!128,0,0,0,0
dc.w $ffc0,$42c0,stab!xccrtoea ;68010
dc.b "move"!128,0,0,0,0
dc.w $ffc0,$44c0,stab!xeatoccr
dc.b "move"!128,0,0,0,0
dc.w $ffc0,$46c0,stab!xeatosr
dc.b "move"!128,0,0,0,0
dc.w $fff0,$4e60,stab!ximusp
dc.b "move"!128,0,0,0,0
dc.w $fffe,$4e7a,stab!ximovec ;68010
dc.b "movec"!128,0,0,0
dc.w $fb80,$4880,s6!ximovem
dc.b "movem"!128,0,0,0
dc.w $f138,$0108,s6!xsize6movep
dc.b "movep"!128,0,0,0
dc.w $ffc0,$f800,snop!xtbl ;cpu32 only
dc.b "tbl"!128,0,0,0,0,0
dc.w $f1c0,$41c0,stab!xeatoax
dc.b "lea"!128,0,0,0,0,0
dc.w $ffff,$60ff,stab!xlongbxx ;68020
dc.b "bra.l"!128,0,0,0
dc.w $ffff,$61ff,stab!xlongbxx ;68020
dc.b "bsr.l"!128,0,0,0
dc.w $ffff,$6000,stab!xwordbxx
dc.b "bra.w"!128,0,0,0
dc.w $ffff,$6100,stab!xwordbxx
dc.b "bsr.w"!128,0,0,0
dc.w $ff00,$6000,stab!xshortbxx ;order !
dc.b "bra.b"!128,0,0,0
dc.w $ff00,$6000,stab!xshortbxx ;order !
dc.b "bra.s"!128,0,0,0 ;clone
dc.w $ff00,$6100,stab!xshortbxx
dc.b "bsr.b"!128,0,0,0
dc.w $ff00,$6100,stab!xshortbxx
dc.b "bsr.s"!128,0,0,0 ;clone
dc.w $ffb0,$f080,snop!xbrapcc ;68851 only
dc.b "pb"!128,0,0,0,0,0,0
dc.w $ffa0,$f280,snop!xbrafcc ;68881
dc.b "fb"!128,0,0,0,0,0,0
dc.w $f0ff,$60ff,snop!xlongcc ;68020
dc.b "b"!128,0,0,0,0,0,0,0
dc.w $f0ff,$6000,snop!xwordcc
dc.b "b"!128,0,0,0,0,0,0,0
dc.w $f000,$6000,snop!xshortcc
dc.b "b"!128,0,0,0,0,0,0,0
dc.w $fff8,$f048,snop!xpccodewordrel ;68851 only
dc.b "pdb"!128,0,0,0,0,0
dc.w $ffc0,$f040,snop!xpccodeea ;68851 only
dc.b "ps"!128,0,0,0,0,0,0
dc.w $fff8,$f248,snop!xfccodewordrel ;68881
dc.b "fdb"!128,0,0,0,0,0
dc.w $ffc0,$f240,snop!xfccodeea ;68881
dc.b "fs"!128,0,0,0,0,0,0
dc.w $f0f8,$50c8,snop!xccodewordrel ;order !
dc.b "db"!128,0,0,0,0,0,0
dc.w $f0c0,$50c0,snop!xccodeea
dc.b "s"!128,0,0,0,0,0,0,0
dc.w $ffc0,$4800,stab!xsrcea
dc.b "nbcd"!128,0,0,0,0
dc.w $ffc0,$4840,stab!xsrcea
dc.b "pea"!128,0,0,0,0,0
dc.w $ffc0,$4ac0,stab!xsrcea
dc.b "tas"!128,0,0,0,0,0
dc.w $ffc0,$4e80,stab!xsrcea
dc.b "jsr"!128,0,0,0,0,0
dc.w $ffc0,$4ec0,stab!xsrcea
dc.b "jmp"!128,0,0,0,0,0
dc.w $ffc0,$e0c0,stab!xsrcea
dc.b "asr"!128,0,0,0,0,0
dc.w $ffc0,$e1c0,stab!xsrcea
dc.b "asl"!128,0,0,0,0,0
dc.w $ffc0,$e2c0,stab!xsrcea
dc.b "lsr"!128,0,0,0,0,0
dc.w $ffc0,$e3c0,stab!xsrcea
dc.b "lsl"!128,0,0,0,0,0
dc.w $ffc0,$e4c0,stab!xsrcea
dc.b "roxr"!128,0,0,0,0
dc.w $ffc0,$e5c0,stab!xsrcea
dc.b "roxl"!128,0,0,0,0
dc.w $ffc0,$e6c0,stab!xsrcea
dc.b "ror"!128,0,0,0,0,0
dc.w $ffc0,$e7c0,stab!xsrcea
dc.b "rol"!128,0,0,0,0,0
dc.w $ffc0,$f100,stab!xsrcea ;68851 only
dc.b "psave"!128,0,0,0
dc.w $ffc0,$f140,stab!xsrcea ;68851 only
dc.b "prestore"!128
dc.w $ffc0,$f300,stab!xsrcea ;68881
dc.b "fsave"!128,0,0,0
dc.w $ffc0,$f340,stab!xsrcea ;68881
dc.b "frestore"!128
dc.w $ffc0,$4c40,stab!xdivull ;68020
dc.b "divul.l"!128,0
dc.w $ffc0,$4c40,stab!xdivsll ;68020
dc.b "divsl.l"!128,0
dc.w $ffc0,$4c40,stab!xmulul ;68020
dc.b "divu.l"!128,0,0
dc.w $ffc0,$4c40,stab!xmulsl ;68020
dc.b "divs.l"!128,0,0
dc.w $ffc0,$4c00,stab!xmulul ;68020
dc.b "mulu.l"!128,0,0
dc.w $ffc0,$4c00,stab!xmulsl ;68020
dc.b "muls.l"!128,0,0
dc.w $f1c0,$80c0,stab!xeatodx
dc.b "divu"!128,0,0,0,0
dc.w $f1c0,$81c0,stab!xeatodx
dc.b "divs"!128,0,0,0,0
dc.w $f1c0,$c0c0,stab!xeatodx
dc.b "mulu"!128,0,0,0,0
dc.w $f1c0,$c1c0,stab!xeatodx
dc.b "muls"!128,0,0,0,0
dc.w $f1c0,$4180,stab!xeatodx
dc.b "chk.w"!128,0,0,0
dc.w $f1c0,$4100,stab!xea2todx ;68020
dc.b "chk.l"!128,0,0,0
dc.w $f0c0,$90c0,s8!xsize8eatoax9b
dc.b "suba"!128,0,0,0,0
dc.w $f0c0,$b0c0,s8!xsize8eatoax9b
dc.b "cmpa"!128,0,0,0,0
dc.w $f0c0,$d0c0,s8!xsize8eatoax9b
dc.b "adda"!128,0,0,0,0
dc.w $f100,$8000,s67!xsize67eatodx
dc.b "or"!128,0,0,0,0,0,0
dc.w $f100,$9000,s67!xsize67eatodx
dc.b "sub"!128,0,0,0,0,0
dc.w $f100,$b000,s67!xsize67eatodx
dc.b "cmp"!128,0,0,0,0,0
dc.w $f100,$c000,s67!xsize67eatodx
dc.b "and"!128,0,0,0,0,0
dc.w $f100,$d000,s67!xsize67eatodx
dc.b "add"!128,0,0,0,0,0
dc.w $f100,$8100,s67!xdxtoea
dc.b "or"!128,0,0,0,0,0,0
dc.w $f100,$9100,s67!xdxtoea
dc.b "sub"!128,0,0,0,0,0
dc.w $f100,$b100,s67!xdxtoea
dc.b "eor"!128,0,0,0,0,0
dc.w $f100,$c100,s67!xdxtoea
dc.b "and"!128,0,0,0,0,0
dc.w $f100,$d100,s67!xdxtoea
dc.b "add"!128,0,0,0,0,0
dc.w $ffc0,$0800,stab!xinibtoea
dc.b "btst"!128,0,0,0,0
dc.w $ffc0,$0840,stab!xinibtoea
dc.b "bchg"!128,0,0,0,0
dc.w $ffc0,$0880,stab!xinibtoea
dc.b "bclr"!128,0,0,0,0
dc.w $ffc0,$08c0,stab!xinibtoea
dc.b "bset"!128,0,0,0,0
dc.w $f9c0,$08c0,s9a_!xcas ;68020
dc.b "cas"!128,0,0,0,0,0
dc.w $f9c0,$00c0,s9a!xchk2 ;68020
dc.b "chk2"!128,0,0,0,0
dc.w $f9c0,$00c0,s9a!xcmp2 ;68020
dc.b "cmp2"!128,0,0,0,0
dc.w $f100,$5000,s67!xsize67i9btoea
dc.b "addq"!128,0,0,0,0
dc.w $f100,$5100,s67!xsize67i9btoea
dc.b "subq"!128,0,0,0,0
dc.w $f118,$e000,s67!xsize67x9btodx02
dc.b "asr"!128,0,0,0,0,0
dc.w $f118,$e008,s67!xsize67x9btodx02
dc.b "lsr"!128,0,0,0,0,0
dc.w $f118,$e010,s67!xsize67x9btodx02
dc.b "roxr"!128,0,0,0,0
dc.w $f118,$e018,s67!xsize67x9btodx02
dc.b "ror"!128,0,0,0,0,0
dc.w $f118,$e100,s67!xsize67x9btodx02
dc.b "asl"!128,0,0,0,0,0
dc.w $f118,$e108,s67!xsize67x9btodx02
dc.b "lsl"!128,0,0,0,0,0
dc.w $f118,$e110,s67!xsize67x9btodx02
dc.b "roxl"!128,0,0,0,0
dc.w $f118,$e118,s67!xsize67x9btodx02
dc.b "rol"!128,0,0,0,0,0
dc.w $ff00,$0000,s67!xsize67ixtoea
dc.b "ori"!128,0,0,0,0,0
dc.w $ff00,$0200,s67!xsize67ixtoea
dc.b "andi"!128,0,0,0,0
dc.w $ff00,$0400,s67!xsize67ixtoea
dc.b "subi"!128,0,0,0,0
dc.w $ff00,$0600,s67!xsize67ixtoea
dc.b "addi"!128,0,0,0,0
dc.w $ff00,$0a00,s67!xsize67ixtoea
dc.b "eori"!128,0,0,0,0
dc.w $ff00,$0c00,s67!xsize67ixtoea
dc.b "cmpi"!128,0,0,0,0
dc.w $f1c0,$0100,stab!xdxtoea
dc.b "btst"!128,0,0,0,0
dc.w $f1c0,$0140,stab!xdxtoea
dc.b "bchg"!128,0,0,0,0
dc.w $f1c0,$0180,stab!xdxtoea
dc.b "bclr"!128,0,0,0,0
dc.w $f1c0,$01c0,stab!xdxtoea
dc.b "bset"!128,0,0,0,0
dc.w $ff00,$0e00,s67!xmoves ;68010
dc.b "moves"!128,0,0,0
dc.w $ff00,$4000,s67!xsrcea
dc.b "negx"!128,0,0,0,0
dc.w $ff00,$4200,s67!xsrcea
dc.b "clr"!128,0,0,0,0,0
dc.w $ff00,$4400,s67!xsrcea
dc.b "neg"!128,0,0,0,0,0
dc.w $ff00,$4600,s67!xsrcea
dc.b "not"!128,0,0,0,0,0
dc.w $ff00,$4a00,s67!xsrcea
dc.b "tst"!128,0,0,0,0,0
dc.w $c000,$0000,snop!ximove
dc.b "move."!128,0,0,0
dc.w $f000,$a000,stab!xdcwop
dc.b "line-a"!128,0,0
dc.w $f000,$f000,stab!xdcwop
dc.b "line-f"!128,0,0
dc.w $0000,$0000,stab!xdcwop
dc.b "dc.w"!128,0,0,0,0
tab6502:dc.b brk65,1 ;2 byte instruction
dc.b ora65,5
dc.b cop65,1
dc.b ora65,17
dc.b tsb65,3
dc.b ora65,3
dc.b asl65,3
dc.b ora65,14
dc.b php65,0
dc.b ora65,23
dc.b asl65,4
dc.b phd65,0
dc.b tsb65,2
dc.b ora65,2
dc.b asl65,2
dc.b ora65,19
dc.b bpl65,12
dc.b ora65,6
dc.b ora65,16
dc.b ora65,18
dc.b trb65,3
dc.b ora65,7
dc.b asl65,7
dc.b ora65,15
dc.b clc65,0
dc.b ora65,9
dc.b inc65,4
dc.b tcs65,0
dc.b trb65,2
dc.b ora65,8
dc.b asl65,8
dc.b ora65,20
dc.b jsr65,2
dc.b and65,5
dc.b jsl65,19
dc.b and65,17
dc.b bit65,3
dc.b and65,3
dc.b rol65,3
dc.b and65,14
dc.b plp65,0
dc.b and65,23
dc.b rol65,4
dc.b pld65,0
dc.b bit65,2
dc.b and65,2
dc.b rol65,2
dc.b and65,19
dc.b bmi65,12
dc.b and65,6
dc.b and65,16
dc.b and65,18
dc.b bit65,7
dc.b and65,7
dc.b rol65,7
dc.b and65,15
dc.b sec65,0
dc.b and65,9
dc.b dec65,4
dc.b tsc65,0
dc.b bit65,8
dc.b and65,8
dc.b rol65,8
dc.b and65,20
dc.b rti65,0
dc.b eor65,5
dc.b wdm65,1 ;was: dc.b(13)dummy, 1:immediate
dc.b eor65,17
dc.b mvp65,2
dc.b eor65,3
dc.b lsr65,3
dc.b eor65,14
dc.b pha65,0
dc.b eor65,23
dc.b lsr65,4
dc.b phk65,0
dc.b jmp65,2
dc.b eor65,2
dc.b lsr65,2
dc.b eor65,19
dc.b bvc65,12
dc.b eor65,6
dc.b eor65,16
dc.b eor65,18
dc.b mvn65,2
dc.b eor65,7
dc.b lsr65,7
dc.b eor65,15
dc.b cli65,0
dc.b eor65,9
dc.b phy65,0
dc.b tcd65,0
dc.b jmp65,19
dc.b eor65,8
dc.b lsr65,8
dc.b eor65,20
dc.b rts65,0
dc.b adc65,5
dc.b per65,21
dc.b adc65,17
dc.b stz65,3
dc.b adc65,3
dc.b ror65,3
dc.b adc65,14
dc.b pla65,0
dc.b adc65,23
dc.b ror65,4
dc.b rtl65,0
dc.b jmp65,11
dc.b adc65,2
dc.b ror65,2
dc.b adc65,19
dc.b bvs65,12
dc.b adc65,6
dc.b adc65,16
dc.b adc65,18
dc.b stz65,7
dc.b adc65,7
dc.b ror65,7
dc.b adc65,15
dc.b sei65,0
dc.b adc65,9
dc.b ply65,0
dc.b tdc65,0
dc.b jmp65,22
dc.b adc65,8
dc.b ror65,8
dc.b adc65,20
dc.b bra65,12
dc.b sta65,5
dc.b brl65,21
dc.b sta65,17
dc.b sty65,3
dc.b sta65,3
dc.b stx65,3
dc.b sta65,14
dc.b dey65,0
dc.b bit65,23
dc.b txa65,0
dc.b phb65,0
dc.b sty65,2
dc.b sta65,2
dc.b stx65,2
dc.b sta65,19
dc.b bcc65,12
dc.b sta65,6
dc.b sta65,16
dc.b sta65,18
dc.b sty65,7
dc.b sta65,7
dc.b stx65,10
dc.b sta65,15
dc.b tya65,0
dc.b sta65,9
dc.b txs65,0
dc.b txy65,0
dc.b stz65,2
dc.b sta65,8
dc.b stz65,8
dc.b sta65,20
dc.b ldy65,24
dc.b lda65,5
dc.b ldx65,24
dc.b lda65,17
dc.b ldy65,3
dc.b lda65,3
dc.b ldx65,3
dc.b lda65,14
dc.b tay65,0
dc.b lda65,23
dc.b tax65,0
dc.b plb65,0
dc.b ldy65,2
dc.b lda65,2
dc.b ldx65,2
dc.b lda65,19
dc.b bcs65,12
dc.b lda65,6
dc.b lda65,16
dc.b lda65,18
dc.b ldy65,7
dc.b lda65,7
dc.b ldx65,10
dc.b lda65,15
dc.b clv65,0
dc.b lda65,9
dc.b tsx65,0
dc.b tyx65,0
dc.b ldy65,8
dc.b lda65,8
dc.b ldx65,9
dc.b lda65,20
dc.b cpy65,24
dc.b cmp65,5
dc.b rep65,1
dc.b cmp65,17
dc.b cpy65,3
dc.b cmp65,3
dc.b dec65,3
dc.b cmp65,14
dc.b iny65,0
dc.b cmp65,23
dc.b dex65,0
dc.b wai65,0
dc.b cpy65,2
dc.b cmp65,2
dc.b dec65,2
dc.b cmp65,19
dc.b bne65,12
dc.b cmp65,6
dc.b cmp65,16
dc.b cmp65,18
dc.b pei65,16
dc.b cmp65,7
dc.b dec65,7
dc.b cmp65,15
dc.b cld65,0
dc.b cmp65,9
dc.b phx65,0
dc.b stp65,0
dc.b jml65,11
dc.b cmp65,8
dc.b dec65,8
dc.b cmp65,20
dc.b cpx65,24
dc.b sbc65,5
dc.b sep65,1
dc.b sbc65,17
dc.b cpx65,3
dc.b sbc65,3
dc.b inc65,3
dc.b sbc65,14
dc.b inx65,0
dc.b sbc65,23
dc.b nop65,0
dc.b xba65,0
dc.b cpx65,2
dc.b sbc65,2
dc.b inc65,2
dc.b sbc65,19
dc.b beq65,12
dc.b sbc65,6
dc.b sbc65,16
dc.b sbc65,18
dc.b pea65,2
dc.b sbc65,7
dc.b inc65,7
dc.b sbc65,15
dc.b sed65,0
dc.b sbc65,9
dc.b plx65,0
dc.b xce65,0
dc.b jsr65,22
dc.b sbc65,8
dc.b inc65,8
dc.b sbc65,20
dc.b -1
adc65=0
and65=1
asl65=2
bcc65=3
bcs65=4
beq65=5
bit65=6
bmi65=7
bne65=8
bpl65=9
brk65=10
bvc65=11
bvs65=12
clc65=13
cli65=14
cld65=15
clv65=16
cmp65=17
cpx65=18
cpy65=19
dec65=20
dex65=21
dey65=22
eor65=23
inc65=24
inx65=25
iny65=26
jmp65=27
jsr65=28
lsr65=29
lda65=30
ldx65=31
ldy65=32
nop65=33
ora65=34
pha65=35
php65=36
pla65=37
plp65=38
rol65=39
ror65=40
rti65=41
rts65=42
sbc65=43
sec65=44
sed65=45
sei65=46
sta65=47
stx65=48
sty65=49
tax65=50
tay65=51
tsx65=52
txa65=53
txs65=54
tya65=55
wdm65=56
xba65=57
wai65=58
stp65=59
rtl65=60
xce65=61
tyx65=62
txy65=63
tsc65=64
tdc65=65
tcs65=66
tcd65=67
ply65=68
plx65=69
pld65=70
plb65=71
phy65=72
phx65=73
phk65=74
phd65=75
phb65=76
sep65=77
rep65=78
jml65=79
cop65=80
bra65=81
tsb65=82
trb65=83
pea65=84
pei65=85
per65=86
brl65=87
jsl65=88
mvp65=89
mvn65=90
stz65=91
txt6502:dc.b "adc"
dc.b "and"
dc.b "asl"
dc.b "bcc"
dc.b "bcs"
dc.b "beq"
dc.b "bit"
dc.b "bmi"
dc.b "bne"
dc.b "bpl"
dc.b "brk"
dc.b "bvc"
dc.b "bvs"
dc.b "clc"
dc.b "cli"
dc.b "cld"
dc.b "clv"
dc.b "cmp"
dc.b "cpx"
dc.b "cpy"
dc.b "dec"
dc.b "dex"
dc.b "dey"
dc.b "eor"
dc.b "inc"
dc.b "inx"
dc.b "iny"
dc.b "jmp"
dc.b "jsr"
dc.b "lsr"
dc.b "lda"
dc.b "ldx"
dc.b "ldy"
dc.b "nop"
dc.b "ora"
dc.b "pha"
dc.b "php"
dc.b "pla"
dc.b "plp"
dc.b "rol"
dc.b "ror"
dc.b "rti"
dc.b "rts"
dc.b "sbc"
dc.b "sec"
dc.b "sed"
dc.b "sei"
dc.b "sta"
dc.b "stx"
dc.b "sty"
dc.b "tax"
dc.b "tay"
dc.b "tsx"
dc.b "txa"
dc.b "txs"
dc.b "tya"
dc.b "wdm"
dc.b "xba"
dc.b "wai"
dc.b "stp"
dc.b "rtl"
dc.b "xce"
dc.b "tyx"
dc.b "txy"
dc.b "tsc"
dc.b "tdc"
dc.b "tcs"
dc.b "tcd"
dc.b "ply"
dc.b "plx"
dc.b "pld"
dc.b "plb"
dc.b "phy"
dc.b "phx"
dc.b "phk"
dc.b "phd"
dc.b "phb"
dc.b "sep"
dc.b "rep"
dc.b "jml"
dc.b "cop"
dc.b "bra"
dc.b "tsb"
dc.b "trb"
dc.b "pea"
dc.b "pei"
dc.b "per"
dc.b "brl"
dc.b "jsl"
dc.b "mvp"
dc.b "mvn"
dc.b "stz"
dc.b -1
snesadr:dc.w $2100,$2143
dc.w $2180,$2183
dc.w $4016,$4017
dc.w $4200,$421f
dc.w $4300,$430a
dc.w -1
snesreg:dc.b "scrnfade" ;2100
dc.b "oam_size" ;2101
dc.b "oam_addr" ;2102
dc.b "oam_adhi" ;2103
dc.b "oam_data" ;2104
dc.b "vscrnmod" ;2105
dc.b "mozaik " ;2106
dc.b "playf0_a" ;2107
dc.b "playf1_a" ;2108
dc.b "playf2_a" ;2109
dc.b "playf3_a" ;210a
dc.b "tile01_a" ;210b
dc.b "tile23_a" ;210c
dc.b "scrollx0" ;210d
dc.b "scrolly0" ;210e
dc.b "scrollx1" ;210f
dc.b "scrolly1" ;2110
dc.b "scrollx2" ;2111
dc.b "scrolly2" ;2112
dc.b "scrollx3" ;2113
dc.b "scrolly3" ;2114
dc.b "vportcon" ;2115
dc.b "vportadr" ;2116
dc.b "vportadh" ;2117
dc.b "vportdat" ;2118
dc.b "vportdhi" ;2119
dc.b "mod7init" ;211a
dc.b "mod7rega" ;211b
dc.b "mod7regb" ;211c
dc.b "mod7regc" ;211d
dc.b "mod7regd" ;211e
dc.b "mod7regx" ;211f
dc.b "mod7regy" ;2120
dc.b "paletpnt" ;2121
dc.b "paletdat" ;2122
dc.b "wi12mask" ;2123
dc.b "wi34mask" ;2124
dc.b "wind_obj" ;2125
dc.b "wind0pos" ;2126
dc.b "wind1pos" ;2127
dc.b "wind2pos" ;2128
dc.b "wind3pos" ;2129
dc.b "wind1log" ;212a
dc.b "wind2log" ;212b
dc.b "playfflg" ;212c
dc.b "sscrnflg" ;212d
dc.b "winmaskm" ;212e
dc.b "winmasks" ;212f
dc.b "colsinit" ;2130
dc.b "colstval" ;2131
dc.b "colstdat" ;2132
dc.b "ilaceflg" ;2133
dc.b "result_l" ;2134
dc.b "result_m" ;2135
dc.b "result_h" ;2136
dc.b "hv_latch" ;2137
dc.b "oamrddat" ;2138
dc.b "vrrddatl" ;2139
dc.b "vrrddath" ;213a
dc.b "palrddat" ;213b
dc.b "ho_count" ;213c
dc.b "ve_count" ;213d
dc.b "ppusta77" ;213e
dc.b "ppusta78" ;213f
dc.b "audireg0" ;2140
dc.b "audireg1" ;2141
dc.b "audireg2" ;2142
dc.b "audireg3" ;2143
dc.b "wm_data " ;2180
dc.b "wmaddrlo" ;2181
dc.b "wmaddrme" ;2182
dc.b "wmdatahi" ;2183
dc.b "ctr13dat" ;4016
dc.b "ctr24dat" ;4017
dc.b "nmitmflg" ;4200
dc.b "ioprtout" ;4201
dc.b "multican" ;4202
dc.b "multiplr" ;4203
dc.b "dividlow" ;4204
dc.b "divid_hi" ;4205
dc.b "divisor " ;4206
dc.b "hcountlo" ;4207
dc.b "hcounthi" ;4208
dc.b "vcountlo" ;4209
dc.b "vcounthi" ;420a
dc.b "dmaonflg" ;420b
dc.b "hdmaonfl" ;420c
dc.b "memselec" ;420d
dc.b "reserved" ;420e
dc.b "reserved" ;420f
dc.b "nmivblfl" ;4210
dc.b "irg_flag" ;4211
dc.b "hvjoy_on" ;4212
dc.b "ioprtinp" ;4213
dc.b "divquolo" ;4214
dc.b "divquohi" ;4215
dc.b "multprlo" ;4216
dc.b "multprhi" ;4217
dc.b "pad_1_lo" ;4218
dc.b "pad_1_hi" ;4219
dc.b "pad_2_lo" ;421a
dc.b "pad_2_hi" ;421b
dc.b "pad_3_lo" ;421c
dc.b "pad_3_hi" ;421e
dc.b "pad_4_lo" ;421e
dc.b "pad_4_hi" ;421f
dc.b "dma",0,"parm" ;4300...4370
dc.b "dma",0,"dest" ;4301
dc.b "dma",0,"srcl" ;4302
dc.b "dma",0,"srcm" ;4303
dc.b "dma",0,"srch" ;4304
dc.b "dma",0,"sizl" ;4305
dc.b "dma",0,"sizh" ;4306
dc.b "dma",0,"hmmm" ;4307
dc.b "dma",0,"tabl" ;4308
dc.b "dma",0,"tabh" ;4309
dc.b "hdma",0,"lin" ;430a
even
font: ;thanx for the font must go to the terminator/trsi (you rule)
dc.l $00000000,$00000000,$18181818,$18001800,$6c6c0000,$00000000
dc.l $6666ff66,$ff666600,$183e603c,$067c1800,$c3c60c18,$3063c300
dc.l $386c6876,$dccc7600,$18183000,$00000000,$0c183030,$30180c00
dc.l $30180c0c,$0c183000,$00663cff,$3c660000,$0018187e,$18180000
dc.l $00000000,$00181830,$0000007e,$00000000,$00000000,$00181800
dc.l $03060c18,$3060c000,$3c666e7e,$76663c00,$18381818,$18181800
dc.l $3c66060c,$18307e00,$7e060c1c,$06663c00,$1c3c6ccc,$fe0c0c00
dc.l $7e607c06,$06663c00,$0c18307c,$66663c00,$7e06060c,$18181800
dc.l $3c66663c,$66663c00,$3c66663e,$0c183000,$00181800,$00181800
dc.l $00001818,$00181830,$0c183060,$30180c00,$00007e00,$007e0000
dc.l $30180c06,$0c183000,$3c66060c,$18001800,$3e636f6f,$6f603e00
dc.l $3c66667e,$66666600,$7c66667c,$66667c00,$3c666060,$60663c00
dc.l $786c6666,$666c7800,$3e60607c,$60603e00,$3e60607c,$60606000
dc.l $3c66606e,$66663e00,$6666667e,$66666600,$18181818,$18181800
dc.l $06060606,$06663c00,$66666c78,$6c666600,$60606060,$60603e00
dc.l $63777f6b,$63636300,$66767e6e,$66666600,$3c666666,$66663c00
dc.l $7c66667c,$60606000,$3c666666,$666e3c06,$7c66667c,$786c6600
dc.l $3c66603c,$06663c00,$7e181818,$18181800,$66666666,$66663c00
dc.l $66666666,$6c787000,$6363636b,$7f776300,$6363361c,$36636300
dc.l $6666663c,$18181800,$7e060c18,$30607e00,$3c303030,$30303c00
dc.l $c0603018,$0c060300,$3c0c0c0c,$0c0c3c00,$10386cc6,$00000000
dc.l $00000000,$0000fe00,$18180c00,$00000000,$00003c66,$7e666600
dc.l $60607c66,$66667c00,$00003c66,$60663c00,$06063e66,$66663e00
dc.l $00003e60,$7e603e00,$1c303c30,$30303000,$00003e66,$663e063c
dc.l $60606666,$7e666600,$18001818,$18181800,$18001818,$18181870
dc.l $6060666c,$786c6600,$30303030,$30301c00,$00006377,$7f6b6300
dc.l $00006676,$7e6e6600,$00003c66,$66663c00,$00007c66,$667c6060
dc.l $00003e66,$663e0606,$00007c66,$7c6c6600,$00003e60,$3c067c00
dc.l $00007e18,$18181800,$00006666,$66663c00,$00006666,$6c787000
dc.l $0000636b,$6b363600,$00006336,$1c366300,$00006666,$663e063c
dc.l $00007e0c,$18307e00,$0e181870,$18180e00,$18181808,$18181800
dc.l $7018180e,$18187000,$729c0000,$00000000,$cc33cc33,$cc33cc33
dc.l $00000000,$00000000,$18001818,$18181800,$0c3e6c6c,$3e0c0000
dc.l $1c363078,$30307e00,$423c663c,$42000000,$c3663c18,$3c183c00
dc.l $18181800,$18181800,$3c403c66,$3c023c00,$66000000,$00000000
dc.l $7e81bdb1,$bd817e00,$78d8d87c,$00fc0000,$003366cc,$66330000
dc.l $7e060000,$00000000,$00007e7e,$00000000,$7e81bda5,$b9ad817e
dc.l $7e000000,$00000000,$3c663c00,$00000000,$18187e18,$18007e00
dc.l $f0183060,$f8000000,$f0183018,$f0000000,$18300000,$00000000
dc.l $0000c6c6,$c6eefac0,$7ef4f474,$14141400,$00000018,$18000000
dc.l $00000000,$00001830,$30703030,$30000000,$70888870,$00f80000
dc.l $00cc6633,$66cc0000,$40c64c58,$3266cf02,$60e66c78,$3f6bc60f
dc.l $c023662c,$d9336701,$18001830,$60663c00,$30083c66,$7e666600
dc.l $0c103c66,$7e666600,$18243c66,$7e666600,$324c3c66,$7e666600
dc.l $663c6666,$7e666600,$3c663c66,$7e666600,$7fccccff,$cccccf00
dc.l $3c666060,$663c0830,$30083e60,$7c603e00,$0c103e60,$7c603e00
dc.l $18243e60,$7c603e00,$66003e60,$7c603e00,$30081818,$18181800
dc.l $0c101818,$18181800,$18241818,$18181800,$66001818,$18181800
dc.l $786c66f6,$666c7800,$324c767e,$6e666600,$30083c66,$66663c00
dc.l $0c103c66,$66663c00,$18243c66,$66663c00,$324c3c66,$66663c00
dc.l $663c6666,$66663c00,$00006336,$1c366300,$3d666e7e,$7666bc00
dc.l $30086666,$66663c00,$0c106666,$66663c00,$18246666,$66663c00
dc.l $cc00cccc,$cccc7800,$06086666,$3c181800,$60607c66,$667c6060
dc.l $7c66666c,$66666c60,$3008003c,$667e6600,$0c10003c,$667e6600
dc.l $1824003c,$667e6600,$324c003c,$667e6600,$66003c66,$7e666600
dc.l $3c663c3c,$667e6600,$00007fcc,$ffcccf00,$00003c66,$60663c10
dc.l $18041e30,$3e301e00,$0c101e30,$3e301e00,$0c121e30,$3e301e00
dc.l $36001e30,$3e301e00,$30080018,$18181800,$0c100018,$18181800
dc.l $18240018,$18181800,$66000018,$18181800,$307c183c,$66663c00
dc.l $324c0076,$7e6e6600,$3008003c,$66663c00,$0c10003c,$66663c00
dc.l $1824003c,$66663c00,$324c003c,$66663c00,$66003c66,$66663c00
dc.l $0018007e,$00180000,$00013e67,$6b733e40,$30080066,$66663c00
dc.l $0c100066,$66663c00,$18240066,$66663c00,$00660066,$66663c00
dc.l $0c100066,$663e063c,$30303c36,$363c3030,$66006666,$663e063c
constend:dc.l chksum
;;;;;;;;;;;;;;;;;
; variable area ;
;;;;;;;;;;;;;;;;;
even ; yo that's true
keytab: dc.b "`1234567890ß'\",0,"0" ;keycodes increase...
dc.b "qwertzuiopü+",0,"123" ;all this is patched...
dc.b "asdfghjklöä#",0,"456"
dc.b "<yxcvbnm,.-",0,".789"
dc.b " ",8,5,13,13,$1b,9,0,0,0,"-",0,$10,$11,$13,$12
dc.b $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,"[]/*+",6
dc.b "~!",34,"§$%&/()=?`|",0,12 ;$60...
dc.b "QWERTZUIOPÜ*",0,$1a,$16,0
dc.b "ASDFGHJKLÖÄ^",0,0,0,0
dc.b ">YXCVBNM;:_",0,0,$19,$15,0
dc.b " ",7,$14,0,14,0,10,0,0,0,"-",0,1,2,4,3
dc.b 0,0,0,0,0,0,0,0,0,0,"{}/*+",11
even
mousespr:
dc.w $8080,$9200
dc.l $00000000,$00000000,$00000000,$000001c0,$008001c0,$00800140
dc.l $00800140,$00800140,$00800140,$00800140,$00800140,$00800770
dc.l $03e00410,$00800770,$00800140,$000001c0,$00000000,$00000000
scradr: dc.l 0
dskadr: dc.l 0
spradr: dc.l 0
copadr: dc.l 0
;mod
regs: blk.l 16+6+1+1,0 ;regs/usp/isp/msp/vbr/cacr/caar/pc/sr.w
vbreg=regs+[19*4]
sfcdfc: dc.w 0 ;00000xxx00000yyy
fpuregs:blk.l 8*12,0 ;fp0..7:80+16bit
fpcr: dc.l 0 ;\
fpsr: dc.l 0 ; )union
fpiar: dc.l 0 ;/
mmutt0: dc.l 0 ;\
mmutt1: dc.l 0 ; \
mmutc: dc.l 0 ; )union
mmusrp: dc.l 0,0 ; )
mmucrp: dc.l 0,0 ; /
mmusr: dc.w 0 ;/
mmudrp: dc.l 0,0 ;68851 only
bmmmutc:dc.l 0 ;beermon private mmu tc
mmujbuf:dc.l 0 ;private buffer
startusp: dc.l 0 ;prgstart
startisp: dc.l 0 ;prgstart
startmsp: dc.l 0 ;prgstart
startvbr: dc.l 0 ;prgstart
startcacr: dc.l 0 ;prgstart
startcaar: dc.l 0 ;prgstart
startsr: dc.w 0 ;prgstart
startsfcdfc: dc.w 0 ;prgstart
rdff002:dc.w 0 ;prgstart union
rdff010:dc.w 0 ;prgstart "
rdff01c:dc.w 0 ;prgstart "
rdff01e:dc.w 0 ;prgstart "
timeout:dc.w 0 ;prgstart a3000 ramtimeout
lastms: dc.w 0
mousexy:dc.w 0
msxpos: dc.w 0
msypos: dc.w 0
msycnt: dc.l 0
count: dc.w 0 ;vbl timer
smdcnt: dc.w 0
buflen: dc.w 0
lastcmd:dc.l 0 ;1-4 chrs of last command
hililow:dc.l 0 ;lower highlight address \
hiliupp:dc.l 0 ;upper highlight address /
helpadr:dc.l 0 ;current helptext adr
bcdbuf: dc.l 0,0,0 ;fpu reg conversion
excinstr:dc.w 0 ;except info instr
excadr: dc.l 0 ;except info adr
exceptsr:dc.w 0 ;except info sr
exceptpc:dc.l 0 ;except info pc
excnum: dc.b 0 ;0=no exc
cpu: dc.b 0 ;0:68000,1:68010,2:68020,3:68030,4:68040
fpu: dc.b 0 ;0:nofpu,1:68881,2:68882,3:68040
mmu: dc.b 0 ;0:nommu,1:68851,2:68030mmu,3:68040mmu
even
row: dc.b 0 ;\
col: dc.b 0 ;/union
rowback:dc.b 0 ;\ second screen
colback:dc.b 1 ;/union second screen
rows: dc.b 0 ;32:pal,24:ntsc
rowsm1: dc.b 0 ;31:pal,23:ntsc
rowsm2: dc.b 0 ;30:pal,22:ntsc
hilight:dc.b 0 ;0:normal,ff:inverse address
insmode:dc.b 0 ;0:overwrite,ff:insert
outmode:dc.b 0 ;0:table,1:memdump,2:asciidump
imsize: dc.b 0 ;%00.b,%01.w,%10.l,%11.*,%100.x
dissign:dc.b %101 ;bit0:nosign/sign,bit1:hex/dez,bit2:no eaval/eaval
ea2nd: dc.b 0 ;0:1st eavalue,ff:2nd eavalue
rmsflag:dc.b 0 ;right mouse has been pressed
bplflag:dc.b 0 ;0:medres,ff:lores
rolltop:dc.b 0 ;0:roll csdown,ff:roll csup
drvbit: dc.b 0 ;3:df0
trk: dc.b 0 ;trk 0-159 of sel drv
sec: dc.b 0 ;0-10/21
hddrive:dc.b 0 ;0:dd drive,ff:hddrive
truebuf:dc.b 0 ;0:reread mfm
dskerr: dc.b 0 ;25:datachk,21:sec not found
;29:dsk removed,26:timeout
wrflag: dc.b 0 ;0:read,ff:write
wrcmd: dc.b 0 ;blkread/wr cmd
typeflg:dc.b 0 ;0:load,ff:type
catopt: dc.b 0 ;bmi:noopt catalog
ffs: dc.b 0 ;0:OFS,ff:FFS
int: dc.b 0 ;0:AmigaDOS,ff:international filenames
valflag:dc.b 0 ;0:invalid,>0:valid bitmap
pic: dc.b -1 ;0:no pic in dosktrkbuf
abswork:dc.b 0 ;0:memlist,-1:abolute workspace
absbuf: dc.b 0 ;0:memlist,-1:abolute buffer,if any
smdmisc:dc.b 0
smdraw: dc.b 0 ;0:smd data,-1:raw data
fami: dc.b 0 ;0:smd,-1:famicon
accu8: dc.b 0 ;0:16,-1:8 bit accu
idxy8: dc.b 0 ;0:16,-1:8 bit index x,y
autosel:dc.b -1 ;0:normal,-1:automatic 8/16bit
keydel: dc.b 0
repdel: dc.b 0
crsrdel:dc.b 1
nocrsr: dc.b 0
msdel: dc.b 0
prvkey: dc.b 0
ascii: dc.b 0
dontbuf:dc.b 0 ;-1:don't buf characters
shflag: dc.b 0
prtflag:dc.b 0
histlin:dc.b 0 ;history cursor
histcnt:dc.b 0 ;history entry
keybuf: blk.b 40,0
month: dc.b 31,28,31,30,31,30,31,31,30,31,30,31 ;feb gets patched
; 01234567890123456789
even
dc.l "PTCH" ;patch area
dc.b 0,0,0,0 ;reserved
econflg:dc.b 0 ;0:complete cpu,1:economy cpu
modeflg:dc.b 0 ;0:pal,1:pal lace,2:ntsc,3:ntsc lace,4:multiscan
langflg:dc.b %00000000 ;bit0:0:german,1:american
;bit4:0:verify,1:noverify
rateflg:dc.b 1 ;0:fast,1:medium,2:slow
rgb0: dc.w $bbb
rgb1: dc.w $222
fkeybuf:dc.b "l 40000 0 2 s|",0,0,0,0,0,0
dc.b "a 40000|",0,0,0,0,0,0,0,0,0,0,0,0
dc.b "d 40000|",0,0,0,0,0,0,0,0,0,0,0,0
dc.b "L oi 40000|",0,0,0,0,0,0,0,0,0
dc.b "cd:|dir|",0,0,0,0,0,0,0,0,0,0,0,0
blk.b [10-5]*fkeylen,0
even
lginstr:dc.l 0 ;2byte instr:0,4byte instr:2
oplen: dc.w 0 ;0:noop,1.w,2.l,3.wl,4.ll;union!
op68000:dc.w 0,0,0,0,0 ;68000 rawopcode+paras
mask55: dc.l $55555555
maskaa: dc.l $aaaaaaaa
sync: dc.w $4489
readlen:dc.w 0 ;number of mfm words incl. gap
rootkey:dc.l 0 ;key of rootblck #880/1760
lastkey:dc.l 0 ;last standard key
lastkeym1:
dc.l 0 ;last standard key -1
trksec: dc.w 0 ;numsec of track #11/22
trksecm1:
dc.w 0 ;numsec of track -1 #10/21
cylsec: dc.w 0 ;numsec of cyl #22/44
cylsecm1:
dc.w 0 ;numsec of cyl -1 #21/43
bitsec: dc.l 0 ;key of bitmap
fheader:dc.l 0 ;key of fileHEADER
dirkey: dc.l 0 ;key of subdir/root
prevchain:
dc.l 0 ;0:filehd in root,>0:previous chain
roothash:
dc.l 0 ;absadr of filehash in root
linkkey:dc.l 0 ;0:new header into root,>0:insert key
datanum:dc.w 0 ;cnt datablk
datasiz:dc.w 0 ;ofs:488,ffs:512
filesiz:dc.l 0 ;length of file $144(fhd)
dosofs: dc.b "DOS",0 ;bootblock entry OFS
formdos:dc.l 0 ;ofs:$444f5300,ffs:$444f5301
lastchk:dc.l 0 ;datachecksum of last rootblk
secinbuf:
dc.l 0 ;%1:read sec before update
drivcyl:dc.l 0 ;drives:0-3,-1.b:cyl invalid
frzflag:dc.w 0 ;0:normal start,-1:freeze!
bufadr: dc.l 0 ;adr swapmem
himem: dc.l 0 ;max workspc end
defwork:dc.l 0 ;start of screenmem: work1/work2
scrsize:dc.l 0 ;number of bytes per screen
wrksize:dc.l 0 ;number of bytes for workspace
lineend:dc.l 0 ;end of cmdline
basereg:dc.l 0 ;effective address accu
days: dc.l 0 ;\ days since 1.1.1978
mins: dc.l 0 ; > mins of today
ticks: dc.l 0 ;/ ticks of this minute
breakpc:dc.l 0 ;address of interrupted prog
para: blk.l 16,0
intvecs:blk.l $100/4,0
brkpadr:blk.l brkpnum,0 ;pointer to brkpoint
brkpbuf:blk.w brkpnum,$4afc ;old opcode
linebuf:blk.b xchars,0 ;even !
lineeof:dc.b 0
histbuf:blk.b histnum*[xchars-1],0
even
mtchbuf:blk.l mtchnum,0 ;match buffer
txtscr: blk.l xchars*32*2/4,0
txtback:dc.b ">"
blk.b xchars*32*2-1," "
even
rootblk:blk.b 512,0 ;\bootblkbuffer
header: blk.b 512,0 ;/
bitmap: blk.b 512,0
stacksize=$1000 ;magic
stack: blk.b stacksize,0
stackend:
dostrkbuf:blk.b 512*11*2,0 ;hd size,even!
progend: