home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-14 | 306.2 KB | 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:
-