Re: Speed of [register + constant] vs [register] in asm/basm ?
- From: Herbert Kleebauer <klee@xxxxxxxxx>
- Date: Sat, 06 Jan 2007 19:18:02 +0100
Herbert Kleebauer wrote:
I'll post the actual source (I don't remember when I last updated
the ftp server) in a follow up, so we will have at least a few times
in a year some assembly code in this group. Don't be to critical,
this was my first x86 assembler program, written with a not
finished assembler.
; 30.07.93
; 3.08.93 save s3 in big_s3
; 14.09.93 ENTER uebergeht Sprung auf sich selbst
; <shift>+ENTER entfernt Sprung auf sich selbst
; 14.09.93 v86-Mode
; 5.11.93 Tastaturinterruptvector wird jedesmal neu gesetzt
; 11.11.93 Timerinterrupt
; 15.03.94 Debugregister-Unterstuetzung
; 23.03.94
; 21.06.94 color1/color2 in Farbmodus 2 ; findchange
; 23.06.94 num 123, ander Funktion
; 21.10.94 Fehler in opcode c4 c5 0fb2 0fb4 0fb5 (war immer .w)
; 21.02.95 Fehler bei breakpoints
; 28.03.97 dbf.l (war immer dbf.w)
; 14:12.05 Direction flag worde im 320x200 mode nicht gekloescht
NOLIST
@data=0
I486=1 ; 0: fuer 386 >0: fuer 486
V86=0 ; >0 dann auch im V86-Mode funktions-
; faehig. Allerdings darf die Offset-
; adresse des Memorypointers dann
; nicht groesser als 64k sein!
; d.h. Speicher ueber 1MB kann nicht
; angesprochen werden
TIMERINT=0 ; falls <>0 wird bei jedem Timerinter-
; rupt ueberprueft ob als letztes f11
; gedrueckt wurde (manche Spiele ver-
; biegen den Tastaturinterrupt und
; lassen f12 nicht durch
KEYINT=0 ; falls <>0 wird bei jedem Aufruf
; der Interruptvektor fuer die Tastatur
; neu gesetzt; (manche Spiele verbiegen
; diesen Vektor, und lassen nicht mehr
; alle Tastencodes durch)
NO_INTERRUPT=0 ; >0: keine Interrupts wenn aktiv
; noetig, falls Interruptroutinen
; das GS-Segment auf 64k setzen
; >0 nur falls V86=0 !!!
MAXMEM=(512*1024)*1024 ; 16 MByte + 320KByte
LPT=2 ; 0/1/2 Drucker an LPT0,LPT1 oder LPT2
NODIS==0 ; 0: mit Disassembler
CONST_LANG=1 ; feste Programmlaenge
PS=1 ; >0: Postscriptdrucker
SAVE_ONLY_BW=0 ; Bildschirm wird nur im Text-Mode gesaved
DOS_EXTENDER=0 ; falls DOS-Extender verwendet wird
; ist die Ruecksprungadresse vom
; Tastaturinterrupt nicht das unter-
; brochene Programm, sondern der DOS-
; Extender selbst. Die Anpassung muss
; fuer jedes Programm erneut erfolgen!!
FINDCHANGE=0 ; ausserste Vorsicht! Nur Verwenden wenn Speicher
; ueber 1MByte unbenuetzt und V86=0. Geeignete
; Pufferwerte in Programmcode eintragen!
;***************************************************************************
color1=3 ; Hintergrundfarbe fuer Graphikmode 2 + 3
color2=15 ; Vordergrundfarbe fuer Graphikmode 2 + 3
; Graphikmodi:
; 0: 640x480 16 Farben
; 1: 320x200 16 Farben
; 2: 320x200 256 Farben
; 3: wie 2, jedoch liegen die Bytes in den Planes direkt hintereinander
; (bei Mode 2 haben sie eine Abstand von 4) und der logische Bildschirm
; ist 344x200 gross (d.h. eine Luecke von 6 Bytes nach jeder Zeile im
; Bildschirmspeicher)
mod3_off=6
;***************************************************************************
@=$100
IF !V86
bsr.w big_s3
bsr.w a20frei
move.l idtr,idtr_limit
move.l idtr_base,r1
ELSE
eor.l r1,r1
ENDIF
eor.w r0,r0
move.w r0,s3
move.l 9*4(r1){s3},r0
move.l r0,old09a
IF TIMERINT
move.l 8*4(r1){s3},r0
move.l r0,old08
ENDIF
move.w s6,r0
lsl.l #16,r0
move.w #int09,r0
move.l r0,9*4(r1){s3}
IF KEYINT
move.l r0,new09
ENDIF
IF TIMERINT
move.w #int08,r0
move.l r0,8*4(r1){s3}
ENDIF
move.w #int01,r0
move.l r0,new01
LIST
move.l #prog_ende,r1
IF CONST_LANG
cmp.l #$b100,r1
bhs.b _11
move.w #$b100,r1
_11:
ENDIF
NOLIST
addq.l #15,r1
lsr.l #4,r1
move.w #$3100,r0
trap #$21
;***************************************************************************
video_graph: dc.b 0 ; 0: Textmodus 1: Graphikmodus
video_mode: dc.b 0 ; 0-3 verschiedene Graphikmodi
video_gc_a: dc.b 0 ; Graphics Controller
video_gc_d1: dc.b 0
video_gc_d3: dc.b 0
video_gc_d4: dc.b 0
video_gc_d5: dc.b 0
video_gc_d8: dc.b 0
video_sc_a: dc.b 0 ; Sequenze Controller
video_sc_d2: dc.b 0
new09_flag: dc.b 0
saved: dc.b 0
key_p1: dc.b 0
key_p2: dc.b 0
new01: dc.l 0
old01: dc.l 0
old09a: dc.l 0
IF KEYINT
new09: dc.l 0
old09b: dc.l 0
ENDIF
IF TIMERINT
old08: dc.l 0
ENDIF
idtr_limit: dc.w 0
idtr_base: dc.l 0 ; muss hinter idtr_limit stehen
e0_flag: dc.b 0
shift_flag: dc.b 0 ; 7: 0
; 6: CAPS-LOCK
; 5: ALT-Gr
; 4: ALT
; 3: linke CONTROL
; 2: rechte CONTROL
; 1: linke SHIFT
; 0: rechte SHIFT
;***************************************************************************
set_new01:
tst.l #$ffffffff,old01{s6}
bne.b _100
move.l r0,-(sp)
move.l r1,-(sp)
move.w s3,-(sp)
IF !V86
move.l idtr,idtr_limit{s6}
move.l idtr_base{s6},r1
ELSE
eor.l r1,r1
ENDIF
eor.w r0,r0
move.w r0,s3
move.l 1*4(r1){s3},r0
cmp.l r0,new01{s6}
beq.b _10
move.l r0,old01{s6}
move.l new01{s6},r0
move.l r0,1*4(r1){s3}
_10: move.w (sp)+,s3
move.l (sp)+,r1
move.l (sp)+,r0
_100: rts.w
;***************************************************************************
set_old01:
tst.l #$ffffffff,old01{s6}
beq.b _100
move.l r0,-(sp)
move.l r1,-(sp)
move.w s3,-(sp)
IF !V86
move.l idtr,idtr_limit{s6}
move.l idtr_base{s6},r1
ELSE
eor.l r1,r1
ENDIF
eor.w r0,r0
move.w r0,s3
move.l 1*4(r1){s3},r0
cmp.l r0,new01{s6}
bne.b _10
move.l old01{s6},r0
move.l #0,old01{s6}
move.l r0,1*4(r1){s3}
_10: move.w (sp)+,s3
move.l (sp)+,r1
move.l (sp)+,r0
_100: rts.w
;***************************************************************************
IF KEYINT
set_new09:
tst.l #$ffffffff,old09b{s6}
bne.b _100
move.l r0,-(sp)
move.l r1,-(sp)
move.w s3,-(sp)
IF !V86
move.l idtr,idtr_limit{s6}
move.l idtr_base{s6},r1
ELSE
eor.l r1,r1
ENDIF
eor.w r0,r0
move.w r0,s3
move.l 9*4(r1){s3},r0
cmp.l r0,new09{s6}
beq.b _10
move.l r0,old09b{s6}
move.l new09{s6},r0
move.l r0,9*4(r1){s3}
_10: move.w (sp)+,s3
move.l (sp)+,r1
move.l (sp)+,r0
_100: rts.w
;***************************************************************************
set_old09:
tst.l #$ffffffff,old09b{s6}
beq.b _100
move.l r0,-(sp)
move.l r1,-(sp)
move.w s3,-(sp)
IF !V86
move.l idtr,idtr_limit{s6}
move.l idtr_base{s6},r1
ELSE
eor.l r1,r1
ENDIF
eor.w r0,r0
move.w r0,s3
move.l 9*4(r1){s3},r0
cmp.l r0,new09{s6}
bne.b _10
move.l old09b{s6},r0
move.l #0,old09b{s6}
move.l r0,9*4(r1){s3}
_10: move.w (sp)+,s3
move.l (sp)+,r1
move.l (sp)+,r0
_100: rts.w
ENDIF
;***************************************************************************
int01: tst.b #$ff,saved{s6}
beq.b _10
rte.w
_10: tst.b #$ff,s_run{s6}
beq.w _100
move.l r0,_300{s6}
move.w s0,_301{s6}
eor.l r0,r0
move.w (sp)+,r0
move.w (sp)+,s0
move.w s0,-(sp)
move.w r0,-(sp)
tst.b #$ff,stop_trap{s6}
beq.b _20
cmp.b #$cc,(r0) ; trap3
beq.w _50
cmp.b #$ce,(r0) ; trapv
beq.w _50
cmp.b #$cf,(r0) ; rte
beq.w _50
cmp.b #$cd,(r0) ; trap
bne.b _20
tst.b #$ff,stop_trap{s6}
bmi.w _50
cmp.b #$21,1.b(r0)
bne.w _50
cmp.b #$3f,_300+1{s6}
beq.w _200
cmp.b #$42,_300+1{s6}
beq.w _200
br.w _50
_20: tst.b #$ff,stop_io{s6}
beq.b _60
cmp.b #$e4,(r0) ; in
beq.w _50
cmp.b #$e5,(r0) ; in
beq.w _50
cmp.b #$ec,(r0) ; in
beq.w _50
cmp.b #$ed,(r0) ; in
beq.w _50
cmp.b #$e6,(r0) ; out
beq.w _50
cmp.b #$e7,(r0) ; out
beq.w _50
cmp.b #$ed,(r0) ; out
beq.w _50
cmp.b #$ef,(r0) ; out
beq.w _50
_60: cmp.b #4,s_run{s6}
bhs.w _200
cmp.b #1,s_run{s6}
bne.b _70
cmp.b #$0f,(r0) ; bcc.w
bne.b _61
cmp.b #$80,1.b(r0)
blo.b _70
cmp.b #$8f,1.b(r0)
bhi.b _70
br.w _50
_61: cmp.b #$70,(r0) ; bcc.b
blo.b _70
cmp.b #$7f,(r0)
bls.w _50
cmp.b #$e9,(r0) ; br.w br.b jmp.ww
blo.w _70
cmp.b #$eb,(r0)
bls.w _50
cmp.b #$ff,(r0) ; jmp
bne.b _70
move.b 1.b(r0),r0
and.b #$38,r0
cmp.b #$20,r0
beq.b _50
cmp.b #$28,r0
beq.b _50
_70: cmp.b #$c2,(r0) ; rts
beq.w _40
cmp.b #$c3,(r0) ; rts
beq.w _40
cmp.b #$ca,(r0) ; rts
beq.w _40
cmp.b #$cb,(r0) ; rts
beq.w _40
cmp.b #$e8,(r0) ; bsr
beq.w _30
cmp.b #$9a,(r0) ; jsr
beq.w _30
cmp.b #$ff,(r0) ; jsr
bne.b _200
move.b 1.b(r0),r0
and.b #$38,r0
cmp.b #$10,r0
beq.b _30
cmp.b #$18,r0
beq.b _30
_200: move.w s6,-(sp)
move.w (sp)+,s0
bsr.w read_if_ch
bcc.b _50
move.l _300,r0
move.w _301,s0
rte.w
_30: inc.w s_nest{s6}
br.b _41
_40: dec.w s_nest{s6}
bmi.b _50
_41: cmp.b #2,s_run{s6}
bhi.b _200
_50: move.l _300{s6},r0
move.w _301{s6},s0
move.b #0,s_run{s6}
_100: move.w s0,s_s0{s6}
move.w s6,-(sp)
move.w (sp)+,s0
move.w s1,s_s1
move.w s2,s_s2
move.w s3,s_s3
move.w s7,s_s7
move.l r0,s_r0
move.l r1,s_r1
move.l r2,s_r2
move.l r3,s_r3
move.l r4,s_r4
move.l r5,s_r5
move.l r6,s_r6
move.l dr0,r0
move.l r0,s_dr0
move.l dr1,r0
move.l r0,s_dr1
move.l dr2,r0
move.l r0,s_dr2
move.l dr3,r0
move.l r0,s_dr3
move.l dr6,r0
move.l r0,s_dr6
move.l dr7,r0
move.l r0,s_dr7
and.l #$ffffff00,r0
move.l r0,dr7
move.w (sp)+,s_pc
move.w (sp)+,s_s6
move.l sr,-(sp)
move.l (sp)+,s_sr
move.w (sp)+,s_sr
move.l r7,s_r7
move.b #-1,saved
bclr.w #8,s_sr
bsr.w set_old01
move.b #-1,new09_flag
IF KEYINT
bsr.w set_new09
ENDIF
move.w #$3ce,r1 ; Graphics Controller Index Register
in.b r1,r0
move.w r0,-(sp)
move.b #$06,r0 ; Graphics Controller Miscell.
out.b r0,r1 ; auswaehlen
inc.w r1 ; $3cf : Graphics Controller Data Register
in.b r1,r0
tst.b #1,r0 ; Graphikmodus
sne.b video_graph ; falls ja setzen
dec.w r1
move.w (sp)+,r0
out.b r0,r1 ; alter Wert ins Indexregister
IF !NO_INTERRUPT
bset.w #9,sr
ENDIF
move.b #0,shift_flag
bsr.w screen_save
br.w eingabe
_300: dc.l 0
_301: dc.w 0
;***************************************************************************
exit:
bclr.w #9,sr
IF KEYINT
bsr.w set_old09
ENDIF
tst.b #$ff,s_dr7 ; breakpoint in benutzung?
beq.b _1
bsr.w set_new01
_1: move.l s_dr0,r0
move.l r0,dr0
move.l s_dr1,r0
move.l r0,dr1
move.l s_dr2,r0
move.l r0,dr2
move.l s_dr3,r0
move.l r0,dr3
eor.l r0,r0
move.l r0,dr6
move.l s_dr7,r0
move.l r0,dr7
move.l s_r0,r0
move.l s_r1,r1
move.l s_r2,r2
move.l s_r3,r3
move.l s_r4,r4
move.l s_r5,r5
move.l s_r6,r6
move.l s_r7,r7
move.w s_s7,s7
or.b #$01,s_sr+2 ; setze resum-Flag
move.l s_sr,-(sp)
move.w #0,-(sp) ; fuer rte.l
move.w s_s6,-(sp)
move.w #0,-(sp) ; fuer rte.l
move.w s_pc,-(sp)
move.w s_s1,s1
move.w s_s2,s2
move.w s_s3,s3
move.w s_s0,s0
move.b #0,saved{s6}
rte.l ; .l damit auch resum-Flag veraendert wird
;***************************************************************************
IF TIMERINT
int08:
move.w r0,-(sp)
in.b #$60,r0
cmp.b #$57,r0
move.w (sp)+,r0
bne.b _10
tst.b #$ff,_50{s6}
bne.b _20
move.b #1,_50{s6}
move.w r4,-(sp)
move.w r7,r4
or.w #$0100,6.b(r4.w){s7}
move.w (sp)+,r4
IF !V86
bsr.w big_s3
ENDIF
bsr.w set_new01
br.b _20
_10: move.b #0,_50{s6}
_20: jmp.ww (old08{s6})
_50: dc.b 0
ENDIF
int09:
move.w r0,-(sp)
in.b #$60,r0
cmp.b #$58,r0
bne.b _10
move.b #$20,r0 ; Interrupt-Controller
out.b r0,#$20 ; zuruecksetzen
move.w (sp)+,r0
IF !DOS_EXTENDER
move.w r4,-(sp)
move.w r7,r4
or.w #$0100,6.b(r4.w){s7}
move.w (sp)+,r4
ENDIF
IF !V86
bsr.w big_s3
ENDIF
bsr.w set_new01
IF DOS_EXTENDER
br.w int01
ELSE
rte.w
ENDIF
_10: move.w (sp)+,r0
tst.b #$ff,new09_flag{s6}
bne.b int09b
jmp.ww (old09a{s6})
;***************************************************************************
; 256 Byte Tastaturpuffer reservieren
key_buf=data+@data
@data=@data+256
;***************************************************************************
int09b: movem.l r0-r7,-(sp)
move.w s0,-(sp)
move.w s6,r0
move.w r0,s0
move.b #$ad,r0 ; Keyboard disable
bsr.w _out_key
in.b #$60,r0 ; Zeichen lesen
tst.b #$ff,e0_flag
bmi.w _10
bne.w _20
cmp.b #$e0,r0
bne.b _30
move.b #$ff,e0_flag
br.w _100
_30: cmp.b #$e1,r0
bne.b _40
move.b #$01,e0_flag
br.w _100
_40: cmp.b #$9d,r0
bne.b _40a
and.b #$f7,shift_flag
br.b _100
_40a: cmp.b #$aa,r0
bne.b _40b
and.b #$fd,shift_flag
br.b _100
_40b: cmp.b #$b6,r0
bne.b _40c
and.b #$fe,shift_flag
br.b _100
_40c: cmp.b #$b8,r0
bne.b _40d
and.b #$ef,shift_flag
br.b _100
_40d: cmp.b #$58,r0
bhi.b _100
cmp.b #$1d,r0
bne.b _41a
or.b #$08,shift_flag
br.b _100
_41a: cmp.b #$2a,r0
bne.b _41b
or.b #$02,shift_flag
br.b _100
_41b: cmp.b #$36,r0
bne.b _41c
or.b #$01,shift_flag
br.b _100
_41c: cmp.b #$38,r0
bne.b _41d
or.b #$10,shift_flag
br.b _100
_41d: cmp.b #$3a,r0
bne.b _41e
eor.b #$40,shift_flag
br.b _100
_41e:
_90: movu.bl key_p2,r1
move.b r0,key_buf(r1)
inc.b r1
cmp.b r1,key_p1
bne.b _91
dec.b r1
_91: move.b r1,key_p2
_100: move.b #$ae,r0 ; Keyboard enable
bsr.w _out_key
move.b #$20,r0 ; Interrupt-Controller
out.b r0,#$20 ; zuruecksetzen
move.w (sp)+,s0
movem.l (sp)+,r0-r7
rte.w
_10: move.b #0,e0_flag
cmp.b #$1c,r0
bne.b _10a
move.b #$59,r0
br.b _90
_10a: cmp.b #$1d,r0
bne.b _10b
or.b #$08,shift_flag
br.b _100
_10b: cmp.b #$9d,r0
bne.b _10c
and.b #$f7,shift_flag
br.b _100
_10c: cmp.b #$35,r0
bne.b _10d
move.b #$5a,r0
br.b _90
_10d: cmp.b #$37,r0
bne.b _10e
move.b #$54,r0
br.b _90
_10e: cmp.b #$38,r0
bne.b _10f
or.b #$20,shift_flag
br.b _100
_10f: cmp.b #$b8,r0
bne.b _10g
and.b #$df,shift_flag
br.b _100
_10g: cmp.b #$46,r0
blo.b _100
cmp.b #$53,r0
bhi.b _100
add.b #$15,r0
br.b _90
_20: inc.b e0_flag
cmp.b #$c5,r0
bne.w _21
move.b #$5b,r0
move.b #0,e0_flag
br.w _90
_21: cmp.b #6,e0_flag
blo.b _100
move.b #0,e0_flag
br.w _100
_out_key:
move.w r2,-(sp)
move.w r1,-(sp)
move.w r0,-(sp)
move.w #100,r1
_o30: in.b #$64,r0 ; Status 8042 lesen
tst.b #$02,r0 ; bereit fuer neues Kommando
beq.b _o10 ; ja
move.w #100,r2
_o20: dbf.w r2,_o20 ; etwas warten
dec.w r1 ; schon oft genug probiert
bne.b _o30 ; nein, dann nochmals probieren
_o10: move.w (sp)+,r0
out.b r0,#$64 ; an 8042 Command-Port ausgeben
move.w (sp)+,r1
move.w (sp)+,r2
rts.w
;***************************************************************************
IF !V86
big_s3: move.w sr,-(sp) ; sr sichern
move.l r0,-(sp)
move.l r1,-(sp)
move.w s3,-(sp)
bclr.w #9,sr ; Interrupt sperren
; und hoffen dass kein NMI kommt
eor.l r0,r0 ; r0 loeschen
move.w s6,r0 ; Code-Segment Register -> r0
lsl.l #4,r0 ; * 16
add.l #gdt,r0 ; plus Offset gdt
move.l r0,new_gdt_ptr+2{s6} ; in Pointer auf gdt eintragen
move.l gdtr,old_gdt_ptr{s6} ; alten gdtr-Inhalt merken
move.l new_gdt_ptr{s6},gdtr ; gdtr laden
move.l cr0,r0 ; Contoll-Register 0 -> r0
move.l r0,r1 ; in r1 merken
or.b #1,r0 ; PE-Bit setzen
move.l r0,cr0 ; Protected Mode umschalten
br.b _10 ; flush prefetch queue
_10: move.w #$8,r0 ; Datensegmentselector -> r0
move.w r0,s3 ; nach s3 (GS)
move.l r1,cr0 ; Real Mode zurueckschalten
br.b _20 ; flush prefetch queue
_20: move.l old_gdt_ptr{s6},gdtr; gdtr mit altem Wert laden
move.w (sp)+,s3
move.l (sp)+,r1
move.l (sp)+,r0
move.w (sp)+,sr ; Interrupt freigeben
rts.w
old_gdt_ptr:
dc.w 0
dc.l 0
new_gdt_ptr:
dc.w 16 ; 2 Eintraege = 16 Bytes
dc.l 0 ; Adresse noch unbekannt
gdt: ; 0. Segment: Null-Segment (dummy)
dc.l 0,0
; 1. Segment: Datensegment (Code-Segment unnoetig)
dc.w $ffff ; segment limit lo = $ffff
dc.w 0 ; segment base lo = 0
dc.b 0 ; segment base mid = 0
dc.b $92 ; acces rights = r/w expand up data segment
dc.b $8f ; page granular, segment limit hi = $f
dc.b 0 ; base hi=0
;***************************************************************************
a20frei:
; Hinweis: Einlesen des 8042 Ausgangsports mittels des Befehls $d0,
; setzen des Bits 1 und anschliessendes zurueckschreiben mit
; $d1 funktioniert nicht. Problem liegt wohl bei Bit 4, das
; beim Lesen 0 ist, aber offensichtlich als 1 zurueckgeschrieben
; werden muss, da sonst die Tastatur keine Interrupts mehr
; ausloest (warum?). Deshalb wird zum Oeffnen des A20-Gates der
; Ausgangsport des 8042, unabhaengig von seinem alten Wert, mit
; $df (aus Literatur, wieso?) beschrieben.
move.l r0,-(sp)
move.w sr,-(sp)
bclr.w #9,sr ; Interrupt sperren
; und hoffen dass kein NMI kommt
_10: in.b #$64,r0 ; Status Tastaturprozessor lesen
tst.b #2,r0 ; bereit fuer neuen Befehl?
bne.b _10 ; wenn nein, warten
move.b #$d1,r0 ; Code fuer Output-Port schreiben
out.b r0,#$64 ; Code an Tastaturprozessor
_20: in.b #$64,r0 ; Status Tastaturprozessor lesen
tst.b #2,r0 ; bereit fuer neuen Befehl?
bne.b _20 ; wenn nein, warten
; move.b #$dd,r0 ; A20-Leitung sperren
move.b #$df,r0 ; A20-Leitung freigeben
out.b r0,#$60 ; an Tastaturprozessor
_30: in.b #$64,r0 ; Status Tastaturprozessor lesen
tst.b #2,r0 ; bereit fuer neuen Befehl?
bne.b _30 ; wenn nein, warten
move.w (sp)+,sr ; Interrupt freigeben
move.l (sp)+,r0
rts.w
;***************************************************************************
ENDIF
read_ch:
; Eingabe: keine
; Ausgabe: r0.b Scan-Code
IF NO_INTERRUPT
move.w sr,-(sp)
bset.w #9,sr
ENDIF
move.l r1,-(sp)
_10: movu.bl key_p1,r1
cmp.b key_p2,r1
beq.b _10
inc.b key_p1
move.b key_buf(r1),r0
move.l (sp)+,r1
IF NO_INTERRUPT
move.w (sp)+,sr
bsr.w big_s3
ENDIF
rts.w
read_if_ch:
; Eingabe: keine
; Ausgabe: c-flag = 0 fall Zeichen vorhanden, dann:
; r0.b : Scan Code
IF NO_INTERRUPT
move.w sr,-(sp)
bset.w #9,sr
ENDIF
move.l r1,-(sp)
movu.bl key_p1,r1
cmp.b key_p2,r1
bset.w #0,sr
beq.b _10
inc.b key_p1
move.b key_buf(r1),r0
bclr.w #0,sr
_10: move.l (sp)+,r1
IF NO_INTERRUPT
move.w (sp)+,sr
bsr.w big_s3
ENDIF
rts.w
;***************************************************************************
video_save:
move.w r0,-(sp)
move.w r1,-(sp)
move.w sr,-(sp)
bclr.w #9,sr
move.w #$3ce,r1 ; graphics controller
in.b r1,r0
move.b r0,video_gc_a
move.b #1,r0
out.b r0,r1
inc.w r1
in.b r1,r0
move.b r0,video_gc_d1
dec.w r1
move.b #3,r0
out.b r0,r1
inc.w r1
in.b r1,r0
move.b r0,video_gc_d3
dec.w r1
move.b #4,r0
out.b r0,r1
inc.w r1
in.b r1,r0
move.b r0,video_gc_d4
dec.w r1
move.b #5,r0
out.b r0,r1
inc.w r1
in.b r1,r0
move.b r0,video_gc_d5
dec.w r1
move.b #8,r0
out.b r0,r1
inc.w r1
in.b r1,r0
move.b r0,video_gc_d8
move.w #$3c4,r1 ; sequenz controller
in.b r1,r0
move.b r0,video_sc_a
move.b #2,r0
out.b r0,r1
inc.w r1
in.b r1,r0
move.b r0,video_sc_d2
move.w (sp)+,sr
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
;***************************************************************************
video_set:
move.w r0,-(sp)
move.w r1,-(sp)
move.w sr,-(sp)
bclr.w #9,sr
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0f02,r0 ; Register 2 (Write Plane Mask) = f
out.w r0,r1
move.w #$3ce,r1 ; Graphics Controller Index Register
move.w #$0005,r0 ; Register 5 (Mode) = 0 (Write Mode 0)
out.w r0,r1 ; low byte wird zuerst geschrieben
move.b #$03,r0 ; Register 3 (Data Rotate) = 0
; (keine logische Verknuepfung)
out.w r0,r1 ; low byte wird zuerst geschrieben
move.b #$01,r0 ; Register 1 (Enable Bit Set/Reset) = 0
out.w r0,r1 ; low byte wird zuerst geschrieben
move.w #$ff08,r0 ; Register 8 (Bit Mask) = $ff
out.w r0,r1 ; low byte wird zuerst geschrieben
move.w (sp)+,sr
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
;***************************************************************************
video_restore:
move.w r0,-(sp)
move.w r1,-(sp)
move.w sr,-(sp)
bclr.w #9,sr
move.w #$3ce,r1 ; graphics controller
move.b #1,r0
move.b video_gc_d1,m0
out.w r0,r1
move.b #3,r0
move.b video_gc_d3,m0
out.w r0,r1
move.b #4,r0
move.b video_gc_d4,m0
out.w r0,r1
move.b #5,r0
move.b video_gc_d5,m0
out.w r0,r1
move.b #8,r0
move.b video_gc_d8,m0
out.w r0,r1
move.b video_gc_a,r0
out.b r0,r1
move.w #$3c4,r1 ; sequenz controller
move.b #2,r0
move.b video_sc_d2,m0
out.w r0,r1
move.b video_sc_a,r0
out.b r0,r1
move.w (sp)+,sr
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
;***************************************************************************
; 8 Zeilen Textpuffer reservieren
text_buf=data+@data
@data=@data+80*8
; 20 kByte Bildschirmpuffer reservieren
screen_buf=data+@data
; @data=data+80*8*2 ; falls nur Text-Mode
@data=@data+80*8*8*4
;***************************************************************************
screen_save:
;rettet den Inhalt eines 80 x 8 Bildschirmbereichs
tst.b #$ff,video_graph
IF SAVE_ONLY_BW
bne.b _00
ELSE
bne.b _graph
ENDIF
move.l r5,-(sp)
move.l r6,-(sp)
move.w s1,-(sp)
move.w s2,-(sp)
move.w s0,r5
move.w r5,s1
move.w #$b800,r5
move.w r5,s2
eor.l r5,r5
move.l #screen_buf,r6
move.l #40*8,r2
bclr.w #10,sr
rep_r2 move.l (r5.l)+-{s2},(r6.l)+-{s1}
move.w (sp)+,s2
move.w (sp)+,s1
move.l (sp)+,r6
move.l (sp)+,r5
_00: rts.w
IF ! SAVE_ONLY_BW
_graph:
bsr.w video_save
bsr.w video_set
movem.l r0-r7,-(sp)
move.w s1,-(sp)
move.w s2,-(sp)
move.w s0,r0
move.w r0,s1
move.w #$a000,r0
move.w r0,s2
move.w #$3ce,r1 ; Graphics Controller Index Register
move.l #screen_buf,r6
cmp.b #2,video_mode
bhs.b _mode2
move.l #80*8*8/4,r3
bclr.w #10,sr
move.w #$0004,r0 ; Register 4 (Read Plane Select) = 0
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r5,r5
rep_r2 move.l (r5.l)+-{s2},(r6.l)+-{s1}
move.w #$0104,r0 ; Register 4 (Read Plane Select) = 1
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r5,r5
rep_r2 move.l (r5.l)+-{s2},(r6.l)+-{s1}
move.w #$0204,r0 ; Register 4 (Read Plane Select) = 2
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r5,r5
rep_r2 move.l (r5.l)+-{s2},(r6.l)+-{s1}
move.w #$0304,r0 ; Register 4 (Read Plane Select) = 3
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r5,r5
rep_r2 move.l (r5.l)+-{s2},(r6.l)+-{s1}
br.w _100
_mode2: cmp.b #3,video_mode
bhs.b _mode3
move.l #80*8*8,r3
bclr.w #10,sr
move.w #$0004,r0 ; Register 4 (Read Plane Select) = 0
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r5,r5
_51: move.b (r5.l)+-{s2},(r6.l)+-{s1}
addq.l #3,r5
dbf.w r2,_51
move.w #$0104,r0 ; Register 4 (Read Plane Select) = 1
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
move.l #1,r5
_52: move.b (r5.l)+-{s2},(r6.l)+-{s1}
addq.l #3,r5
dbf.w r2,_52
move.w #$0204,r0 ; Register 4 (Read Plane Select) = 2
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
move.l #2,r5
_53: move.b (r5.l)+-{s2},(r6.l)+-{s1}
addq.l #3,r5
dbf.w r2,_53
move.w #$0304,r0 ; Register 4 (Read Plane Select) = 3
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
move.l #3,r5
_54: move.b (r5.l)+-{s2},(r6.l)+-{s1}
addq.l #3,r5
dbf.w r2,_54
br.b _100
_mode3: cmp.b #4,video_mode
bhs.b _mode4
bclr.w #10,sr
move.w #$0004,r0 ; Register 4 (Read Plane Select) = 0
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
move.w #$0104,r0 ; Register 4 (Read Plane Select) = 1
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
move.w #$0204,r0 ; Register 4 (Read Plane Select) = 2
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
move.w #$0304,r0 ; Register 4 (Read Plane Select) = 3
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
br.b _100
_m3a: move.w #8*8,r3
eor.l r5,r5
_m3b: move.l #320/4/4,r2
rep_r2 move.l (r5.l)+-{s2},(r6.l)+-{s1}
addq.l #mod3_off,r5
dec.w r3
bne.b _m3b
rts.w
_mode4:
_100: move.w (sp)+,s2
move.w (sp)+,s1
movem.l (sp)+,r0-r7
br.w video_restore
ENDIF
;***************************************************************************
screen_restore:
;restauriert den Inhalt eines 80 x 8 Bildschirmbereichs
tst.b #$ff,video_graph
IF SAVE_ONLY_BW
bne.b _00
ELSE
bne.b _graph
ENDIF
move.l r5,-(sp)
move.l r6,-(sp)
move.w s1,-(sp)
move.w #$b800,r5
move.w r5,s1
eor.l r6,r6
move.l #screen_buf,r5
move.l #40*8,r2
bclr.w #10,sr
rep_r2 move.l (r5.l)+-,(r6.l)+-{s1}
move.w (sp)+,s1
move.l (sp)+,r6
move.l (sp)+,r5
_00: rts.w
IF ! SAVE_ONLY_BW
_graph: bsr.w video_set
movem.l r0-r7,-(sp)
move.w s1,-(sp)
move.w #$a000,r0
move.w r0,s1
move.l #screen_buf,r5
move.w #$3c4,r1 ; Sequencer Index Register
cmp.b #2,video_mode
bhs.b _mode2
move.l #80*8*8/4,r3
bclr.w #10,sr
move.w #$0102,r0 ; Register 2 (Write Plane Mask) = 1
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r6,r6
rep_r2 move.l (r5.l)+-,(r6.l)+-{s1}
move.w #$0202,r0 ; Register 2 (Write Plane Mask) = 2
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r6,r6
rep_r2 move.l (r5.l)+-,(r6.l)+-{s1}
move.w #$0402,r0 ; Register 2 (Write Plane Mask) = 4
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r6,r6
rep_r2 move.l (r5.l)+-,(r6.l)+-{s1}
move.w #$0802,r0 ; Register 2 (Write Plane Mask) = 8
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r6,r6
rep_r2 move.l (r5.l)+-,(r6.l)+-{s1}
br.w _100
_mode2: cmp.b #3,video_mode
bhs.b _mode3
move.l #80*8*8,r3
bclr.w #10,sr
move.w #$0102,r0 ; Register 2 (Write Plane Mask) = 1
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
eor.l r6,r6
_51: move.b (r5.l)+-,(r6.l)+-{s1}
addq.l #3,r6
dbf.w r2,_51
move.w #$0202,r0 ; Register 2 (Write Plane Mask) = 2
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
move.l #1,r6
_52: move.b (r5.l)+-,(r6.l)+-{s1}
addq.l #3,r6
dbf.w r2,_52
move.w #$0402,r0 ; Register 2 (Write Plane Mask) = 4
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
move.l #2,r6
_53: move.b (r5.l)+-,(r6.l)+-{s1}
addq.l #3,r6
dbf.w r2,_53
move.w #$0802,r0 ; Register 2 (Write Plane Mask) = 8
out.w r0,r1 ; low byte wird zuerst geschrieben
move.l r3,r2
move.l #3,r6
_54: move.b (r5.l)+-,(r6.l)+-{s1}
addq.l #3,r6
dbf.w r2,_54
br.b _100
_mode3: cmp.b #4,video_mode
bhs.b _mode4
bclr.w #10,sr
move.w #$0102,r0 ; Register 2 (Write Plane Mask) = 1
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
move.w #$0202,r0 ; Register 2 (Write Plane Mask) = 2
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
move.w #$0402,r0 ; Register 2 (Write Plane Mask) = 4
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
move.w #$0802,r0 ; Register 2 (Write Plane Mask) = 8
out.w r0,r1 ; low byte wird zuerst geschrieben
bsr.w _m3a
br.b _100
_m3a: move.w #8*8,r3
eor.l r6,r6
_m3b: move.l #320/4/4,r2
rep_r2 move.l (r5.l)+-,(r6.l)+-{s1}
addq.l #mod3_off,r6
dec.w r3
bne.b _m3b
rts.w
br.b _100
_mode4:
_100: move.w (sp)+,s1
movem.l (sp)+,r0-r7
br.w video_restore
ENDIF
;***************************************************************************
IF LPT==0 ; LPT0
LPT_DAT =$3bc
LPT_STAT=$3bd
LPT_COMM=$3be
ENDIF
IF LPT==1 ; LPT1
LPT_DAT =$378
LPT_STAT=$379
LPT_COMM=$37a
ENDIF
IF LPT==2 ; LPT2
LPT_DAT =$278
LPT_STAT=$279
LPT_COMM=$27a
ENDIF
print_ch:
; gibt Zeichen in r0.b (>=$20 <=$7f) an Drucker aus
; Eingabe: r0.b : auszugebendes Zeichen
; Ausgabe: keine
; veraenderte Register: keine
movem.l r0-r7,-(sp)
cmp.b #$20,r0
blo.b _10
cmp.b #$7f,r0
bls.b pb1
_10: move.b #$20,r0
br.b pb1
print_b:
; gibt Zeichen in r0.b an Drucker aus
; Eingabe: r0.b : auszugebendes Zeichen
; Ausgabe: keine
; veraenderte Register: keine
movem.l r0-r7,-(sp)
pb1: move.b r0,m0
move.l #1000000,r2
move.w #LPT_STAT,r1
_10: in.b r1,r0
tst.b #$80,r0
dbne.l r2,_10
beq.b _100
move.b m0,r0
move.w #LPT_DAT,r1
out.b r0,r1
move.w #LPT_COMM,r1
in.b r1,r0
move.b r0,m0
move.b #$0f,r0
out.b r0,r1
move.w #10,r2
_11: dbf.w r2,_11
move.b #$0e,r0
out.b r0,r1
move.l #1000000,r2
move.w #LPT_STAT,r1
_20: in.b r1,r0
tst.b #$80,r0
dbne.l r2,_20
bne.b _30
move.b #0,s_print
_30: move.b #$ff,r0
move.w #LPT_DAT,r1
out.b r0,r1
move.b m0,r0
move.w #LPT_COMM,r1
out.b r0,r1
movem.l (sp)+,r0-r7
rts.w
_100: move.b #0,s_print
movem.l (sp)+,r0-r7
rts.w
print_string:
; gibt String (mit 0 abgeschlossen) an Drucker aus
; Eingabe: r1.l{s0} : Zeiger auf String
; Ausgabe: keine
; veraenderte Register: keine
move.w r0,-(sp)
move.l r1,-(sp)
_20: move.b (r1),r0
inc.w r1
tst.b r0,r0
beq.b _10
bsr.w print_b
br.b _20
_50: dc.b ' '
_10: move.l (sp)+,r1
move.w (sp)+,r0
rts.w
;***************************************************************************
disp_xoff:dc.w 0 ; xoffset bei 40 Zeichen/Zeile
;***************************************************************************
disp_screen:
movem.l r0-r7,-(sp)
move.w s1,-(sp)
move.w #text_buf,r5
eor.w r6,r6
tst.b #$ff,video_graph
bne.b _graph
move.w #$b800,r0
move.w r0,s1
move.w #80*8,r2
move.b #3,m0
_10: move.b (r5.w),r0
inc.w r5
move.w r0,(r6.w){s1}
inc.w r6
inc.w r6
dbf.w r2,_10
br.b _110
_100: bsr.w video_restore
_110: move.w (sp)+,s1
movem.l (sp)+,r0-r7
rts.w
_graph: move.w #$a000,r0
move.w r0,s1
bsr.w video_set
cmp.b #0,video_mode
beq.b _mode0
cmp.b #1,video_mode
beq.b _mode1
cmp.b #2,video_mode
beq.w _mode2
cmp.b #3,video_mode
beq.w _mode3
br.w _100
_mode0:
move.w #8,r4
_21: move.w #80,r2
_20: move.b (r5.w),r3
inc.w r5
and.w #$007f,r3
lsl.w #3,r3
add.w #ascii,r3
move.b (r3.w),r0
move.b r0,(r6.w){s1}
move.b 1.b(r3.w),r0
move.b r0,1*80(r6.w){s1}
move.b 2.b(r3.w),r0
move.b r0,2*80(r6.w){s1}
move.b 3.b(r3.w),r0
move.b r0,3*80(r6.w){s1}
move.b 4.b(r3.w),r0
move.b r0,4*80(r6.w){s1}
move.b 5.b(r3.w),r0
move.b r0,5*80(r6.w){s1}
move.b 6.b(r3.w),r0
move.b r0,6*80(r6.w){s1}
move.b 7.b(r3.w),r0
move.b r0,7*80(r6.w){s1}
inc.w r6
dbf.w r2,_20
add.w #80*7,r6
dec.w r4
bne.b _21
br.w _100
_mode1: add.w disp_xoff,r5
move.w #8,r4
_31: move.w #40,r2
_30: move.b (r5.w),r3
inc.w r5
and.w #$007f,r3
lsl.w #3,r3
add.w #ascii,r3
move.b (r3.w),r0
move.b r0,(r6.w){s1}
move.b 1.b(r3.w),r0
move.b r0,1*40(r6.w){s1}
move.b 2.b(r3.w),r0
move.b r0,2*40(r6.w){s1}
move.b 3.b(r3.w),r0
move.b r0,3*40(r6.w){s1}
move.b 4.b(r3.w),r0
move.b r0,4*40(r6.w){s1}
move.b 5.b(r3.w),r0
move.b r0,5*40(r6.w){s1}
move.b 6.b(r3.w),r0
move.b r0,6*40(r6.w){s1}
move.b 7.b(r3.w),r0
move.b r0,7*40(r6.w){s1}
inc.w r6
dbf.w r2,_30
add.w #40,r5
add.w #40*7,r6
dec.w r4
bne.b _31
br.w _100
_mode2: add.w disp_xoff,r5
move.b #1,r2
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0102,r0
out.w r0,r1 ; write plane mask = 1
bsr.w _200
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0202,r0
out.w r0,r1 ; write plane mask = 2
bsr.w _200
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0402,r0
out.w r0,r1 ; write plane mask = 4
bsr.w _200
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0802,r0
out.w r0,r1 ; write plane mask = 8
bsr.w _200
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0f02,r0
out.w r0,r1 ; write plane mask = f
br.w _100
_200: move.w r5,-(sp)
move.w r6,-(sp)
move.w #8,r4
_201: move.w #40,r1
_202: move.b (r5.w),r3
addq.w #1,r5
and.w #$007f,r3
lsl.w #3,r3
add.w #ascii,r3
move.b #8,m0
move.w r6,-(sp)
_203: move.b (r3.w),r0
inc.w r3
rocl.b r2,r0
if color1==0 && color2==255
scs.b (r6.w){s1}
rocl.b #4,r0
scs.b 4.b(r6.w){s1}
else
bcc.b _210
move.b #color1,(r6.w){s1}
br.b _211
_210: move.b #color2,(r6.w){s1}
_211: rocl.b #4,r0
bcc.b _212
move.b #color1,4.b(r6.w){s1}
br.b _213
_212: move.b #color2,4.b(r6.w){s1}
_213:
endif
add.w #320,r6
dec.b m0
bne.b _203
move.w (sp)+,r6
addq.w #8,r6
dec.w r1
bne.w _202
add.w #40,r5
add.w #320*7,r6
dec.w r4
bne.w _201
move.w (sp)+,r6
inc.w r6
move.w (sp)+,r5
inc.w r2
rts.w
_mode3:
add.w disp_xoff,r5
move.b #1,r2
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0102,r0
out.w r0,r1 ; write plane mask = 1
bsr.w _300
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0202,r0
out.w r0,r1 ; write plane mask = 2
bsr.w _300
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0402,r0
out.w r0,r1 ; write plane mask = 4
bsr.w _300
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0802,r0
out.w r0,r1 ; write plane mask = 8
bsr.w _300
move.w #$3c4,r1 ; Sequencer Index Register
move.w #$0f02,r0
out.w r0,r1 ; write plane mask = f
br.w _100
_300: move.w r5,-(sp)
move.w r6,-(sp)
move.w #8,r4
_301: move.w #40,r1
_302:
move.b (r5.w),r3
addq.w #1,r5
and.w #$007f,r3
lsl.w #3,r3
add.w #ascii,r3
move.b #8,m0
move.w r6,-(sp)
_320: move.b (r3.w),r0
rocl.b r2,r0
if color1==0 && color2==255
scs.b (r6.w){s1}
rocl.b #4,r0
scs.b 1.b(r6.w){s1}
else
bcc.b _310
move.b #color1,(r6.w){s1}
br.b _311
_310: move.b #color2,(r6.w){s1}
_311: rocl.b #4,r0
bcc.b _312
move.b #color1,1.b(r6.w){s1}
br.b _313
_312: move.b #color2,1.b(r6.w){s1}
_313:
endif
inc.w r3
add.w #80+mod3_off,r6
dec.b m0
bne.b _320
move.w (sp)+,r6
addq.w #2,r6
dec.w r1
bne.w _302
add.w #40,r5
add.w #(80+mod3_off)*7+mod3_off,r6
dec.w r4
bne.w _301
move.w (sp)+,r6
move.w (sp)+,r5
inc.w r2
rts.w
;***************************************************************************
disp_byte:
; gibt byte r0.b hexadez. an (r6.w) aus und erhoeht r6.w
; Eingabe: r0.b : auszugebendes Byte
; Ausgabe: keine
; veraenderte Register: r6.w
move.w r0,-(sp)
move.w r1,-(sp)
move.b r0,r1
lsr.b #4,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _10
add.b #'a'-'0'-10,r0
_10: move.b r0,(r6.w)
inc.w r6
move.b r1,r0
and.b #$0f,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _20
add.b #'a'-'0'-10,r0
_20: move.b r0,(r6.w)
inc.w r6
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
disp_word:
; gibt byte r0.w hexadez. an (r6.w) aus und erhoeht r6.w
; Eingabe: r0.w : auszugebendes Wort
; Ausgabe: keine
; veraenderte Register: r6.w
rol.w #8,r0
bsr.w disp_byte
rol.w #8,r0
bsr.w disp_byte
rts.w
disp_long:
; gibt byte r0.l hexadez. an (r6.w) aus und erhoeht r6.w
; Eingabe: r0.l : auszugebendes Langwort
; Ausgabe: keine
; veraenderte Register: r6.w
rol.l #8,r0
bsr.w disp_byte
rol.l #8,r0
bsr.w disp_byte
rol.l #8,r0
bsr.w disp_byte
rol.l #8,r0
bsr.w disp_byte
rts.w
disp_long0:
; gibt r0.l hexadez. ohne fuehrende Nullen an (r6.w) aus
; und erhoeht r6.w
; Eingabe: r0.l : auszugebendes Langwort
; Ausgabe: keine
; veraenderte Register: r6.w
move.l r0,-(sp)
move.l r1,-(sp)
move.w r2,-(sp)
move.l r0,r1
move.w #8,r2
_10: eor.l r0,r0
dsl.l #4,r0<r1
bne.b _50
rol.l #4,r1
dbf.w r2,_10
br.b _100
_70: eor.l r0,r0
dsl.l #4,r0<r1
_50: add.b #'0',r0
cmp.b #'9',r0
bls.b _60
add.b #'a'-'0'-10,r0
_60: move.b r0,(r6.w)
inc.w r6
rol.l #4,r1
dbf.w r2,_70
_100: move.w (sp)+,r2
move.l (sp)+,r1
move.l (sp)+,r0
rts.w
;***************************************************************************
s_r0: dc.l 0
s_r1: dc.l 0
s_r2: dc.l 0
s_r3: dc.l 0
s_r4: dc.l 0
s_r5: dc.l 0
s_r6: dc.l 0
s_r7: dc.l 0
s_sr: dc.l 0
s_pc: dc.l 0
s_s0: dc.w 0
s_s1: dc.w 0
s_s2: dc.w 0
s_s3: dc.w 0
s_s6: dc.w 0
s_s7: dc.w 0
s_dr0: dc.l 0
s_dr1: dc.l 0
s_dr2: dc.l 0
s_dr3: dc.l 0
s_dr6: dc.l 0
s_dr7: dc.l 0
s_mem_a: dc.l 0
s_mem_s: dc.w 0
s_f1: dc.w 0,0,0
s_f2: dc.w 0,0,0
s_f3: dc.w 0,0,0
s_f4: dc.w 0,0,0
s_f5: dc.w 0,0,0
s_f6: dc.w 0,0,0
s_f7: dc.w 0,0,0
s_f8: dc.w 0,0,0
s_f9: dc.w 0,0,0
s_f10: dc.w 0,0,0
s_temp: dc.l 0
s_typ: dc.b 1
s_32: dc.b 0
s_run: dc.b 0
s_nest: dc.w 0
s_lineoff: dc.b 0,0,0,0,0,0,0,0
s_print: dc.b 0
stop_trap: dc.b 0
stop_io: dc.b 0
;***************************************************************************
disp_typ1:
; Zeile 0: Stack 1: r0-r7 2: pc,flags,s0-s7
; 3: leer 4-6: disass 7: Eingabe
movem.l r0-r7,-(sp)
move.w s1,-(sp)
move.w s3,-(sp)
move.w #text_buf,r6
move.l #'.ps(',(r6.w)
addq.w #4,r6
move.l #':)w',(r6.w)
addq.w #3,r6
eor.l r1,r1
move.w s_r7,r1
move.w s_s7,s1
move.w #14,r2
_10: cmp.w #$ffff,r1
beq.b _11
move.w (r1){s1},r0
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_word
addq.w #2,r1
bcs.b _11
dbf.w r2,_10
_11: move.w #text_buf+80,r2
sub.w r6,r2
bls.b _12
move.b #' ',(r6.w)
inc.w r6
dbf.w r2,_11
_12:
move.l #':0r',(r6.w)
addq.l #3,r6
move.l #s_r0,r1
move.w #4,r2
_20: move.l (r1),r0
addq.l #4,r1
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_long
dbf.w r2,_20
move.b #' ',(r6.w)
inc.w r6
move.l #':4r ',(r6.w)
addq.w #4,r6
move.w #4,r2
_21: move.l (r1),r0
addq.l #4,r1
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_long
dbf.w r2,_21
move.l #' :cp',(r6.w)
addq.w #4,r6
move.l s_pc,r0
bsr.w disp_long
move.b #'0',r3
move.l #s_s0,r1
move.w #6,r2
_30: move.l #'s ',(r6.w)
addq.w #3,r6
move.b r3,(r6.w)
inc.w r6
move.b #':',(r6.w)
inc.w r6
inc.b r3
cmp.b #'4',r3
bne.b _31
inc.b r3
inc.b r3
_31: move.w (r1),r0
addq.l #2,r1
bsr.w disp_word
dbf.w r2,_30
move.w #' ',(r6.w)
addq.w #2,r6
move.l #' :rs',(r6.w)
addq.w #4,r6
move.l s_sr,r0
bsr.w disp_long
move.w s_s6,s3
move.l s_pc,r5
move.w #4,r2
_40: bsr.w disass
move.w #80,r0
_41: tst.b #$ff,(r6.w)
beq.b _42
inc.w r6
dec.w r0
bne.b _41
br.b _43
_42: move.b #' ',(r6.w)
inc.w r6
dec.w r0
bne.b _42
_43: dbf.w r2,_40
move.w s_mem_s,r0
bsr.w disp_word
move.b #':',(r6.w)
inc.w r6
move.l s_mem_a,r0
bsr.w disp_long
move.b #'>',(r6.w)
inc.w r6
move.l s_temp,r0
bsr.w disp_long0
move.w #text_buf+8*80,r2
sub.w r6,r2
bls.b _45
_44: move.b #' ',(r6.w)
inc.w r6
dbf.w r2,_44
_45: tst.b #$ff,stop_trap
beq.b _46
move.b #'T',-2.b(r6.w)
bmi.b _46
move.b #'t',-2.b(r6.w)
_46: tst.b #$ff,stop_io
beq.b _47
move.b #'I',-1.b(r6.w)
_47:
move.w (sp)+,s3
move.w (sp)+,s1
movem.l (sp)+,r0-r7
rts.w
;***************************************************************************
disp_typ2:
; je Zeile 16 Bytes
movem.l r0-r7,-(sp)
move.w s3,-(sp)
move.l s_mem_a,r3
move.w s_mem_s,s3
move.w #text_buf,r6
move.w #8,r1
_10: move.w s3,r0
bsr.w disp_word
move.b #':',(r6.w)
inc.w r6
move.l r3,r0
bsr.w disp_long
move.b #' ',(r6.w)
inc.w r6
move.w #16,r2
_20: move.b (r3){s3},r0
inc.l r3
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_byte
dbf.w r2,_20
move.w #' ',(r6.w)
addq.w #2,r6
move.l #16,r2
sub.l r2,r3
_30: move.b (r3){s3},r0
inc.l r3
move.b r0,(r6.w)
inc.w r6
dbf.w r2,_30
dec.w r1
bne.w _10
move.w (sp)+,s3
movem.l (sp)+,r0-r7
rts.w
;***************************************************************************
disp_typ3:
; je Zeile 64 Bytes
movem.l r0-r7,-(sp)
move.w s3,-(sp)
move.w #text_buf,r6
move.w #8,r1
move.l s_mem_a,r3
move.w s_mem_s,s3
_10: move.w s3,r0
bsr.w disp_word
move.b #':',(r6.w)
inc.w r6
move.l r3,r0
bsr.w disp_long
move.b #' ',(r6.w)
inc.w r6
move.w #64,r2
_30: move.b (r3){s3},r0
inc.l r3
move.b r0,(r6.w)
inc.w r6
dbf.w r2,_30
move.w #' ',(r6.w)
addq.w #2,r6
dec.w r1
bne.w _10
move.w (sp)+,s3
movem.l (sp)+,r0-r7
rts.w
;***************************************************************************
disp_typ4:
; 8 Zeile Disassembliert
movem.l r0-r7,-(sp)
move.w s3,-(sp)
move.w #text_buf,r6
move.b s_32,r0
move.b r0,def32
move.w s_mem_s,s3
move.l s_mem_a,r5
move.l r5,r1
move.l #s_lineoff,r4
move.w #8,r2
_40: bsr.w disass
move.l r5,r3
sub.l r1,r3
move.b r3,(r4)
inc.l r4
move.w #80,r0
_41: tst.b #$ff,(r6.w)
beq.b _42
inc.w r6
dec.w r0
bne.b _41
br.b _43
_42: move.b #' ',(r6.w)
inc.w r6
dec.w r0
bne.b _42
_43: dbf.w r2,_40
move.b #0,def32
move.w (sp)+,s3
movem.l (sp)+,r0-r7
rts.w
;***************************************************************************
disp_typ5:
; Zeile 0: r0-r7 1: pc,flags,s0-s7
; 2: cr0-cr3 3: tr3-tr7
; 4: dr0-dr7 5: idtr,gdtr,ldtr,tr
; 6: frei 7: Eingabe
movem.l r0-r7,-(sp)
move.w #text_buf,r6
move.l #'0r',(r6.w)
addq.w #3,r6
move.l #s_r0,r1
move.w #4,r2
_20: move.l (r1),r0
addq.l #4,r1
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_long
dbf.w r2,_20
move.b #' ',(r6.w)
inc.w r6
move.l #':4r ',(r6.w)
addq.w #4,r6
move.w #4,r2
_21: move.l (r1),r0
addq.l #4,r1
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_long
dbf.w r2,_21
move.l #' :cp',(r6.w)
addq.w #4,r6
move.l s_pc,r0
bsr.w disp_long
move.b #'0',r3
move.l #s_s0,r1
move.w #6,r2
_30: move.l #'s ',(r6.w)
addq.w #3,r6
move.b r3,(r6.w)
inc.w r6
move.b #':',(r6.w)
inc.w r6
inc.b r3
cmp.b #'4',r3
bne.b _31
inc.b r3
inc.b r3
_31: move.w (r1),r0
addq.l #2,r1
bsr.w disp_word
dbf.w r2,_30
move.w #' ',(r6.w)
addq.w #2,r6
move.l #' :rs',(r6.w)
addq.w #4,r6
move.l s_sr,r0
bsr.w disp_long
move.l #':0rc',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF !V86
move.l cr0,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #4,r6
move.l #':1rc',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
move.l #' ',(r6.w)
addq.w #4,r6
move.l #':2rc',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF !V86
move.l cr2,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #4,r6
move.l #':3rc',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF !V86
move.l cr3,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',r0
move.l r0,(r6.w)
move.l r0,4.b(r6.w)
move.l r0,8.b(r6.w)
move.l r0,12.b(r6.w)
addq.w #16,r6
move.l #':3rt',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF I486 && !V86
move.l tr3,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #4,r6
move.l #':4rt',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF I486 && !V86
move.l tr4,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #4,r6
move.l #':5rt',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF I486 && !V86
move.l tr5,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #4,r6
move.l #':6rt',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF !V86
move.l tr6,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #3,r6
move.l #':7rt',(r6.w)
addq.w #4,r6
move.b #' ',(r6.w)
inc.w r6
IF !V86
move.l tr7,r0
bsr.w disp_long
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #':0rd',(r6.w)
addq.w #4,r6
move.l #s_dr0,r1
move.w #4,r2
_50: move.l (r1),r0
addq.l #4,r1
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_long
dbf.w r2,_50
move.w #' ',(r6.w)
addq.w #2,r6
move.l #':6rd',(r6.w)
addq.w #4,r6
move.w #2,r2
_51: move.l (r1),r0
addq.l #4,r1
move.b #' ',(r6.w)
inc.w r6
bsr.w disp_long
dbf.w r2,_51
move.l #' ',r0
move.l r0,(r6.w)
move.l r0,4.b(r6.w)
move.l r0,8.b(r6.w)
move.l r0,12.b(r6.w)
addq.w #16,r6
move.l idtr,_200
move.l #'rtdi',(r6.w)
addq.w #4,r6
move.w #' :',(r6.w)
addq.w #2,r6
move.l _200+2,r0
bsr.w disp_long
move.w #'( ',(r6.w)
addq.w #2,r6
move.w _200,r0
bsr.w disp_word
move.l #' )',(r6.w)
addq.w #4,r6
move.l gdtr,_200
move.l #'rtdg',(r6.w)
addq.w #4,r6
move.w #' :',(r6.w)
addq.w #2,r6
move.l _200+2,r0
bsr.w disp_long
move.w #'( ',(r6.w)
addq.w #2,r6
move.w _200,r0
bsr.w disp_word
move.l #' )',(r6.w)
addq.w #4,r6
move.l #'rtdl',(r6.w)
addq.w #4,r6
move.w #' :',(r6.w)
addq.w #2,r6
IF 0 ; nur im protected mode
move.w ldtr,r0
bsr.w disp_word
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',(r6.w)
addq.w #4,r6
move.l #' :rt',(r6.w)
addq.w #4,r6
IF 0 ; nur im protected mode
move.w tr,r0
bsr.w disp_word
ELSE
move.l #'----',(r6.w)
addq.w #4,r6
ENDIF
move.l #' ',r0
move.w #23,r2
_60: move.l r0,(r6.w)
addq.w #4,r6
dbf.w r2,_60
subq.w #2,r6
move.w s_mem_s,r0
bsr.w disp_word
move.b #':',(r6.w)
inc.w r6
move.l s_mem_a,r0
bsr.w disp_long
move.b #'>',(r6.w)
inc.w r6
_44: move.w #text_buf+8*80,r2
sub.w r6,r2
bls.b _100
move.b #' ',(r6.w)
inc.w r6
dbf.w r2,_44
_100: movem.l (sp)+,r0-r7
rts.w
_200: dc.l 0,0
;***************************************************************************
disp_typ6:
; je Zeile 40 Bytes
; fuer Texte im Graphikmode mit 40 Zeichen/Zeile
movem.l r0-r7,-(sp)
move.w s3,-(sp)
move.w #text_buf,r6
move.w #8,r1
move.l s_mem_a,r3
move.w s_mem_s,s3
_10: move.w #40,r2
_30: move.b (r3){s3},r0
inc.l r3
move.b r0,(r6.w)
move.b #' ',40.b(r6.w)
inc.w r6
dbf.w r2,_30
addq.w #40,r6
dec.w r1
bne.w _10
move.w (sp)+,s3
movem.l (sp)+,r0-r7
rts.w
;***************************************************************************
find_count: dc.w 6
find_buf: blk.b 22,0
disp_find:
movem.l r0-r7,-(sp)
move.w s3,-(sp)
move.l #text_buf,r6
move.l #' ',r0
move.w #80*8/4,r2
_10: move.l r0,(r6)
addq.l #4,r6
dbf.w r2,_10
move.l #text_buf,r6
move.w find_count,r2
inc.w r2
lsr.w #1,r2
beq.b _100
move.l #find_buf,r1
_20: move.b (r1),r0
inc.l r1
move.b r0,2*80(r6)
bsr.w disp_byte
move.b #' ',r0
move.b r0,(r6)
inc.l r6
dbf.w r2,_20
move.w s6,r0
move.w r0,s3
move.l #find_buf,r5
move.l #text_buf+3*80,r6
bsr.w disass
dec.l r6
_30: inc.l r6
tst.b #$ff,(r6)
bne.b _30
move.b #' ',(r6)
move.l #find_buf,r5
move.l #text_buf+4*80,r6
move.b #1,def32
bsr.w disass
move.b #0,def32
dec.l r6
_40: inc.l r6
tst.b #$ff,(r6)
bne.b _40
move.b #' ',(r6)
_100: move.w (sp)+,s3
movem.l (sp)+,r0-r7
rts.w
;***************************************************************************
find: eor.l r0,r0
move.w s_mem_s,r0
lsl.l #4,r0
add.l s_mem_a,r0
move.l #$a0000-512-1,r2
cmp.l r2,r0
blo.b _50
cmp.l #$100000,r0
blo.b _100
move.l #MAXMEM-512-1,r2
cmp.l r2,r0
bhs.b _100
_50: sub.l r0,r2
move.w s_mem_s,s3
move.l s_mem_a,r3
inc.l r3
move.l r3,r4
move.w find_count,r1
inc.w r1
lsr.w #1,r1
beq.b _100
_60: eor.w r6,r6
move.l r4,r3
_61: move.b (r3){s3},r0
inc.l r3
cmp.b r0,find_buf(r6.w)
bne.b _62
inc.w r6
cmp.w r1,r6
bhs.b _90
br.b _61
_62: inc.l r4
IF V86
cmp.w #$f000,r4
blo.b _63
sub.w #$8000,r4
move.w s3,r0
add.w #$0800,r0
move.w r0,s3
_63:
ENDIF
dbf.l r2,_60
_90: move.l r4,s_mem_a
If V86
move.w s3,s_mem_s
ENDIF
_100: rts.w
find_text:
_textlang=20
_min_blanks=2
_max_blanks=10
cmp.b #6,s_typ
beq.b _10
move.b #3,s_typ
_10: eor.l r0,r0
move.w s_mem_s,r0
lsl.l #4,r0
add.l s_mem_a,r0
move.l #$a0000-2*512,r2
cmp.l r2,r0
blo.b _50
IF V86
br.b _100
ELSE
cmp.l #$100000,r0
blo.w _100
move.l #MAXMEM-2*512,r2
cmp.l r2,r0
bhs.b _100
ENDIF
_50: sub.l r0,r2
move.w s_mem_s,s3
move.l s_mem_a,r3
add.l #512,r3
_60: move.w #_textlang,r1
eor.w r4,r4
_61: move.b (r3){s3},r0
inc.l r3
IF V86
cmp.w #$f000,r3
blo.b _63
sub.w #$8000,r3
move.w s3,r0
add.w #$0800,r0
move.w r0,s3
_63:
ENDIF
dec.l r2
beq.b _90
or.b r0,r0
bne.b _85
cmp.w #_textlang,r1
beq.b _60
br.b _70
_85: cmp.b #$20,r0
blo.b _60
bne.b _80
inc.w r4
_80: cmp.b #$7f,r0
bhi.b _60
_70: dec.w r1
bne.b _61
cmp.w #_min_blanks,r4
blo.b _76
cmp.w #_max_blanks,r4
bls.b _75
_76: sub.l #_textlang-1,r3
add.l #_textlang-1,r2
br.b _60
_75: sub.l #_textlang,r3
_90: move.l r3,s_mem_a
If V86
move.w s3,s_mem_s
ENDIF
_100: rts.w
;***************************************************************************
eingabe:
ein1:
cmp.l #0,s_mem_a
bge.b _10
IF !V86
move.l #0,s_mem_a
ELSE
_2: sub.w #$0800,s_mem_s
bcs.b _1
add.l #$00008000,s_mem_a
bpl.b _10
br.b _2
_1: move.w s_mem_s,r0
add.w #$0800,r0
move.w #0,s_mem_s
lsl.w #4,r0
add.l r0,s_mem_a
bpl.b _10
move.l #0,s_mem_a
ENDIF
_10:
IF V86
cmp.l #$f000,s_mem_a
bls.b _20
cmp.w #$f800,s_mem_s
bhs.b _11
add.w #$0800,s_mem_s
sub.l #$8000,s_mem_a
cmp.l #$f000,s_mem_a
bls.b _20
_11: eor.l r0,r0
move.w s_mem_s,r0
lsl.l #4,r0
add.l s_mem_a,r0
cmp.l #$00100000-8*64,r0
bls.b _12
move.l #$00100000-8*64,r0
_12: move.l r0,r1
lsr.l #4,r0
move.w r0,s_mem_s
andq.l #$0f,r1
move.l r1,s_mem_a
_20:
ENDIF
move.b s_typ,r0
dec.b r0
bne.b _01
bsr.w disp_typ1
br.b _100
_01: dec.b r0
bne.b _02
bsr.w disp_typ2
br.b _100
_02: dec.b r0
bne.b _03
bsr.w disp_typ3
br.b _100
_03: dec.b r0
bne.b _04
bsr.w disp_typ4
br.b _100
_04: dec.b r0
bne.b _05
bsr.w disp_typ5
br.b _100
_05: dec.b r0
bne.b _06
bsr.w disp_typ6
br.b _100
_06:
_100: bsr.w disp_screen
ein2: bsr.w read_ch
eor.l r1,r1
move.b r0,r1
lsl.b #1,r1
jmp.w (t_tab(r1))
t_tab: dc.w t_00
dc.w t_01 ; ESC
dc.w t_02 ; 1
dc.w t_03 ; 2
dc.w t_04 ; 3
dc.w t_05 ; 4
dc.w t_06 ; 5
dc.w t_07 ; 6
dc.w t_08 ; 7
dc.w t_09 ; 8
dc.w t_0a ; 9
dc.w t_0b ; 0
dc.w t_0c ; ss
dc.w t_0d ; '
dc.w t_0e ; BACKSPACE
dc.w t_0f ; TAB
dc.w t_10 ; q
dc.w t_11 ; w
dc.w t_12 ; e
dc.w t_13 ; r
dc.w t_14 ; t
dc.w t_15 ; z
dc.w t_16 ; u
dc.w t_17 ; i
dc.w t_18 ; o
dc.w t_19 ; p
dc.w t_1a ; ue
dc.w t_1b ; +
dc.w t_1c ; RETURN
dc.w t_1d
dc.w t_1e ; a
dc.w t_1f ; s
dc.w t_20 ; d
dc.w t_21 ; f
dc.w t_22 ; g
dc.w t_23 ; h
dc.w t_24 ; j
dc.w t_25 ; k
dc.w t_26 ; l
dc.w t_27 ; oe
dc.w t_28 ; ae
dc.w t_29 ; ^
dc.w t_2a
dc.w t_2b ; #
dc.w t_2c ; y
dc.w t_2d ; x
dc.w t_2e ; c
dc.w t_2f ; v
dc.w t_30 ; b
dc.w t_31 ; n
dc.w t_32 ; m
dc.w t_33 ; ,
dc.w t_34 ; .
dc.w t_35 ; -
dc.w t_36
dc.w t_37 ; * (num)
dc.w t_38
dc.w t_39 ; SPACE
dc.w t_3a
dc.w t_3b ; F1
dc.w t_3c ; F2
dc.w t_3d ; F3
dc.w t_3e ; F4
dc.w t_3f ; F5
dc.w t_40 ; F6
dc.w t_41 ; F7
dc.w t_42 ; F8
dc.w t_43 ; F9
dc.w t_44 ; F10
dc.w t_45 ; NUM
dc.w t_46 ; ROLLEN
dc.w t_47 ; 7 (num)
dc.w t_48 ; 8 (num)
dc.w t_49 ; 9 (num)
dc.w t_4a ; - (num)
dc.w t_4b ; 4 (num)
dc.w t_4c ; 5 (num)
dc.w t_4d ; 6 (num)
dc.w t_4e ; + (num)
dc.w t_4f ; 1 (num)
dc.w t_50 ; 2 (num)
dc.w t_51 ; 3 (num)
dc.w t_52 ; 0 (num)
dc.w t_53 ; , (num)
dc.w t_54 ; DRUCK
dc.w t_55
dc.w t_56 ; <
dc.w t_57 ; F11
dc.w t_58 ; F12
dc.w t_59 ; ENTER
dc.w t_5a ; div (num)
dc.w t_5b ; PAUSE
dc.w t_5c ; POS1
dc.w t_5d ; CURSOR oben
dc.w t_5e ; BILD oben
dc.w t_5f
dc.w t_60 ; CURSOR links
dc.w t_61
dc.w t_62 ; CURSOR rechts
dc.w t_63
dc.w t_64 ; ENDE
dc.w t_65 ; CURSOR unten
dc.w t_66 ; BILD unten
dc.w t_67 ; EINFUEGEN
dc.w t_68 ; ENTFERNEN
dc.w t_69
dc.w t_6a
dc.w t_6b
dc.w t_6c
dc.w t_6d
dc.w t_6e
dc.w t_6f
dc.w t_70
dc.w t_71
dc.w t_72
dc.w t_73
dc.w t_74
dc.w t_75
dc.w t_76
dc.w t_77
dc.w t_78
dc.w t_79
dc.w t_7a
dc.w t_7b
dc.w t_7c
dc.w t_7d
dc.w t_7e
dc.w t_7f
t_01:
bsr.w screen_restore
move.b #0,new09_flag
br.w exit
t_67: move.b #1,s_typ
br.w ein1
t_5c: move.b #2,s_typ
br.w ein1
t_5e: move.b #3,s_typ
br.w ein1
t_68: move.b #4,s_typ
move.b #0,s_32
tst.b #$03,shift_flag
beq.w ein1
move.b #-1,s_32
br.w ein1
t_64: move.b #5,s_typ
br.w ein1
t_66: move.b #6,s_typ
br.w ein1
t_02:
t_03:
t_04:
t_05:
t_06:
t_07:
t_08:
t_09:
t_0a:
dec.b r0
t_z: lsl.l #4,s_temp
add.b r0,s_temp
bsr.w disp_typ1
bsr.w disp_screen
br.w ein2
t_0b: eor.b r0,r0
br.b t_z
t_1e: move.b #$0a,r0
br.b t_z
t_30: move.b #$0b,r0
br.b t_z
t_2e: move.b #$0c,r0
br.b t_z
t_20: move.b #$0d,r0
br.b t_z
t_12: move.b #$0e,r0
br.b t_z
t_21: move.b #$0f,r0
br.b t_z
t_0e: lsr.l #4,s_temp
beq.w ein1
bsr.w disp_typ1
bsr.w disp_screen
br.w ein2
t_1c:
move.w s_mem_s,s3
move.l s_mem_a,r1
move.l s_temp,r0
move.l #0,s_temp
tst.b #$03,shift_flag ; shift
bne.b _10
tst.b #$0c,shift_flag ; control
bne.b _20
tst.b #$10,shift_flag ; alternate
bne.b _30
move.l r0,s_mem_a
br.w ein1
_10: move.b r0,(r1){s3}
br.w ein1
_20: move.w r0,(r1){s3}
br.w ein1
_30: move.l r0,(r1){s3}
br.w ein1
t_2b: tst.w #$ffff,s_temp+2
bne.w ein2
move.w s_temp,r0
move.w r0,s_mem_s
move.w #0,s_temp
br.w ein1
t_14: bsr.w find_text
br.w ein1
t_1f: tst.b #$03,shift_flag
bne.b _20
bsr.w find
br.w ein1
_20: bsr.w disp_find
bsr.w disp_screen
_10: bsr.w read_ch
cmp.b #$02,r0
blo.b _10
cmp.b #$0a,r0
bhi.b _30
dec.b r0
_40: move.w find_count,r6
lsr.w #1,r6
bcs.b _41
lsl.b #4,r0
move.b r0,find_buf(r6.w)
br.b _42
_41: or.b r0,find_buf(r6.w)
_42: cmp.w #20,r6
bhs.b _20
inc.w find_count
br.b _20
_30: cmp.b #$0b,r0 ; 0
bne.b _31
eor.b r0,r0
br.b _40
_31: cmp.b #$1e,r0 ; a
bne.b _32
move.b #$0a,r0
br.b _40
_32: cmp.b #$30,r0 ; b
bne.b _33
move.b #$0b,r0
br.b _40
_33: cmp.b #$2e,r0 ; c
bne.b _34
move.b #$0c,r0
br.b _40
_34: cmp.b #$20,r0 ; d
bne.b _35
move.b #$0d,r0
br.b _40
_35: cmp.b #$12,r0 ; e
bne.b _36
move.b #$0e,r0
br.b _40
_36: cmp.b #$21,r0 ; f
bne.b _37
move.b #$0f,r0
br.b _40
_37: cmp.b #$0e,r0 ; Backspace
bne.b _38
and.w #$fffe,find_count
subq.w #2,find_count
bpl.b _20
move.w #0,find_count
br.w _20
_38: cmp.b #$1c,r0 ; Return
beq.w ein1
cmp.b #$59,r0 ; Enter
beq.w ein1
br.w _10
t_22:
IF !V86
bsr.w a20frei
ENDIF
br.w ein1
t_45: bsr.w screen_restore
add.b #1,video_mode
cmp.b #3,video_mode
bls.w _10
move.b #0,video_mode
_10:bsr.w screen_save
br.w ein1
t_5a: move.w #0,disp_xoff
br.w ein1
t_37: move.w #20,disp_xoff
br.w ein1
t_4a: move.w #40,disp_xoff
br.w ein1
t_3b: move.l #s_f1,r1
move.l #s_s1,r2
move.l #s_r1,r3
br.w t_fx
t_3c: move.l #s_f2,r1
move.l #s_s2,r2
move.l #s_r2,r3
br.w t_fx
t_3d: move.l #s_f3,r1
move.l #s_s3,r2
move.l #s_r3,r3
br.w t_fx
t_3e: move.l #s_f4,r1
move.l #s_mem_s,r2
move.l #s_r4,r3
br.b t_fx
t_3f: move.l #s_f5,r1
move.l #s_mem_s,r2
move.l #s_r5,r3
br.b t_fx
t_40: move.l #s_f6,r1
move.l #s_s6,r2
move.l #s_r6,r3
br.b t_fx
t_41: move.l #s_f7,r1
move.l #s_s7,r2
move.l #s_r7,r3
br.b t_fx
t_42: move.l #s_f8,r1
move.l #s_mem_s,r2
move.l #s_mem_a,r3
br.b t_fx
t_43: move.l #s_f9,r1
move.l #s_mem_s,r2
move.l #s_pc,r3
br.b t_fx
t_44: move.l #s_f10,r1
move.l #s_s0,r2
move.l #s_r0,r3
; br.b t_fx
t_fx: tst.b #$03,shift_flag ; shift
bne.b _10
tst.b #$0c,shift_flag ; control
bne.b _20
tst.b #$10,shift_flag ; alternate
bne.b _30
tst.b #$20,shift_flag ; alt-gr
bne.b _40
move.l (r1),r0
move.l r0,s_mem_a
move.w 4.b(r1),r0
move.w r0,s_mem_s
br.w ein1
_10:move.l s_mem_a,r0
move.l r0,(r1)
move.w s_mem_s,r0
move.w r0,4.b(r1)
br.w ein2
_20:move.w (r2),r0
move.w r0,s_mem_s
br.w ein1
_30:cmp.b #$42,r0
beq.b _31
cmp.b #$43,r0
bne.b _32
move.w s_s6,r0
move.w r0,s_mem_s
_32:movu.wl (r3),r0
move.l r0,s_mem_a
br.w ein1
_31:move.w s6,s_mem_s
move.l #s_r0,s_mem_a
br.w ein1
_40:cmp.b #$43,r0
bne.b _41
move.w s_s6,r0
move.w r0,s_mem_s
_41:move.l (r3),r0
move.l r0,s_mem_a
br.w ein1
t_4b: dec.l s_mem_a
br.w ein1
t_4c: cmp.b #2,s_typ
bhi.b _10
subq.l #16,s_mem_a
br.w ein1
_10:cmp.b #3,s_typ
bne.b _20
subq.l #64,s_mem_a
br.w ein1
_20:cmp.b #4,s_typ
bne.w _30
subq.l #4,s_mem_a
br.w ein1
_30:cmp.b #6,s_typ
bne.w ein2
subq.l #40,s_mem_a
br.w ein1
t_4d: cmp.b #2,s_typ
bhi.b _10
subq.l #4*16,s_mem_a
br.w ein1
_10:cmp.b #3,s_typ
bne.b _20
sub.l #4*64,s_mem_a
br.w ein1
_20:cmp.b #4,s_typ
bne.w _30
subq.l #4*4,s_mem_a
br.w ein1
_30:cmp.b #6,s_typ
bne.w ein2
sub.l #4*40,s_mem_a
br.w ein1
t_47: inc.l s_mem_a
br.w ein1
t_48: cmp.b #2,s_typ
bhi.b _10
addq.l #16,s_mem_a
br.w ein1
_10:cmp.b #3,s_typ
bne.b _20
addq.l #64,s_mem_a
br.w ein1
_20:cmp.b #4,s_typ
bne.w _30
movu.bl s_lineoff,r0
add.l r0,s_mem_a
br.w ein1
_30:cmp.b #6,s_typ
bne.w ein2
addq.l #40,s_mem_a
br.w ein1
t_49: cmp.b #2,s_typ
bhi.b _10
addq.l #4*16,s_mem_a
br.w ein1
_10:cmp.b #3,s_typ
bne.b _20
add.l #4*64,s_mem_a
br.w ein1
_20:cmp.b #4,s_typ
bne.w _30
movu.bl s_lineoff+3,r0
add.l r0,s_mem_a
br.w ein1
_30:cmp.b #6,s_typ
bne.w ein2
add.l #4*40,s_mem_a
br.w ein1
t_4e: cmp.b #2,s_typ
bhi.b _10
add.l #8*16,s_mem_a
br.w ein1
_10:cmp.b #3,s_typ
bne.b _20
add.l #8*64,s_mem_a
br.w ein1
_20:cmp.b #4,s_typ
bne.w _30
movu.bl s_lineoff+7,r0
add.l r0,s_mem_a
br.w ein1
_30:cmp.b #6,s_typ
bne.w ein2
add.l #8*40,s_mem_a
br.w ein1
t_4f: move.b #1,s_run
move.w #0,s_nest
br.b t_59a
t_50: move.b #2,s_run
move.w #0,s_nest
br.b t_59a
t_51: move.b #3,s_run
move.w #0,s_nest
br.b t_59a
t_53: move.b #4,s_run
move.w #0,s_nest
br.b t_59a
t_52: bsr.w screen_restore
move.b #0,new09_flag
IF KEYINT
bsr.w set_old09
ENDIF
move.l #$10000000,r2
_10: dbf.l r2,_10
move.b #-1,new09_flag
IF KEYINT
bsr.w set_new09
ENDIF
br.w ein1
t_59: move.w s_s6,r0
move.w r0,s1
move.w s_pc,r5
cmp.w #$feeb,(r5.w){s1} ; naechster Befehl Sprung auf sich?
bne.b t_59a
addq.w #2,s_pc ; uebergehen
tst.b #$03,shift_flag
beq.b t_59a
move.w #$9090,(r5.w){s1} ; durch nop's ersetzen
t_59a: bsr.w set_new01
bset.w #8,s_sr
bsr.w screen_restore
br.w exit
t_0f: tst.b #$03,shift_flag ; shift
bne.b _10
tst.b #$0c,shift_flag ; control
bne.b _20
tst.b #$10,shift_flag ; alternate
bne.b _30
; tst.b #$20,shift_flag ; alt-gr
; bne.b _40
move.w _101,r0
move.w r0,s_mem_s
move.l _102,r0
move.l r0,s_mem_a
br.w ein1
_10: move.w _100,r0
move.w _101,s3
move.l _102,r1
move.w r0,(r1){s3}
br.w ein1
_20: move.w s_mem_s,s3
move.l s_mem_a,r1
move.w (r1){s3},r0
move.w r0,_100
move.w s3,_101
move.l r1,_102
move.w #$feeb,(r1){s3}
br.w ein1
_30: move.w s_s6,s3
eor.l r5,r5
move.w s_pc,r5
move.w #disass_buf,r6
bsr.w disass
move.w (r5){s3},r0
move.w r0,_100
move.w s3,_101
move.l r5,_102
move.w #$feeb,(r5){s3}
br.w ein1
_100: dc.w 0
_101: dc.w $a000
_102: dc.l 0
IF DOS_EXTENDER
t_29:
move.w #0,r0
move.w r0,s3
IF 0 ; DOS-Extender ohne Task-Switch
move.w s0,-(sp)
move.w #$339e,r0 ; *****
move.w r0,s0
jsr.ww $295e:$0b2d ; *****
move.w r0,r3
move.l $60.b(r3.w),r2
move.w (sp)+,s0
addq.l #$24,r2
move.l #$10,r3
bsr.w get_lin_adr
bsr.w get_phys_adr
move.w (r0){s3},r4
subq.l #$14,r2
bsr.w get_lin_adr
bsr.w get_phys_adr
move.l (r0){s3},r2
move.w r4,r3
move.l r2,s_f2
; addq.l #$1c,s_f2 ; programm sp nach 2. rte
addq.l #$2c,s_f2 ; programm sp nach 3. rte
move.w r3,s_f2+4 ; programm ss
; addq.l #$14,r2 ; nach 2. rte
addq.l #$24,r2 ; nach 3. rte
bsr.w get_lin_adr
bsr.w get_phys_adr
move.w (r0){s3},r4
subq.w #2,r2
bsr.w get_lin_adr
bsr.w get_phys_adr
move.w (r0){s3},r5
lsl.l #16,r5
subq.w #2,r2
bsr.w get_lin_adr
bsr.w get_phys_adr
move.w (r0){s3},r5
move.w r4,r3
move.l r5,r2
move.l r2,s_f1 ; Programm pc
move.w r3,s_f1+4 ; Programm cs
bsr.w get_lin_adr
bsr.w get_phys_adr
move.l r0,s_mem_a
br.w ein1
ENDIF ; DOS-Extender ohne Task-Switch
IF 0 ; ein anderer DOS-Extender ohne Task-Switch
move.w #$6d32,r2
move.w #$0088,r3
bsr.w get_lin_adr
move.l (r1){s3},r0
move.l r0,s_f1
move.l r0,s_mem_a
move.w #0,s_f1+4
move.w #0,s_mem_s
move.w #$6d18,r2
move.w #$0088,r3
bsr.w get_lin_adr
move.l (r1){s3},r0
move.l r0,s_f2
move.w #0,s_f2+4
move.w #$6d04,r2
move.w #$0088,r3
bsr.w get_lin_adr
move.l (r1){s3},r0
move.l r0,s_f3
move.w #0,s_f3+4
br.w ein1
ENDIF ; DOS-Extender ohne Task-Switch
IF 1 ; ein anderer DOS-Extender ohne Task-Switch
move.w s2,-(sp)
move.l s_r7,r4
move.l (r4){s7},r6
move.w #$2f6f,r0
move.w r0,s2
move.l $14.b(r6.w){s2},r2
move.w $24.b(r6.w){s2},r3
move.l r2,s_f5
move.w r3,s_f5+4
addq.l #8*4,r2
bsr.w get_lin_adr
bsr.w get_phys_adr
move.l r0,s_f6
move.l (r0){s3},r1
move.l r1,s_f4
move.w 4.b(r0){s3},r1
move.w r1,s_f4+4
move.l s_f5,r2
move.w s_f5+4,r3
addq.l #11*4,r2
bsr.w get_lin_adr
bsr.w get_phys_adr
move.l (r0){s3},r1
move.l r1,s_f8
move.w 4.b(r0){s3},r1
move.w r1,s_f8+4
move.w (sp)+,s2
br.w ein1
ENDIF ; DOS-Extender ohne Task-Switch
IF 0 ; DOS-Extender mit Task-Switch
move.w s0,-(sp)
move.w #$3d9d,r0 ; ***
move.w r0,s0
move.w $422a,r3 ; *** current tss-selector
move.w (sp)+,s0
eor.l r2,r2
bsr.w get_lin_adr
bsr.w get_phys_adr
move.w (r0){s3},r3 ; old tss-selector
bsr.w get_lin_adr
bsr.w get_phys_adr
; ACHTUNG folgendes nur richtig, wenn tss nicht ueber
; Seitengrenze geht oder wenn beide Seiten physikalisch
; hintereinander liegen
move.l r0,s_f1 ; Adresse tss
move.w #0,s_f1+4 ;
move.l $38.b(r0){s3},r1
move.l r1,s_f2 ; sp
move.w $50.b(r0){s3},r1
move.w r1,s_f2+4 ; ss
move.l $20.b(r0){s3},r1
move.l r1,s_mem_a ; pc
move.w $4c.b(r0){s3},r1
move.w r1,s_mem_s ; cs
br.w ein1
ENDIF ; DOS-Extender mit Task-Switch
ENDIF
t_5d: tst.b #$03,shift_flag
beq.w ein2
inc.l s_pc
br.w ein1
t_65: tst.b #$03,shift_flag
beq.w ein2
dec.l s_pc
br.w ein1
t_60: move.l s_mem_a,r0
move.w s_mem_s,s3
tst.b #$03,shift_flag
bne.b _10
tst.b #$0c,shift_flag
beq.w ein2
sub.b #$10,(r0){s3}
br.w ein1
_10: dec.b (r0){s3}
br.w ein1
t_62: move.l s_mem_a,r0
move.w s_mem_s,s3
tst.b #$03,shift_flag
bne.b _10
tst.b #$0c,shift_flag
beq.w ein2
add.b #$10,(r0){s3}
br.w ein1
_10: inc.b (r0){s3}
br.w ein1
t_19: move.w #8,r1 ; alle 8 Zeilen Drucken
t_19a: move.b #1,s_print
move.l #text_buf,r3
_20: move.w #80,r2
_10: move.b (r3),r0
inc.l r3
bsr.w print_ch
tst.b #$ff,s_print
beq.w ein1
dbf.w r2,_10
move.b #13,r0
bsr.w print_b
move.b #10,r0
bsr.w print_b
dec.w r1
bne.b _20
br.w ein1
t_27: move.w #1,r1 ; oberste Zeile drucken
br.b t_19a
t_18: ; PS-Drucker initialisieren
IF PS
move.l #_50,r1
bsr.w print_string
ENDIF
br.w ein2
IF PS
_50: dc.b ' 100 dict begin'
dc.b ' /l_rand 60 def'
dc.b ' /o_rand 540 def'
dc.b ' /u_rand 10 def'
dc.b ' /mitte 420 def'
dc.b ' /z_abs 8 def'
dc.b ' /l_flag 1 def'
dc.b ' /s 1 string def'
dc.b ' /crlf {currentpoint z_abs sub dup u_rand le'
dc.b ' {pop pop mitte'
dc.b ' l_flag 1 ne {gsave showpage grestore neg} if'
dc.b ' 0 translate'
dc.b ' /l_flag l_flag neg def'
dc.b ' l_rand o_rand moveto'
dc.b ' }'
dc.b ' {exch pop l_rand exch moveto}'
dc.b ' ifelse'
dc.b ' } def'
dc.b ' /do {'
dc.b ' {currentfile read pop'
dc.b ' dup 10 eq' ; lf'
dc.b ' {pop crlf}'
dc.b ' {dup 13 eq' ;cr
dc.b ' {pop}'
dc.b ' {dup 12 eq' ;ff
dc.b ' {pop 0 0 moveto crlf}'
dc.b ' {dup 5 eq' ; ^E Endemarkierung
dc.b ' {pop exit}'
dc.b ' {s exch 0 exch put s show'
dc.b ' } ifelse'
dc.b ' } ifelse'
dc.b ' } ifelse'
dc.b ' }ifelse'
dc.b ' } loop'
dc.b ' l_flag 1 ne currentpoint o_rand ne exch'
dc.b ' l_rand ne or or {showpage} if'
dc.b ' } def'
dc.b ' /Courier findfont [6 0 0 8 0 0] makefont setfont'
dc.b ' 570 0 translate'
dc.b ' 90 rotate'
dc.b ' l_rand o_rand moveto'
dc.b ' do ',0
ENDIF
t_1a: ; PS-Drucker letzte Seite auswerfen
IF PS
move.l #_50,r1
bsr.w print_string
ENDIF
br.w ein2
IF PS
_50: dc.b 5,4,0
ENDIF
t_26: move.b #13,r0 ; Leerzeile auf Drucker ausgeben
bsr.w print_b
move.b #10,r0
bsr.w print_b
br.w ein2
t_2d: tst.b #$03,shift_flag
bne.b _50
move.l s_mem_a,r2
move.w s_mem_s,r3
bsr.w get_lin_adr
move.l r1,s_mem_a
move.w x_err,r0
move.w r0,s_mem_s
br.w ein1
_50: move.l s_mem_a,r0
move.l r0,x_gdt
move.w s_mem_s,r0
move.w r0,x_ldt
br.w ein2
t_2c: tst.b #$03,shift_flag
bne.b _50
move.l s_mem_a,r1
bsr.w get_phys_adr
move.l r0,s_mem_a
move.w x_err,r0
move.w r0,s_mem_s
br.w ein1
_50: move.l s_mem_a,r0
move.l r0,x_pdb
move.w s_mem_s,r0
move.w r0,x_pen
br.w ein2
if 0
x_gdt: dc.l $000364f0 ; lineare Adr. von GDT
x_ldt: dc.w $0028 ; Selector fuer LDT
x_pdb: dc.l $00045000 ; phys. Adr. fuer Paged Directory Table
x_pen: dc.w 1 ; 0: Paging disabelde
x_err: dc.w 0
endif
if 0
x_gdt: dc.l $00100010 ; lineare Adr. von GDT
x_ldt: dc.w $0068 ; Selector fuer LDT
x_pdb: dc.l $00000000 ; phys. Adr. fuer Paged Directory Table
x_pen: dc.w 0 ; 0: Paging disabelde
x_err: dc.w 0
endif
if 1
x_gdt: dc.l $00902000 ; lineare Adr. von GDT
x_ldt: dc.w $0028 ; Selector fuer LDT
x_pdb: dc.l $00fb5000 ; phys. Adr. fuer Paged Directory Table
x_pen: dc.w 1 ; 0: Paging disabelde
x_err: dc.w 0
endif
get_lin_adr:
; Eingabe: r2.l : Offset der Adresse
; r3.w : Selector
; Ausgabe: r1.l : lineare Adresse
; C-Flag = 0 : Umsetzung ok
; 1 : Umsetzung nicht moeglich
; veraendert: r1.l
movem.l r0-r7,-(sp)
move.w s3,-(sp)
eor.w r0,r0
move.w r0,s3
move.l x_gdt,r1
and.l #$0000fffc,r3
move.b #1,x_err
beq.w _201 ; 0-Selctor nicht erlaubt
tst.w #$0004,r3
bne.w _ldt
_20: lea.l (r1,r3),r1 ; lineare Adr. des Segmentdescriptors
addq.l #2,r1
bsr.w get_phys_adr
bcs.b _202
move.b (r0){s3},r3
ror.l #8,r3
inc.l r1
bsr.w get_phys_adr
bcs.b _203
move.b (r0){s3},r3
ror.l #8,r3
inc.l r1
bsr.w get_phys_adr
bcs.b _204
move.b (r0){s3},r3
ror.l #8,r3
addq.l #3,r1
bsr.w get_phys_adr
bcs.b _205
move.b (r0){s3},r3
ror.l #8,r3
add.l r2,r3
move.l r3,_10
bclr.w #0,sr
_100: move.w (sp)+,s3
movem.l (sp)+,r0-r7
move.l _10,r1
rts.w
_10: dc.l 0
_201: move.w #$10,x_err
br.b _200
_202: add.w #$20,x_err
br.b _200
_203: add.w #$30,x_err
br.b _200
_204: add.w #$40,x_err
br.b _200
_205: add.w #$50,x_err
br.b _200
_206: add.w #$60,x_err
br.b _200
_200: bset.w #0,sr
br.b _100
_ldt: and.w #$fff8,r3
move.w r3,r4
move.l r2,r6
move.w x_ldt,r3
tst.w #$04,r3
bne.b _205
and.w #$fff8,r3
eor.l r2,r2
bsr.w get_lin_adr ; lin. Adr. der LDT berechnen
bcs.b _206
move.l r6,r2
move.w r4,r3
br.w _20
get_phys_adr:
; Eingabe: r1.l : lineare Adresse
; Ausgabe: r0.l : physikalische Adresse
; C-Flag = 0 : Umsetzung ok
; 1 : Umsetzung nicht moeglich
; veraendert: r0.l
tst.w #$ffff,x_pen
bne.b _00
move.l r1,r0
move.w #0,x_err
bclr.w #0,sr
rts.w
_00: movem.l r0-r7,-(sp)
move.w s3,-(sp)
move.l x_pdb,r0
move.l r0,r2
and.l #$fff,r0 ; an 4k Grenze
bne.w _201 ; nein, dann Fehler
move.w r0,s3
move.l r1,r0
lsr.l #22,r0
move.l (r2,r0*4){s3},r0
tst.b #1,r0 ; present
beq.b _202 ; nein, dann Fehler
and.w #$f000,r0
cmp.l #MAXMEM,r0 ; groesser phys. Speicher
bhs.b _203 ; ja, dann sicher falsch
move.l r1,r2
lsr.l #12,r2
and.l #$03ff,r2
move.l (r0,r2*4){s3},r0
tst.b #1,r0 ; present
beq.b _204 ; nein, dann Fehler
and.w #$f000,r0
cmp.l #MAXMEM,r0 ; groesser phys. Speicher
bhs.b _205 ; ja, dann sicher falsch
and.w #$0fff,r1
add.w r1,r0
move.l r0,_10
move.w #0,x_err
move.w (sp)+,s3
movem.l (sp)+,r0-r7
move.l _10,r0
bclr.w #0,sr
rts.w
_10: dc.l 0
_201: move.w #1,x_err
br.b _200
_202: move.w #2,x_err
br.b _200
_203: move.w #3,x_err
br.b _200
_204: move.w #4,x_err
br.b _200
_205: move.w #5,x_err
br.b _200
_200: move.w (sp)+,s3
movem.l (sp)+,r0-r7
bset.w #0,sr
rts.w
IF FINDCHANGE
; shift k kopiert den Speicher 0-640k in buf1 (ACHTUNG XMS-Speicher wird
; ctrl k kopiert den Speicher 0-640k in buf2 ueberschrieben !!!!!!!)
; alt k kopiert den Speicher 0-640k in buf3
; k sucht ab MemPtr bis 640k das naechste Byte, das identisch ist mit
; dem in buf1 aber unterschiedlich zu dem in buf2 und (buf2=buf3)
t_25:
_buf1=$500000
_buf2=$600000
_buf3=$700000
eor.l r0,r0
move.w r0,s3
tst.b #$03,shift_flag ; shift
bne.w _10
tst.b #$0c,shift_flag ; control
bne.w _20
tst.b #$10,shift_flag ; alternate
bne.w _30
; tst.b #$20,shift_flag ; alt-gr
; bne.b _40
move.w s_mem_s,r0
lsl.l #4,r0
move.l r0,r2
add.l s_mem_a,r0
move.l r0,r3
move.l r0,r4
add.l #_buf1,r4
move.l r0,r5
add.l #_buf2,r5
move.l r0,r6
add.l #_buf3,r6
_50: inc.l r3
cmp.l #$a0000,r3
bhs.w _100
inc.l r4
inc.l r5
inc.l r6
move.b (r3){s3},r0
move.b (r5){s3},m0
cmp.b r0,m0
beq.b _50
cmp.b (r4){s3},r0
bne.b _50
cmp.b (r6){s3},m0
bne.b _50
_100: sub.l r2,r3
move.l r3,s_mem_a
br.w ein1
_30: move.l #_buf3,r6
br.b _12
_20: move.l #_buf2,r6
br.b _12
_10: move.l #_buf1,r6
_12: eor.l r5,r5
move.l #$100000/4,r2
_11: move.l (r5){s3},r0
inc.l r5
move.l r0,(r6){s3}
inc.l r6
dbf.l r2,_11
br.w ein1
ENDIF ; FINDCHANGE
t_0c: tst.b #$03,shift_flag ; shift
bne.b _10
tst.b #$0c,shift_flag ; control
bne.b _20
tst.b #$10,shift_flag ; alternate
bne.w _30
tst.b #$20,shift_flag ; alt-gr
bne.w _40
eor.l r0,r0
move.w _100,r0
move.w r0,s_mem_s
move.l _101,r1
move.l r1,s_mem_a
lsl.l #4,r0
add.l r1,r0
move.l dr0,r1
cmp.l r0,r1
beq.w ein1
move.w #0,s_mem_s
move.l r1,s_mem_a
br.w ein1
_10: move.l s_dr7,r0
and.l #$fffffff0,r0
move.l r0,s_dr7
br.w ein1
_20: eor.l r0,r0
move.w s_mem_s,r0
move.l s_mem_a,r5
_21: move.w r0,_100
move.l r5,_101
lsl.l #4,r0
add.l r5,r0
move.l r0,dr0
move.l r0,dr1
move.l r0,s_dr0
move.l r0,s_dr1
move.l s_dr7,r0
and.l #$ff0000f0,r0
or.l #$0003030f,r0
move.l r0,s_dr7
br.w ein1
_30: move.w s_s6,s3
eor.l r5,r5
move.w s_pc,r5
move.w #disass_buf,r6
bsr.w disass
eor.l r0,r0
move.w s3,r0
br.b _21
_40: move.l s_dr7,r0
or.l #$0000000f,r0
move.l r0,s_dr7
br.w ein1
_100: dc.w 0
_101: dc.l 0
t_0d: tst.b #$03,shift_flag ; shift
bne.b _10
tst.b #$0c,shift_flag ; control
bne.b _20
tst.b #$10,shift_flag ; alternate
bne.w _30
tst.b #$20,shift_flag ; alt-gr
bne.w _40
eor.l r0,r0
move.w _100,r0
move.w r0,s_mem_s
move.l _101,r1
move.l r1,s_mem_a
lsl.l #4,r0
add.l r1,r0
move.l dr2,r1
cmp.l r0,r1
beq.w ein1
move.w #0,s_mem_s
move.l r1,s_mem_a
br.w ein1
_10: move.l s_dr7,r0
and.l #$ffffff0f,r0
move.l r0,s_dr7
br.w ein1
_20: eor.l r0,r0
move.w s_mem_s,r0
move.l s_mem_a,r5
_21: move.w r0,_100
move.l r5,_101
lsl.l #4,r0
add.l r5,r0
move.l r0,dr2
move.l r0,dr3
move.l r0,s_dr2
move.l r0,s_dr3
move.l s_dr7,r0
and.l #$00ff000f,r0
or.l #$030003f0,r0
move.l r0,s_dr7
br.w ein1
_30: move.w s_s6,s3
eor.l r5,r5
move.w s_pc,r5
move.w #disass_buf,r6
bsr.w disass
eor.l r0,r0
move.w s3,r0
br.b _21
_40: move.l s_dr7,r0
or.l #$000000f0,r0
move.l r0,s_dr7
br.w ein1
_100: dc.w 0
_101: dc.l 0
t_16: inc.b stop_trap
cmp.b #2,stop_trap
bne.b _10
move.b #-1,stop_trap
_10:move.b #1,s_typ
br.w ein1
t_17: not.b stop_io
move.b #1,s_typ
br.w ein1
t_00:
;t_0c:
;t_0d:
;t_0f:
t_10:
t_11:
t_13:
t_15:
t_1b:
t_1d:
t_23:
t_24:
IF !FINDCHANGE
t_25:
ENDIF
t_28:
IF !DOS_EXTENDER
t_29:
ENDIF
t_2a:
;t_2b:
;t_2c:
;t_2d:
t_2f:
t_31:
t_32:
t_33:
t_34:
t_35:
t_36:
t_38:
t_39:
t_3a:
t_46:
t_54:
t_55:
t_56:
t_57:
t_58:
t_5b:
t_5f:
t_61:
t_63:
t_69:
t_6a:
t_6b:
t_6c:
t_6d:
t_6e:
t_6f:
t_70:
t_71:
t_72:
t_73:
t_74:
t_75:
t_76:
t_77:
t_78:
t_79:
t_7a:
t_7b:
t_7c:
t_7d:
t_7e:
t_7f:
br.w ein2
;***************************************************************************
ascii:
; 8*8 Font
dc.b $00,$44,$aa,$aa,$aa,$44,$00,$00 ; 00
dc.b $00,$44,$ac,$a4,$a4,$4e,$00,$00 ; 01
dc.b $00,$44,$aa,$a2,$a4,$4e,$00,$00 ; 02
dc.b $00,$4c,$a2,$a6,$a2,$4c,$00,$00 ; 03
dc.b $00,$4a,$aa,$ae,$a2,$42,$00,$00 ; 04
dc.b $00,$4e,$a8,$a6,$a2,$4c,$00,$00 ; 05
dc.b $00,$46,$a8,$ae,$aa,$4c,$00,$00 ; 06
dc.b $00,$4e,$a2,$a4,$a8,$48,$00,$00 ; 07
dc.b $00,$44,$aa,$a4,$aa,$44,$00,$00 ; 08
dc.b $00,$44,$aa,$a6,$a2,$4c,$00,$00 ; 09
dc.b $00,$4e,$aa,$ae,$aa,$4a,$00,$00 ; 0a
dc.b $00,$4c,$aa,$ac,$aa,$4c,$00,$00 ; 0b
dc.b $00,$46,$a8,$a8,$a8,$46,$00,$00 ; 0c
dc.b $00,$4c,$aa,$aa,$aa,$4c,$00,$00 ; 0d
dc.b $00,$4e,$a8,$ac,$a8,$4e,$00,$00 ; 0e
dc.b $00,$4e,$a8,$ac,$a8,$48,$00,$00 ; 0f
dc.b $00,$44,$ca,$4a,$4a,$e4,$00,$00 ; 10
dc.b $00,$44,$cc,$44,$44,$ee,$00,$00 ; 11
dc.b $00,$44,$ca,$42,$44,$ee,$00,$00 ; 12
dc.b $00,$4c,$c2,$46,$42,$ec,$00,$00 ; 13
dc.b $00,$4a,$ca,$4e,$42,$e2,$00,$00 ; 14
dc.b $00,$4e,$c8,$46,$42,$ec,$00,$00 ; 15
dc.b $00,$46,$c8,$4e,$4a,$ec,$00,$00 ; 16
dc.b $00,$4e,$c2,$44,$48,$e8,$00,$00 ; 17
dc.b $00,$44,$ca,$44,$4a,$e4,$00,$00 ; 18
dc.b $00,$44,$ca,$46,$42,$ec,$00,$00 ; 19
dc.b $00,$4e,$ca,$4e,$4a,$ea,$00,$00 ; 1a
dc.b $00,$4c,$ca,$4c,$4a,$ec,$00,$00 ; 1b
dc.b $00,$46,$c8,$48,$48,$e6,$00,$00 ; 1c
dc.b $00,$4c,$ca,$4a,$4a,$ec,$00,$00 ; 1d
dc.b $00,$4e,$c8,$4c,$48,$ee,$00,$00 ; 1e
dc.b $00,$4e,$c8,$4c,$48,$e8,$00,$00 ; 1f
dc.b $00,$00,$00,$00,$00,$00,$00,$00 ; 20
dc.b $10,$10,$10,$10,$10,$00,$10,$00 ; 21
dc.b $00,$24,$24,$24,$00,$00,$00,$00 ; 22
dc.b $28,$28,$7c,$28,$7c,$28,$28,$00 ; 23
dc.b $10,$3c,$50,$38,$14,$78,$10,$00 ; 24
dc.b $64,$64,$08,$10,$20,$4c,$4c,$00 ; 25
dc.b $38,$44,$28,$30,$4e,$4c,$32,$00 ; 26
dc.b $10,$10,$10,$00,$00,$00,$00,$00 ; 27
dc.b $08,$10,$20,$20,$20,$10,$08,$00 ; 28
dc.b $20,$10,$08,$08,$08,$10,$20,$00 ; 29
dc.b $00,$24,$18,$3c,$18,$24,$00,$00 ; 2a
dc.b $00,$10,$10,$7c,$10,$10,$00,$00 ; 2b
dc.b $00,$00,$00,$00,$00,$10,$10,$20 ; 2c
dc.b $00,$00,$00,$3c,$00,$00,$00,$00 ; 2d
dc.b $00,$00,$00,$00,$00,$18,$18,$00 ; 2e
dc.b $04,$08,$08,$10,$20,$20,$40,$00 ; 2f
dc.b $38,$44,$4c,$54,$64,$44,$38,$00 ; 30
dc.b $10,$30,$10,$10,$10,$10,$38,$00 ; 31
dc.b $38,$44,$04,$18,$20,$40,$7c,$00 ; 32
dc.b $38,$44,$04,$18,$04,$44,$38,$00 ; 33
dc.b $08,$18,$28,$48,$7c,$08,$08,$00 ; 34
dc.b $7c,$40,$40,$78,$04,$04,$78,$00 ; 35
dc.b $38,$40,$40,$78,$44,$44,$38,$00 ; 36
dc.b $3c,$04,$08,$08,$10,$10,$10,$00 ; 37
dc.b $38,$44,$44,$38,$44,$44,$38,$00 ; 38
dc.b $38,$44,$44,$3c,$04,$04,$38,$00 ; 39
dc.b $00,$00,$18,$18,$00,$18,$18,$00 ; 3a
dc.b $00,$00,$00,$10,$00,$10,$10,$20 ; 3b
dc.b $00,$0c,$30,$40,$30,$0c,$00,$00 ; 3c
dc.b $00,$00,$3c,$00,$3c,$00,$00,$00 ; 3d
dc.b $00,$60,$18,$04,$18,$60,$00,$00 ; 3e
dc.b $38,$44,$0c,$18,$10,$00,$10,$00 ; 3f
dc.b $38,$44,$5c,$5c,$40,$44,$38,$00 ; 40
dc.b $38,$6c,$44,$7c,$44,$44,$44,$00 ; 41
dc.b $78,$44,$44,$78,$44,$44,$78,$00 ; 42
dc.b $38,$44,$40,$40,$40,$44,$38,$00 ; 43
dc.b $78,$44,$44,$44,$44,$44,$78,$00 ; 44
dc.b $7c,$40,$40,$78,$40,$40,$7c,$00 ; 45
dc.b $7c,$40,$40,$78,$40,$40,$40,$00 ; 46
dc.b $38,$44,$40,$5c,$44,$44,$38,$00 ; 47
dc.b $44,$44,$44,$7c,$44,$44,$44,$00 ; 48
dc.b $38,$10,$10,$10,$10,$10,$38,$00 ; 49
dc.b $04,$04,$04,$04,$04,$44,$38,$00 ; 4a
dc.b $44,$48,$50,$60,$50,$48,$44,$00 ; 4b
dc.b $40,$40,$40,$40,$40,$40,$7c,$00 ; 4c
dc.b $44,$6c,$54,$44,$44,$44,$44,$00 ; 4d
dc.b $44,$64,$64,$54,$4c,$4c,$44,$00 ; 4e
dc.b $38,$44,$44,$44,$44,$44,$38,$00 ; 4f
dc.b $78,$44,$44,$78,$40,$40,$40,$00 ; 50
dc.b $38,$44,$44,$44,$54,$4c,$3c,$00 ; 51
dc.b $78,$44,$44,$78,$50,$48,$44,$00 ; 52
dc.b $38,$44,$40,$38,$04,$44,$38,$00 ; 53
dc.b $7c,$10,$10,$10,$10,$10,$10,$00 ; 54
dc.b $44,$44,$44,$44,$44,$44,$38,$00 ; 55
dc.b $44,$44,$44,$44,$44,$28,$10,$00 ; 56
dc.b $44,$44,$44,$54,$54,$6c,$44,$00 ; 57
dc.b $44,$44,$38,$10,$38,$44,$44,$00 ; 58
dc.b $44,$44,$44,$28,$10,$10,$10,$00 ; 59
dc.b $7c,$04,$08,$10,$20,$40,$7c,$00 ; 5a
dc.b $3c,$20,$20,$20,$20,$20,$3c,$00 ; 5b
dc.b $40,$40,$20,$10,$08,$04,$04,$00 ; 5c
dc.b $38,$08,$08,$08,$08,$08,$38,$00 ; 5d
dc.b $10,$28,$44,$00,$00,$00,$00,$00 ; 5e
dc.b $00,$00,$00,$00,$00,$00,$7c,$00 ; 5f
dc.b $20,$10,$08,$00,$00,$00,$00,$00 ; 60
dc.b $00,$00,$38,$04,$3c,$44,$3c,$00 ; 61
dc.b $40,$40,$78,$44,$44,$44,$78,$00 ; 62
dc.b $00,$00,$38,$40,$40,$40,$38,$00 ; 63
dc.b $04,$04,$3c,$44,$44,$44,$3c,$00 ; 64
dc.b $00,$00,$38,$44,$7c,$40,$38,$00 ; 65
dc.b $18,$20,$20,$70,$20,$20,$20,$00 ; 66
dc.b $00,$00,$3c,$44,$44,$3c,$04,$38 ; 67
dc.b $40,$40,$58,$64,$44,$44,$44,$00 ; 68
dc.b $10,$00,$30,$10,$10,$10,$38,$00 ; 69
dc.b $04,$00,$04,$04,$04,$04,$24,$18 ; 6a
dc.b $40,$40,$44,$48,$70,$48,$44,$00 ; 6b
dc.b $30,$10,$10,$10,$10,$10,$38,$00 ; 6c
dc.b $00,$00,$28,$7c,$54,$54,$44,$00 ; 6d
dc.b $00,$00,$78,$44,$44,$44,$44,$00 ; 6e
dc.b $00,$00,$38,$44,$44,$44,$38,$00 ; 6f
dc.b $00,$00,$78,$44,$44,$78,$40,$40 ; 70
dc.b $00,$00,$3c,$44,$44,$3c,$04,$04 ; 71
dc.b $00,$00,$38,$24,$20,$20,$20,$00 ; 72
dc.b $00,$00,$1c,$20,$1c,$04,$38,$00 ; 73
dc.b $10,$10,$38,$10,$10,$10,$18,$00 ; 74
dc.b $00,$00,$44,$44,$44,$44,$3c,$00 ; 75
dc.b $00,$00,$44,$44,$28,$28,$10,$00 ; 76
dc.b $00,$00,$44,$44,$54,$54,$28,$00 ; 77
dc.b $00,$00,$44,$28,$10,$28,$44,$00 ; 78
dc.b $00,$00,$44,$44,$44,$3c,$04,$38 ; 79
dc.b $00,$00,$78,$08,$10,$20,$78,$00 ; 7a
dc.b $0c,$08,$18,$30,$18,$08,$0c,$00 ; 7b
dc.b $10,$10,$10,$10,$10,$10,$10,$00 ; 7c
dc.b $30,$10,$18,$0c,$18,$10,$30,$00 ; 7d
dc.b $00,$20,$74,$5c,$08,$00,$00,$00 ; 7e
dc.b $10,$10,$28,$28,$44,$7c,$00,$00 ; 7f
if 0
; 8*16 Font
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$3C,$66,$6E,$76,$66,$66,$3C,$00 ; 00
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$18,$38,$18,$18,$18,$18,$7E,$00 ; 01
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$3C,$66,$06,$0C,$18,$30,$7E,$00 ; 02
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$7E,$0C,$18,$0C,$06,$66,$3C,$00 ; 03
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$0C,$1C,$3C,$6C,$7E,$0C,$0C,$00 ; 04
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$7E,$60,$7C,$06,$06,$66,$3C,$00 ; 05
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$3C,$60,$60,$7C,$66,$66,$3C,$00 ; 06
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$7E,$06,$0C,$18,$30,$30,$30,$00 ; 07
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$3C,$66,$66,$3C,$66,$66,$3C,$00 ; 08
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$3C,$66,$66,$3E,$06,$0C,$38,$00 ; 09
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$18,$3C,$66,$66,$7E,$66,$66,$00 ; 0a
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$7C,$66,$66,$7C,$66,$66,$7C,$00 ; 0b
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$3C,$66,$60,$60,$60,$66,$3C,$00 ; 0c
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$78,$6C,$66,$66,$66,$6C,$78,$00 ; 0d
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$7E,$60,$60,$7C,$60,$60,$7E,$00 ; 0e
dc.b $3C,$66,$6E,$76,$66,$66,$3C,$00,$7E,$60,$60,$7C,$60,$60,$60,$00 ; 0f
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$3C,$66,$6E,$76,$66,$66,$3C,$00 ; 10
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$18,$38,$18,$18,$18,$18,$7E,$00 ; 11
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$3C,$66,$06,$0C,$18,$30,$7E,$00 ; 12
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$7E,$0C,$18,$0C,$06,$66,$3C,$00 ; 13
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$0C,$1C,$3C,$6C,$7E,$0C,$0C,$00 ; 14
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$7E,$60,$7C,$06,$06,$66,$3C,$00 ; 15
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$3C,$60,$60,$7C,$66,$66,$3C,$00 ; 16
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$7E,$06,$0C,$18,$30,$30,$30,$00 ; 17
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$3C,$66,$66,$3C,$66,$66,$3C,$00 ; 18
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$3C,$66,$66,$3E,$06,$0C,$38,$00 ; 19
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$18,$3C,$66,$66,$7E,$66,$66,$00 ; 1a
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$7C,$66,$66,$7C,$66,$66,$7C,$00 ; 1b
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$3C,$66,$60,$60,$60,$66,$3C,$00 ; 1c
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$78,$6C,$66,$66,$66,$6C,$78,$00 ; 1d
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$7E,$60,$60,$7C,$60,$60,$7E,$00 ; 1e
dc.b $18,$38,$18,$18,$18,$18,$7E,$00,$7E,$60,$60,$7C,$60,$60,$60,$00 ; 1f
dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; 20
dc.b $00,$00,$18,$18,$18,$18,$18,$18,$18,$18,$00,$00,$18,$18,$00,$00 ; 21
dc.b $00,$00,$66,$66,$66,$66,$66,$66,$00,$00,$00,$00,$00,$00,$00,$00 ; 22
dc.b $00,$00,$66,$66,$FF,$FF,$66,$66,$FF,$FF,$66,$66,$00,$00,$00,$00 ; 23
dc.b $18,$18,$3E,$7E,$60,$60,$7C,$3E,$06,$06,$7E,$7C,$18,$18,$00,$00 ; 24
dc.b $00,$00,$66,$66,$6C,$0C,$18,$18,$30,$36,$66,$66,$00,$00,$00,$00 ; 25
dc.b $38,$7C,$6C,$6C,$38,$38,$70,$70,$DE,$DE,$CC,$CC,$FE,$76,$00,$00 ; 26
dc.b $00,$00,$18,$18,$18,$18,$18,$18,$00,$00,$00,$00,$00,$00,$00,$00 ; 27
dc.b $00,$00,$06,$0C,$1C,$18,$18,$18,$18,$18,$18,$1C,$0C,$06,$00,$00 ; 28
dc.b $00,$00,$60,$30,$38,$18,$18,$18,$18,$18,$18,$38,$30,$60,$00,$00 ; 29
dc.b $00,$00,$66,$66,$3C,$3C,$FF,$FF,$3C,$3C,$66,$66,$00,$00,$00,$00 ; 2a
dc.b $00,$00,$00,$18,$18,$18,$7E,$7E,$18,$18,$18,$00,$00,$00,$00,$00 ; 2b
dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$30,$20 ; 2c
dc.b $00,$00,$00,$00,$00,$00,$7E,$7E,$00,$00,$00,$00,$00,$00,$00,$00 ; 2d
dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$00,$00 ; 2e
dc.b $00,$00,$06,$06,$06,$0C,$0C,$18,$18,$30,$30,$60,$60,$60,$00,$00 ; 2f
dc.b $00,$00,$3C,$7E,$66,$66,$66,$6E,$76,$66,$66,$66,$7E,$3C,$00,$00 ; 30
dc.b $00,$00,$18,$18,$38,$38,$18,$18,$18,$18,$18,$18,$7E,$7E,$00,$00 ; 31
dc.b $00,$00,$3C,$7E,$66,$66,$0C,$0C,$18,$18,$30,$30,$7E,$7E,$00,$00 ; 32
dc.b $00,$00,$7E,$7E,$0C,$0C,$18,$18,$0C,$0C,$66,$66,$7E,$3C,$00,$00 ; 33
dc.b $00,$00,$0C,$0C,$1C,$1C,$3C,$3C,$6C,$6C,$7E,$7E,$0C,$0C,$00,$00 ; 34
dc.b $00,$00,$7E,$7E,$60,$60,$7C,$7E,$06,$06,$06,$66,$7E,$3C,$00,$00 ; 35
dc.b $00,$00,$1C,$3C,$70,$60,$60,$7C,$7E,$66,$66,$66,$7E,$3C,$00,$00 ; 36
dc.b $00,$00,$7E,$7E,$06,$06,$0C,$0C,$18,$18,$30,$30,$30,$30,$00,$00 ; 37
dc.b $00,$00,$3C,$7E,$66,$66,$3C,$3C,$66,$66,$66,$66,$7E,$3C,$00,$00 ; 38
dc.b $00,$00,$3C,$7E,$66,$66,$7E,$3E,$06,$06,$06,$0E,$3C,$38,$00,$00 ; 39
dc.b $00,$00,$00,$00,$18,$18,$18,$18,$00,$00,$18,$18,$18,$18,$00,$00 ; 3a
dc.b $00,$00,$00,$00,$18,$18,$18,$18,$00,$00,$18,$18,$18,$18,$30,$20 ; 3b
dc.b $00,$00,$00,$0E,$1C,$38,$70,$E0,$70,$38,$1C,$0E,$00,$00,$00,$00 ; 3c
dc.b $00,$00,$00,$00,$7E,$7E,$00,$00,$7E,$7E,$00,$00,$00,$00,$00,$00 ; 3d
dc.b $00,$00,$00,$E0,$70,$38,$1C,$0E,$1C,$38,$70,$E0,$00,$00,$00,$00 ; 3e
dc.b $00,$00,$3C,$7E,$66,$66,$0C,$0C,$18,$18,$18,$00,$18,$18,$00,$00 ; 3f
dc.b $00,$00,$38,$7C,$E6,$C2,$DA,$D6,$D6,$DC,$C0,$E2,$7E,$3C,$00,$00 ; 40
dc.b $00,$00,$18,$3C,$7E,$66,$66,$66,$7E,$7E,$66,$66,$66,$66,$00,$00 ; 41
dc.b $00,$00,$7C,$7E,$66,$66,$7E,$7C,$66,$66,$66,$66,$7E,$7C,$00,$00 ; 42
dc.b $00,$00,$3C,$7E,$66,$66,$60,$60,$60,$60,$66,$66,$7E,$3C,$00,$00 ; 43
dc.b $00,$00,$78,$7C,$6E,$66,$66,$66,$66,$66,$66,$6E,$7C,$78,$00,$00 ; 44
dc.b $00,$00,$7E,$7E,$60,$60,$7C,$7C,$60,$60,$60,$60,$7E,$7E,$00,$00 ; 45
dc.b $00,$00,$7E,$7E,$60,$60,$7C,$7C,$60,$60,$60,$60,$60,$60,$00,$00 ; 46
dc.b $00,$00,$3E,$7E,$60,$60,$6E,$6E,$66,$66,$66,$66,$7E,$3C,$00,$00 ; 47
dc.b $00,$00,$66,$66,$66,$66,$7E,$7E,$66,$66,$66,$66,$66,$66,$00,$00 ; 48
dc.b $00,$00,$7E,$7E,$18,$18,$18,$18,$18,$18,$18,$18,$7E,$7E,$00,$00 ; 49
dc.b $00,$00,$06,$06,$06,$06,$06,$06,$06,$06,$66,$66,$7E,$3C,$00,$00 ; 4a
dc.b $00,$00,$CC,$CC,$D8,$D8,$F0,$F0,$D8,$D8,$CC,$CC,$C6,$C6,$00,$00 ; 4b
dc.b $00,$00,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$7E,$7E,$00,$00 ; 4c
dc.b $00,$00,$C6,$C6,$EE,$EE,$FE,$D6,$D6,$C6,$C6,$C6,$C6,$C6,$00,$00 ; 4d
dc.b $00,$00,$66,$66,$66,$76,$76,$7E,$7E,$6E,$6E,$66,$66,$66,$00,$00 ; 4e
dc.b $00,$00,$3C,$7E,$66,$66,$66,$66,$66,$66,$66,$66,$7E,$3C,$00,$00 ; 4f
dc.b $00,$00,$7C,$7E,$66,$66,$66,$66,$7E,$7C,$60,$60,$60,$60,$00,$00 ; 50
dc.b $00,$00,$3C,$7E,$66,$66,$66,$66,$66,$66,$66,$6A,$7C,$36,$00,$00 ; 51
dc.b $00,$00,$F8,$FC,$CC,$CC,$CC,$FC,$F8,$D8,$CC,$CC,$C6,$C6,$00,$00 ; 52
dc.b $00,$00,$3E,$7E,$60,$60,$70,$38,$1C,$0E,$06,$06,$7E,$7C,$00,$00 ; 53
dc.b $00,$00,$7E,$7E,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$00,$00 ; 54
dc.b $00,$00,$66,$66,$66,$66,$66,$66,$66,$66,$66,$66,$7E,$3C,$00,$00 ; 55
dc.b $00,$00,$66,$66,$66,$66,$66,$66,$66,$66,$3C,$3C,$18,$18,$00,$00 ; 56
dc.b $00,$00,$C6,$C6,$C6,$C6,$C6,$D6,$D6,$FE,$FE,$EE,$C6,$82,$00,$00 ; 57
dc.b $00,$00,$66,$66,$66,$3C,$3C,$18,$18,$3C,$3C,$66,$66,$66,$00,$00 ; 58
dc.b $00,$00,$66,$66,$66,$66,$3C,$3C,$18,$18,$18,$18,$18,$18,$00,$00 ; 59
dc.b $00,$00,$7E,$7E,$0C,$0C,$18,$18,$30,$30,$60,$60,$7E,$7E,$00,$00 ; 5a
dc.b $00,$00,$1E,$1E,$18,$18,$18,$18,$18,$18,$18,$18,$1E,$1E,$00,$00 ; 5b
dc.b $00,$00,$60,$60,$60,$30,$30,$18,$18,$0C,$0C,$06,$06,$06,$00,$00 ; 5c
dc.b $00,$00,$78,$78,$18,$18,$18,$18,$18,$18,$18,$18,$78,$78,$00,$00 ; 5d
dc.b $00,$10,$10,$38,$38,$6C,$6C,$C6,$C6,$00,$00,$00,$00,$00,$00,$00 ; 5e
dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$FE,$00,$00 ; 5f
dc.b $40,$60,$70,$38,$1C,$0C,$04,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; 60
dc.b $00,$00,$00,$00,$00,$3C,$3E,$06,$3E,$7E,$66,$66,$7E,$3E,$00,$00 ; 61
dc.b $00,$00,$60,$60,$60,$7C,$7E,$66,$66,$66,$66,$66,$7E,$7C,$00,$00 ; 62
dc.b $00,$00,$00,$00,$00,$3C,$7C,$60,$60,$60,$60,$60,$7E,$3E,$00,$00 ; 63
dc.b $00,$00,$06,$06,$06,$3E,$7E,$66,$66,$66,$66,$66,$7E,$3E,$00,$00 ; 64
dc.b $00,$00,$00,$00,$00,$3C,$7E,$66,$66,$7E,$60,$60,$7E,$3E,$00,$00 ; 65
dc.b $00,$00,$0E,$1E,$18,$18,$7E,$7E,$18,$18,$18,$18,$18,$18,$00,$00 ; 66
dc.b $00,$00,$00,$00,$00,$3E,$7E,$66,$66,$66,$66,$7E,$3E,$06,$7E,$7C ; 67
dc.b $00,$00,$60,$60,$60,$7C,$7E,$66,$66,$66,$66,$66,$66,$66,$00,$00 ; 68
dc.b $00,$00,$18,$18,$00,$38,$38,$18,$18,$18,$18,$18,$3C,$3C,$00,$00 ; 69
dc.b $00,$00,$0C,$0C,$00,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$7C,$78 ; 6a
dc.b $00,$00,$C0,$C0,$C0,$CC,$DC,$F8,$F0,$F8,$D8,$CC,$CE,$C6,$00,$00 ; 6b
dc.b $00,$00,$38,$38,$18,$18,$18,$18,$18,$18,$18,$18,$3C,$3C,$00,$00 ; 6c
dc.b $00,$00,$00,$00,$00,$6C,$FE,$FE,$D6,$D6,$D6,$C6,$C6,$C6,$00,$00 ; 6d
dc.b $00,$00,$00,$00,$00,$3C,$7E,$66,$66,$66,$66,$66,$66,$66,$00,$00 ; 6e
dc.b $00,$00,$00,$00,$00,$3C,$7E,$66,$66,$66,$66,$66,$7E,$3C,$00,$00 ; 6f
dc.b $00,$00,$00,$00,$00,$7C,$7E,$66,$66,$66,$66,$66,$7E,$7C,$60,$60 ; 70
dc.b $00,$00,$00,$00,$00,$3E,$7E,$66,$66,$66,$66,$66,$7E,$3E,$06,$06 ; 71
dc.b $00,$00,$00,$00,$00,$7C,$7E,$66,$60,$60,$60,$60,$60,$60,$00,$00 ; 72
dc.b $00,$00,$00,$00,$00,$3E,$7E,$60,$70,$3C,$0E,$06,$7E,$7C,$00,$00 ; 73
dc.b $00,$00,$00,$18,$18,$7E,$7E,$18,$18,$18,$18,$18,$1E,$0E,$00,$00 ; 74
dc.b $00,$00,$00,$00,$00,$66,$66,$66,$66,$66,$66,$66,$7E,$3E,$00,$00 ; 75
dc.b $00,$00,$00,$00,$00,$66,$66,$66,$66,$66,$3C,$3C,$18,$18,$00,$00 ; 76
dc.b $00,$00,$00,$00,$00,$C6,$C6,$D6,$D6,$FE,$FE,$EE,$C6,$82,$00,$00 ; 77
dc.b $00,$00,$00,$00,$00,$66,$66,$3C,$3C,$18,$3C,$3C,$66,$66,$00,$00 ; 78
dc.b $00,$00,$00,$00,$00,$66,$66,$66,$66,$66,$66,$7E,$3E,$06,$7E,$7C ; 79
dc.b $00,$00,$00,$00,$00,$7E,$7E,$0C,$18,$18,$30,$30,$7E,$7E,$00,$00 ; 7a
dc.b $00,$0E,$18,$18,$18,$18,$38,$F0,$F0,$38,$18,$18,$18,$18,$0E,$00 ; 7b
dc.b $00,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$00 ; 7c
dc.b $00,$E0,$30,$30,$30,$30,$38,$1E,$1E,$38,$30,$30,$30,$30,$E0,$00 ; 7d
dc.b $00,$00,$00,$00,$00,$62,$F2,$BE,$9C,$00,$00,$00,$00,$00,$00,$00 ; 7e
dc.b $00,$00,$00,$00,$00,$18,$18,$3C,$24,$66,$42,$C3,$FF,$00,$00,$00 ; 7f
endif
disass_buf: dc.b 'nop',0
dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;*********************************************************************
;*********************************************************************
;*********** Beginn 80486 Disassembler ********************
;*********************************************************************
;*********************************************************************
; globale Labels: disass:: und def32::
LABEL_BLOCK
disass::
IF NODIS
move.b #0,(r6.w)
inc.l r5
rts.w
def32:: dc.b 0 ; default address and operand size
ELSE
; Eingabe: r5.l {s3} Zeiger auf zu disassemblierendes Byte
; r6.w {s0} Zeiger auf Text-Puffer fuer disassembl. Befehl
; (Text wird durch 0-Byte abgeschlossen)
; s0 = s6
; Ausgabe: r5.l {s3} Zeiger auf naechstes Byte
;
; Veraendert: r5.l
movem.l r0-r7,-(sp)
move.l r5,-(sp)
eor.l r4,r4 ; offset zu r6
and.l #$ffff,r6 ; high word loeschen
move.b def32,r0
move.b r0,adr32
move.b r0,dat32
move.b #-1,seg
move.w s3,r0
bsr.w out__r0w
move.l #' : ',(r6,r4)
addq.l #3,r4
move.l r5,r0
bsr.w out__r0l
move.l #' ',(r6,r4)
addq.w #3,r4
da1: movu.bl (r5.l){s3},r0
inc.l r5
move.w tab1(r0*2),r0
jmp.w (r0)
tab1: dc.w op_00
dc.w op_01
dc.w op_02
dc.w op_03
dc.w op_04
dc.w op_05
dc.w op_06
dc.w op_07
dc.w op_08
dc.w op_09
dc.w op_0a
dc.w op_0b
dc.w op_0c
dc.w op_0d
dc.w op_0e
dc.w op_0f
dc.w op_10
dc.w op_11
dc.w op_12
dc.w op_13
dc.w op_14
dc.w op_15
dc.w op_16
dc.w op_17
dc.w op_18
dc.w op_19
dc.w op_1a
dc.w op_1b
dc.w op_1c
dc.w op_1d
dc.w op_1e
dc.w op_1f
dc.w op_20
dc.w op_21
dc.w op_22
dc.w op_23
dc.w op_24
dc.w op_25
dc.w op_26
dc.w op_27
dc.w op_28
dc.w op_29
dc.w op_2a
dc.w op_2b
dc.w op_2c
dc.w op_2d
dc.w op_2e
dc.w op_2f
dc.w op_30
dc.w op_31
dc.w op_32
dc.w op_33
dc.w op_34
dc.w op_35
dc.w op_36
dc.w op_37
dc.w op_38
dc.w op_39
dc.w op_3a
dc.w op_3b
dc.w op_3c
dc.w op_3d
dc.w op_3e
dc.w op_3f
dc.w op_40
dc.w op_41
dc.w op_42
dc.w op_43
dc.w op_44
dc.w op_45
dc.w op_46
dc.w op_47
dc.w op_48
dc.w op_49
dc.w op_4a
dc.w op_4b
dc.w op_4c
dc.w op_4d
dc.w op_4e
dc.w op_4f
dc.w op_50
dc.w op_51
dc.w op_52
dc.w op_53
dc.w op_54
dc.w op_55
dc.w op_56
dc.w op_57
dc.w op_58
dc.w op_59
dc.w op_5a
dc.w op_5b
dc.w op_5c
dc.w op_5d
dc.w op_5e
dc.w op_5f
dc.w op_60
dc.w op_61
dc.w op_62
dc.w op_63
dc.w op_64
dc.w op_65
dc.w op_66
dc.w op_67
dc.w op_68
dc.w op_69
dc.w op_6a
dc.w op_6b
dc.w op_6c
dc.w op_6d
dc.w op_6e
dc.w op_6f
dc.w op_70
dc.w op_71
dc.w op_72
dc.w op_73
dc.w op_74
dc.w op_75
dc.w op_76
dc.w op_77
dc.w op_78
dc.w op_79
dc.w op_7a
dc.w op_7b
dc.w op_7c
dc.w op_7d
dc.w op_7e
dc.w op_7f
dc.w op_80
dc.w op_81
dc.w op_82
dc.w op_83
dc.w op_84
dc.w op_85
dc.w op_86
dc.w op_87
dc.w op_88
dc.w op_89
dc.w op_8a
dc.w op_8b
dc.w op_8c
dc.w op_8d
dc.w op_8e
dc.w op_8f
dc.w op_90
dc.w op_91
dc.w op_92
dc.w op_93
dc.w op_94
dc.w op_95
dc.w op_96
dc.w op_97
dc.w op_98
dc.w op_99
dc.w op_9a
dc.w op_9b
dc.w op_9c
dc.w op_9d
dc.w op_9e
dc.w op_9f
dc.w op_a0
dc.w op_a1
dc.w op_a2
dc.w op_a3
dc.w op_a4
dc.w op_a5
dc.w op_a6
dc.w op_a7
dc.w op_a8
dc.w op_a9
dc.w op_aa
dc.w op_ab
dc.w op_ac
dc.w op_ad
dc.w op_ae
dc.w op_af
dc.w op_b0
dc.w op_b1
dc.w op_b2
dc.w op_b3
dc.w op_b4
dc.w op_b5
dc.w op_b6
dc.w op_b7
dc.w op_b8
dc.w op_b9
dc.w op_ba
dc.w op_bb
dc.w op_bc
dc.w op_bd
dc.w op_be
dc.w op_bf
dc.w op_c0
dc.w op_c1
dc.w op_c2
dc.w op_c3
dc.w op_c4
dc.w op_c5
dc.w op_c6
dc.w op_c7
dc.w op_c8
dc.w op_c9
dc.w op_ca
dc.w op_cb
dc.w op_cc
dc.w op_cd
dc.w op_ce
dc.w op_cf
dc.w op_d0
dc.w op_d1
dc.w op_d2
dc.w op_d3
dc.w op_d4
dc.w op_d5
dc.w op_d6
dc.w op_d7
dc.w op_d8
dc.w op_d9
dc.w op_da
dc.w op_db
dc.w op_dc
dc.w op_dd
dc.w op_de
dc.w op_df
dc.w op_e0
dc.w op_e1
dc.w op_e2
dc.w op_e3
dc.w op_e4
dc.w op_e5
dc.w op_e6
dc.w op_e7
dc.w op_e8
dc.w op_e9
dc.w op_ea
dc.w op_eb
dc.w op_ec
dc.w op_ed
dc.w op_ee
dc.w op_ef
dc.w op_f0
dc.w op_f1
dc.w op_f2
dc.w op_f3
dc.w op_f4
dc.w op_f5
dc.w op_f6
dc.w op_f7
dc.w op_f8
dc.w op_f9
dc.w op_fa
dc.w op_fb
dc.w op_fc
dc.w op_fd
dc.w op_fe
dc.w op_ff
op_00: move.l #t_add,r3
br.w mk_adrs
op_01: move.l #t_add,r3
br.w rk_adrs
op_02: move.l #t_add,r3
br.w adrs_mk
op_03: move.l #t_add,r3
br.w adrs_rk
op_04: move.l #t_add,r3
br.w imm8_r0
op_05: move.l #t_add,r3
br.w imm1632_r0
op_06: move.l #t_move,r3
bsr.w out_wltab
move.l #'-,1s',(r6,r4)
move.l #')ps(',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_07: move.l #t_move,r3
bsr.w out_wltab
move.l #')ps(',(r6,r4)
move.l #'1s,+',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_08: move.l #t_or,r3
br.w mk_adrs
op_09: move.l #t_or,r3
br.w rk_adrs
op_0a: move.l #t_or,r3
br.w adrs_mk
op_0b: move.l #t_or,r3
br.w adrs_rk
op_0c: move.l #t_or,r3
br.w imm8_r0
op_0d: move.l #t_or,r3
br.w imm1632_r0
op_0e: move.l #t_move,r3
bsr.w out_wltab
move.l #'-,6s',(r6,r4)
move.l #')ps(',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_0f: movu.bl (r5.l){s3},r0
addq.l #1,r5
move.w tab2(r0*2),r0
jmp.w (r0)
op_10: move.l #t_addc,r3
br.w mk_adrs
op_11: move.l #t_addc,r3
br.w rk_adrs
op_12: move.l #t_addc,r3
br.w adrs_mk
op_13: move.l #t_addc,r3
br.w adrs_rk
op_14: move.l #t_addc,r3
br.w imm8_r0
op_15: move.l #t_addc,r3
br.w imm1632_r0
op_16: move.l #t_move,r3
bsr.w out_wltab
move.l #'-,7s',(r6,r4)
move.l #')ps(',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_17: move.l #t_move,r3
bsr.w out_wltab
move.l #')ps(',(r6,r4)
move.l #'7s,+',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_18: move.l #t_subc,r3
br.w mk_adrs
op_19: move.l #t_subc,r3
br.w rk_adrs
op_1a: move.l #t_subc,r3
br.w adrs_mk
op_1b: move.l #t_subc,r3
br.w adrs_rk
op_1c: move.l #t_subc,r3
br.w imm8_r0
op_1d: move.l #t_subc,r3
br.w imm1632_r0
op_1e: move.l #t_move,r3
bsr.w out_wltab
move.l #'-,0s',(r6,r4)
move.l #')ps(',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_1f: move.l #t_move,r3
bsr.w out_wltab
move.l #')ps(',(r6,r4)
move.l #'0s,+',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_20: move.l #t_and,r3
br.w mk_adrs
op_21: move.l #t_and,r3
br.w rk_adrs
op_22: move.l #t_and,r3
br.w adrs_mk
op_23: move.l #t_and,r3
br.w adrs_rk
op_24: move.l #t_and,r3
br.w imm8_r0
op_25: move.l #t_and,r3
br.w imm1632_r0
op_26: move.b #1,seg
br.w da1
op_27: move.l #_10,r3
br.w string
_10: dc.b 'adj_dec_add@r0',0
op_28: move.l #t_sub,r3
br.w mk_adrs
op_29: move.l #t_sub,r3
br.w rk_adrs
op_2a: move.l #t_sub,r3
br.w adrs_mk
op_2b: move.l #t_sub,r3
br.w adrs_rk
op_2c: move.l #t_sub,r3
br.w imm8_r0
op_2d: move.l #t_sub,r3
br.w imm1632_r0
op_2e: move.b #6,seg
br.w da1
op_2f: move.l #_10,r3
br.w string
_10: dc.b 'adj_dec_sub@r0',0
op_30: move.l #t_eor,r3
br.w mk_adrs
op_31: move.l #t_eor,r3
br.w rk_adrs
op_32: move.l #t_eor,r3
br.w adrs_mk
op_33: move.l #t_eor,r3
br.w adrs_rk
op_34: move.l #t_eor,r3
br.w imm8_r0
op_35: move.l #t_eor,r3
br.w imm1632_r0
op_36: move.b #7,seg
br.w da1
op_37: move.l #_10,r3
br.w string
_10: dc.b 'adj_asc_add@r0',0
op_38: move.l #t_cmp,r3
br.w mk_adrs
op_39: move.l #t_cmp,r3
br.w rk_adrs
op_3a: move.l #t_cmp,r3
br.w adrs_mk
op_3b: move.l #t_cmp,r3
br.w adrs_rk
op_3c: move.l #t_cmp,r3
br.w imm8_r0
op_3d: move.l #t_cmp,r3
br.w imm1632_r0
op_3e: move.b #0,seg
br.w da1
op_3f: move.l #_10,r3
br.w string
_10: dc.b 'adj_asc_sub@r0',0
op_40: move.b #'0',r1
br.b op_4x
op_41: move.b #'2',r1
br.b op_4x
op_42: move.b #'1',r1
br.b op_4x
op_43: move.b #'3',r1
br.b op_4x
op_44: move.b #'7',r1
br.b op_4x
op_45: move.b #'4',r1
br.b op_4x
op_46: move.b #'5',r1
br.b op_4x
op_47: move.b #'6',r1
; br.b op_4x
op_4x: tst.b #$ff,dat32
bne.b _10
move.l #_50,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
br.w dass_end
_10: move.l #_60,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'inc.w@r',0
_60: dc.b 'inc.l@r',0
op_48: move.b #'0',r1
br.b op_4y
op_49: move.b #'2',r1
br.b op_4y
op_4a: move.b #'1',r1
br.b op_4y
op_4b: move.b #'3',r1
br.b op_4y
op_4c: move.b #'7',r1
br.b op_4y
op_4d: move.b #'4',r1
br.b op_4y
op_4e: move.b #'5',r1
br.b op_4y
op_4f: move.b #'6',r1
; br.b op_4y
op_4y: tst.b #$ff,dat32
bne.b _10
move.l #_50,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
br.w dass_end
_10: move.l #_60,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'dec.w@r',0
_60: dc.b 'dec.l@r',0
op_50: move.b #'0',r1
br.b op_5x
op_51: move.b #'2',r1
br.b op_5x
op_52: move.b #'1',r1
br.b op_5x
op_53: move.b #'3',r1
br.b op_5x
op_54: move.b #'7',r1
br.b op_5x
op_55: move.b #'4',r1
br.b op_5x
op_56: move.b #'5',r1
br.b op_5x
op_57: move.b #'6',r1
; br.b op_5x
op_5x: tst.b #$ff,dat32
bne.b _10
move.l #_50,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
move.l #_70,r3
bsr.w out_string
br.w dass_end
_10: move.l #_60,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
move.l #_70,r3
bsr.w out_string
br.w dass_end
_50: dc.b 'move.w@r',0
_60: dc.b 'move.l@r',0
_70: dc.b ',-(sp)',0
op_58: move.b #'0',r1
br.b op_5y
op_59: move.b #'2',r1
br.b op_5y
op_5a: move.b #'1',r1
br.b op_5y
op_5b: move.b #'3',r1
br.b op_5y
op_5c: move.b #'7',r1
br.b op_5y
op_5d: move.b #'4',r1
br.b op_5y
op_5e: move.b #'5',r1
br.b op_5y
op_5f: move.b #'6',r1
; br.b op_5y
op_5y: tst.b #$ff,dat32
bne.b _10
move.l #_50,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
br.w dass_end
_10: move.l #_60,r3
bsr.w out_string
move.w r1,(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'move.w@(sp)+,r',0
_60: dc.b 'move.l@(sp)+,r',0
op_60: tst.b #$ff,dat32
bne.b _10
move.l #_50,r3
br.w string
_10: move.l #_60,r3
br.w string
_50: dc.b 'movem.w@r0-r7,-(sp)',0
_60: dc.b 'movem.l@r0-r7,-(sp)',0
op_61: tst.b #$ff,dat32
bne.b _10
move.l #_50,r3
br.w string
_10: move.l #_60,r3
br.w string
_50: dc.b 'movem.w@(sp)+,r0-r7',0
_60: dc.b 'movem.l@(sp)+,r0-r7',0
op_62: move.l #t_chk,r3
br.w rk_adrs
op_63: move.l #t_arpl,r3
move.b #0,dat32
br.w adrs_rk
op_64: move.b #2,seg
br.w da1
op_65: move.b #3,seg
br.w da1
op_66: move.b def32,r0
not.b r0
move.b r0,dat32
br.w da1
op_67: move.b def32,r0
not.b r0
move.b r0,adr32
br.w da1
op_68: move.l #t_move,r3
tst.b #$ff,dat32
bne.b _10
bsr.w out_wtab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_word
br.b _20
_10: bsr.w out_ltab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_long
_20: move.l #'s(-,',(r6,r4)
move.w #')p',4.b(r6,r4)
addq.w #6,r4
br.w dass_end
op_69: move.l #t_muls,r3
bsr.w out_wltab
bsr.w get_r
move.w r0,-(sp)
bsr.w out_imm1632_adrs
move.w (sp)+,r0
move.w #'r,',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
br.w dass_end
op_6a: move.l #t_moveq,r3
bsr.w out_wltab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_byte
move.l #'s(-,',(r6,r4)
move.w #')p',4.b(r6,r4)
addq.w #6,r4
br.w dass_end
op_6b: move.l #t_mulsq,r3
br.w immq8_adrs_rk
op_6c: move.l #_50,r3
tst.b #$ff,adr32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'in.b@r1,(r6.w)+-{s1}',0
_60: dc.b 'in.b@r1,(r6.l)+-{s1}',0
op_6d: tst.b #$ff,dat32
bne.b _20
move.l #_50,r3
tst.b #$ff,adr32
beq.w string
move.l #_60,r3
br.w string
_20: move.l #_70,r3
tst.b #$ff,adr32
beq.w string
move.l #_80,r3
br.w string
_50: dc.b 'in.w@r1,(r6.w)+-{s1}',0
_60: dc.b 'in.w@r1,(r6.l)+-{s1}',0
_70: dc.b 'in.l@r1,(r6.w)+-{s1}',0
_80: dc.b 'in.l@r1,(r6.l)+-{s1}',0
op_6e: move.l #_50,r3
tst.b #$ff,adr32
beq.b _10
move.l #_60,r3
_10: bsr.w out_string
bsr.w out_seg
move.l #'1r,',(r6,r4)
addq.w #3,r4
br.w dass_end
_50: dc.b 'out.b@(r5.w)+-',0
_60: dc.b 'out.b@(r5.l)+-',0
op_6f: tst.b #$ff,dat32
bne.b _20
move.l #_50,r3
tst.b #$ff,adr32
beq.b _10
move.l #_60,r3
br.b _10
_20: move.l #_70,r3
tst.b #$ff,adr32
beq.b _10
move.l #_80,r3
_10: bsr.w out_string
bsr.w out_seg
move.l #'1r,',(r6,r4)
addq.w #3,r4
br.w dass_end
_50: dc.b 'out.w@(r5.w)+-',0
_60: dc.b 'out.w@(r5.l)+-',0
_70: dc.b 'out.l@(r5.w)+-',0
_80: dc.b 'out.l@(r5.l)+-',0
op_70: move.l #t_bvs,r3
br.w label8
op_71: move.l #t_bvc,r3
br.w label8
op_72: move.l #t_bcs,r3
br.w label8
op_73: move.l #t_bcc,r3
br.w label8
op_74: move.l #t_beq,r3
br.w label8
op_75: move.l #t_bne,r3
br.w label8
op_76: move.l #t_bls,r3
br.w label8
op_77: move.l #t_bhi,r3
br.w label8
op_78: move.l #t_bmi,r3
br.w label8
op_79: move.l #t_bpl,r3
br.w label8
op_7a: move.l #t_bps,r3
br.w label8
op_7b: move.l #t_bpc,r3
br.w label8
op_7c: move.l #t_blt,r3
br.w label8
op_7d: move.l #t_bge,r3
br.w label8
op_7e: move.l #t_ble,r3
br.w label8
op_7f: move.l #t_bgt,r3
br.w label8
op_80: bsr.w get_nr
movu.bl r0,r0
move.w tab5(r0*2),r0
jmp.w (r0)
tab5: dc.w op_80_0
dc.w op_80_1
dc.w op_80_2
dc.w op_80_3
dc.w op_80_4
dc.w op_80_5
dc.w op_80_6
dc.w op_80_7
op_80_0:move.l #t_add,r3
br.w imm8_adrs
op_80_1:move.l #t_or,r3
br.w imm8_adrs
op_80_2:move.l #t_addc,r3
br.w imm8_adrs
op_80_3:move.l #t_subc,r3
br.w imm8_adrs
op_80_4:move.l #t_and,r3
br.w imm8_adrs
op_80_5:move.l #t_sub,r3
br.w imm8_adrs
op_80_6:move.l #t_eor,r3
br.w imm8_adrs
op_80_7:move.l #t_cmp,r3
br.w imm8_adrs
op_81: bsr.w get_nr
movu.bl r0,r0
move.w tab6(r0*2),r0
jmp.w (r0)
tab6: dc.w op_81_0
dc.w op_81_1
dc.w op_81_2
dc.w op_81_3
dc.w op_81_4
dc.w op_81_5
dc.w op_81_6
dc.w op_81_7
op_81_0:move.l #t_add,r3
br.w imm1632_adrs
op_81_1:move.l #t_or,r3
br.w imm1632_adrs
op_81_2:move.l #t_addc,r3
br.w imm1632_adrs
op_81_3:move.l #t_subc,r3
br.w imm1632_adrs
op_81_4:move.l #t_and,r3
br.w imm1632_adrs
op_81_5:move.l #t_sub,r3
br.w imm1632_adrs
op_81_6:move.l #t_eor,r3
br.w imm1632_adrs
op_81_7:move.l #t_cmp,r3
br.w imm1632_adrs
op_82: br.w op_80 ;??????????????
op_83: bsr.w get_nr
movu.bl r0,r0
move.w tab7(r0*2),r0
jmp.w (r0)
tab7: dc.w op_83_0
dc.w op_83_1
dc.w op_83_2
dc.w op_83_3
dc.w op_83_4
dc.w op_83_5
dc.w op_83_6
dc.w op_83_7
op_83_0:move.l #t_addq,r3
br.w immq8_adrs
op_83_1:move.l #t_orq,r3
br.w immq8_adrs
op_83_2:move.l #t_addcq,r3
br.w immq8_adrs
op_83_3:move.l #t_subcq,r3
br.w immq8_adrs
op_83_4:move.l #t_andq,r3
br.w immq8_adrs
op_83_5:move.l #t_subq,r3
br.w immq8_adrs
op_83_6:move.l #t_eorq,r3
br.w immq8_adrs
op_83_7:move.l #t_cmpq,r3
br.w immq8_adrs
op_84: move.l #t_tst,r3
br.w mk_adrs
op_85: move.l #t_tst,r3
br.w rk_adrs
op_86: move.l #t_exg,r3
br.w mk_adrs
op_87: move.l #t_exg,r3
br.w rk_adrs
op_88: move.l #t_move,r3
br.w mk_adrs
op_89: move.l #t_move,r3
br.w rk_adrs
op_8a: move.l #t_move,r3
br.w adrs_mk
op_8b: move.l #t_move,r3
br.w adrs_rk
op_8c: move.l #t_move,r3
bsr.w out_wtab
bsr.w get_s
cmp.b #7,r0
bhi.w dc_byte
move.b #'s',(r6,r4)
inc.w r4
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
move.b #',',(r6,r4)
inc.w r4
move.b #0,op8
bsr.w out_modrm
br.w dass_end
op_8d: move.l #t_lea,r3
br.w adrs_rk
op_8e: move.l #t_move,r3
bsr.w out_wtab
bsr.w get_s
cmp.b #7,r0
bhi.w dc_byte
move.w r0,-(sp)
move.b #0,op8
bsr.w out_modrm
move.w (sp)+,r0
move.b #',',(r6,r4)
inc.w r4
move.b #'s',(r6,r4)
inc.w r4
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
br.w dass_end
op_8f: bsr.w get_nr
cmp.b #0,r0
bne.w dc_byte
move.l #t_move,r3
bsr.w out_wltab
move.l #')ps(',(r6,r4)
move.w #',+',4.b(r6,r4)
addq.w #6,r4
bsr.w out_adrs1632
br.w dass_end
op_90: move.l #_10,r3
br.w string
_10: dc.b 'nop',0
op_91: move.l #'2',r0
br.b op_9x
op_92: move.l #'1',r0
br.b op_9x
op_93: move.l #'3',r0
br.b op_9x
op_94: move.l #'7',r0
br.b op_9x
op_95: move.l #'4',r0
br.b op_9x
op_96: move.l #'5',r0
br.b op_9x
op_97: move.l #'6',r0
op_9x: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: move.w r0,-(sp)
bsr.w out_string
move.w (sp)+,r0
move.b r0,(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'exg.w@r0,r',0
_60: dc.b 'exg.l@r0,r',0
op_98: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'ext.w@r0',0
_60: dc.b 'ext.l@r0',0
op_99: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'ext.w@r0,r0|r1',0
_60: dc.b 'ext.l@r0,r0|r1',0
op_9a:
move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
bsr.w out_ltab
move.l (r5){s3},-(sp)
addq.l #4,r5
bsr.w out_word
move.b #':',(r6,r4)
inc.w r4
move.l (sp)+,r0
bsr.w out_r0l
br.w dass_end
_10: bsr.w out_wtab
move.w (r5){s3},-(sp)
addq.l #2,r5
bsr.w out_word
move.b #':',(r6,r4)
inc.w r4
move.w (sp)+,r0
bsr.w out_r0w
br.w dass_end
_50: dc.b 'jsr.w',0
op_9b: move.l #_10,r3
br.w string
_10: dc.b 'wait',0
op_9c: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'move.w@sr,-(sp)',0
_60: dc.b 'move.l@sr,-(sp)',0
op_9d: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'move.w@(sp)+,sr',0
_60: dc.b 'move.l@(sp)+,sr',0
op_9e: move.l #_10,r3
br.w string
_10: dc.b 'move.b@m0,sr',0
op_9f: move.l #_10,r3
br.w string
_10: dc.b 'move.b@sr,m0',0
op_a0: move.l #t_move,r3
br.w off8_r0
op_a1: move.l #t_move,r3
br.w off1632_r0
op_a2: move.l #t_move,r3
br.w r0_off8
op_a3: move.l #t_move,r3
br.w r0_off1632
op_a4: move.l #t_move,r3
br.w r5_r6_8
op_a5: move.l #t_move,r3
br.w r5_r6_1632
op_a6: move.l #t_cmp,r3
br.w r6_r5_8
op_a7: move.l #t_cmp,r3
br.w r6_r5_1632
op_a8: move.l #t_tst,r3
br.w imm8_r0
op_a9: move.l #t_tst,r3
br.w imm1632_r0
op_aa: move.l #t_move,r3
br.w r0_r6_8
op_ab: move.l #t_move,r3
br.w r0_r6_1632
op_ac: move.l #t_move,r3
br.w r5_r0_8
op_ad: move.l #t_move,r3
br.w r5_r0_1632
op_ae: move.l #t_cmp,r3
br.w r6_r0_8
op_af: move.l #t_cmp,r3
br.w r6_r0_1632
op_b0: move.w #'0r',-(sp)
br.b op_bx
op_b1: move.w #'2r',-(sp)
br.b op_bx
op_b2: move.w #'1r',-(sp)
br.b op_bx
op_b3: move.w #'3r',-(sp)
br.b op_bx
op_b4: move.w #'0m',-(sp)
br.b op_bx
op_b5: move.w #'2m',-(sp)
br.b op_bx
op_b6: move.w #'1m',-(sp)
br.b op_bx
op_b7: move.w #'3m',-(sp)
op_bx: move.l #t_move,r3
bsr.w out_btab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_byte
move.b #',',(r6,r4)
inc.w r4
move.w (sp)+,(r6,r4)
addq.w #2,r4
br.w dass_end
op_b8: move.w #'0r',-(sp)
br.b op_by
op_b9: move.w #'2r',-(sp)
br.b op_by
op_ba: move.w #'1r',-(sp)
br.b op_by
op_bb: move.w #'3r',-(sp)
br.b op_by
op_bc: move.w #'7r',-(sp)
br.b op_by
op_bd: move.w #'4r',-(sp)
br.b op_by
op_be: move.w #'5r',-(sp)
br.b op_by
op_bf: move.w #'6r',-(sp)
op_by: move.l #t_move,r3
tst.b #$ff,dat32
beq.b _10
bsr.w out_ltab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_long
br.b _20
_10: bsr.w out_wtab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_word
_20: move.b #',',(r6,r4)
inc.w r4
move.w (sp)+,(r6,r4)
addq.w #2,r4
br.w dass_end
op_c0: bsr.w get_shift
br.w imm8_adrs
op_c1: bsr.w get_shift
br.w immq8_adrs
op_c2: move.l #t_rts,r3
tst.b #$ff,dat32
bne.b _10
bsr.w out_wtab
br.b _20
_10: bsr.w out_ltab
_20: move.b #'#',(r6,r4)
inc.w r4
bsr.w out_word
br.w dass_end
op_c3: move.l #t_rts,r3
bsr.w out_wltab
br.w dass_end
op_c4: move.b #1,r0
br.w mov_adrs_si_rk
op_c5: move.b #0,r0
br.w mov_adrs_si_rk
op_c6: move.l #t_move,r3
br.w imm8_adrs
op_c7: move.l #t_move,r3
br.w imm1632_adrs
op_c8: move.l #_50,r3
tst.b #$ff,dat32
bne.b _10
move.l #_60,r3
_10: bsr.w out_string
bsr.w out_word
move.w #'#,',(r6,r4)
addq.w #2,r4
bsr.w out_byte
br.w dass_end
_50: dc.b 'link.l@r4,#',0
_60: dc.b 'link.w@r4,#',0
op_c9: move.l #_50,r3
tst.b #$ff,dat32
bne.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'unlk.l@r4',0
_60: dc.b 'unlk.w@r4',0
op_ca: move.l #t_rts,r3
bsr.w out_string
tst.b #$ff,dat32
bne.b _10
move.w #'ww',(r6,r4)
br.b _20
_10: move.w #'ll',(r6,r4)
_20: addq.w #2,r4
bsr.w out_tab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_word
br.w dass_end
op_cb: move.l #t_rts,r3
bsr.w out_string
tst.b #$ff,dat32
bne.b _10
move.w #'ww',(r6,r4)
br.b _20
_10: move.w #'ll',(r6,r4)
_20: addq.w #2,r4
br.w dass_end
op_cc: move.l #_10,r3
br.w string
_10: dc.b 'trap@#3',0
op_cd: move.l #_10,r3
bsr.w out_string
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_byte
br.w dass_end
_10: dc.b 'trap@',0
op_ce: move.l #_10,r3
br.w string
_10: dc.b 'trapv',0
op_cf: move.l #_50,r3
bsr.w out_wltab
br.w dass_end
_50: dc.b 'rte.',0
op_d0: bsr.w get_shift
bsr.w out_btab
move.l #',1#',(r6,r4)
addq.w #3,r4
bsr.w out_adrs8
br.w dass_end
op_d1: bsr.w get_shift
bsr.w out_wltab
move.l #',1#',(r6,r4)
addq.w #3,r4
bsr.w out_adrs1632
br.w dass_end
op_d2: bsr.w get_shift
bsr.w out_btab
move.l #',2r',(r6,r4)
addq.w #3,r4
bsr.w out_adrs8
br.w dass_end
op_d3: bsr.w get_shift
bsr.w out_wltab
move.l #',2r',(r6,r4)
addq.w #3,r4
bsr.w out_adrs1632
br.w dass_end
op_d4: move.l #_50,r3
br.b op_d45
_50: dc.b 'adj_asc_mul@',0
op_d5: move.l #_50,r3
br.b op_d45
_50: dc.b 'adj_asc_div@',0
op_d45: bsr.w out_string
move.b (r5){s3},r0
inc.l r5
cmp.b #$0a,r0
beq.b _10
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_r0b
move.b #',',(r6,r4)
inc.w r4
_10: move.w #'0r',(r6,r4)
addq.w #2,r4
br.w dass_end
op_d6: ; br.w dc_byte
; undokomentierter Befehl; bewirkt, dass das Carry-Flag
; in alle 8 Bits von r0.b uebernommen wird
move.l #_50,r3
bsr.w out_string
br.w dass_end
_50: dc.b 'ext.b@CARRY,r0',0
op_d7: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: bsr.w out_string
bsr.w out_seg
move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
_50: dc.b 'move.b@(r3.w,r0.b)',0
_60: dc.b 'move.b@(r3.l,r0.b)',0
op_d8:
op_d9:
op_da:
op_db:
op_dc:
op_dd:
op_de:
op_df:
move.l #_50,r3
br.w string
_50: dc.b 'Gleitpunktbefehl',0
op_e0: move.l #_50,r3
tst.b #$ff,dat32
beq.b op_ex
move.l #_60,r3
br.b op_ex
_50: dc.b 'dbeq.w@r2,',0
_60: dc.b 'dbeq.l@r2,',0
op_e1: move.l #_50,r3
tst.b #$ff,dat32
beq.b op_ex
move.l #_60,r3
br.b op_ex
_50: dc.b 'dbne.w@r2,',0
_60: dc.b 'dbne.l@r2,',0
op_e2: move.l #_50,r3
tst.b #$ff,adr32
beq.b op_ex
move.l #_60,r3
br.b op_ex
_50: dc.b 'dbf.w@r2,',0
_60: dc.b 'dbf.l@r2,',0
op_ex: bsr.w out_string
bsr.w out_label8
br.w dass_end
op_e3: move.l #_50,r3
tst.b #$ff,dat32
beq.w label8
move.l #_60,r3
br.w label8
_50: dc.b 'beqr2w.',0
_60: dc.b 'beqr2l.',0
op_e4: move.l #t_in,r3
br.w imm8_r0
op_e5: move.l #t_in,r3
bsr.w out_wltab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_byte
move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
op_e6: move.l #_50,r3
bsr.w out_string
bsr.w out_byte
br.w dass_end
_50: dc.b 'out.b@r0,#',0
op_e7: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: bsr.w out_string
bsr.w out_byte
br.w dass_end
_50: dc.b 'out.w@r0,#',0
_60: dc.b 'out.l@r0,#',0
op_e8: move.l #_50,r3
br.w label1632
_50: dc.b 'bsr.',0
op_e9: move.l #t_br,r3
br.w label1632
op_ea: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
bsr.w out_ltab
move.w 4(r5){s3},r0
bsr.w out_r0w
move.b #':',(r6,r4)
inc.w r4
move.l (r5){s3},r0
addq.l #6,r5
bsr.w out_r0l
br.w dass_end
_10: bsr.w out_wtab
move.w 2(r5){s3},r0
bsr.w out_r0w
move.b #':',(r6,r4)
inc.w r4
move.w (r5){s3},r0
addq.l #4,r5
bsr.w out_r0w
br.w dass_end
_50: dc.b 'jmp.w',0
op_eb: move.l #t_br,r3
br.w label8
op_ec: move.l #_50,r3
br.w string
_50: dc.b 'in.b@r1,r0',0
op_ed: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'in.w@r1,r0',0
_60: dc.b 'in.l@r1,r0',0
op_ee: move.l #_50,r3
br.w string
_50: dc.b 'out.b@r0,r1',0
op_ef: move.l #_50,r3
tst.b #$ff,dat32
beq.b _10
move.l #_60,r3
_10: br.w string
_50: dc.b 'out.w@r0,r1',0
_60: dc.b 'out.l@r0,r1',0
op_f0: move.l #_50,r3
br.w string
_50: dc.b 'lock',0
op_f1: br.w dc_byte
op_f2: move.l #_50,r3
br.w string
_50: dc.b 'rep(ne)_r2',0
op_f3: move.l #_50,r3
br.w string
_50: dc.b 'rep(eq)_r2',0
op_f4: move.l #_50,r3
br.w string
_50: dc.b 'halt',0
op_f5: move.l #_50,r3
br.w string
_50: dc.b 'bchg.w@#0,sr',0
op_f6: movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab16(r0*2))
tab16: dc.w op_f6_0
dc.w op_f6_1
dc.w op_f6_2
dc.w op_f6_3
dc.w op_f6_4
dc.w op_f6_5
dc.w op_f6_6
dc.w op_f6_7
op_f6_0:move.l #t_tst,r3
br.w imm8_adrs
op_f6_1:br.w dc_byte
op_f6_2:move.l #t_not,r3
br.w adrs8
op_f6_3:move.l #t_neg,r3
br.w adrs8
op_f6_4:move.l #t_mulu,r3
br.b op_f6_45
op_f6_5:move.l #t_muls,r3
op_f6_45:
bsr.w out_btab
bsr.w out_adrs8
move.l #_50,r3
br.w string
_50: dc.b ',r0,m0|r0',0
op_f6_6:move.l #t_divu,r3
br.b op_f6_67
op_f6_7:move.l #t_divs,r3
op_f6_67:
bsr.w out_btab
bsr.w out_adrs8
move.l #_50,r3
br.w string
_50: dc.b ',m0|r0',0
op_f7: movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab17(r0*2))
tab17: dc.w op_f7_0
dc.w op_f7_1
dc.w op_f7_2
dc.w op_f7_3
dc.w op_f7_4
dc.w op_f7_5
dc.w op_f7_6
dc.w op_f7_7
op_f7_0:move.l #t_tst,r3
br.w imm1632_adrs
op_f7_1:br.w dc_byte
op_f7_2:move.l #t_not,r3
br.w adrs1632
op_f7_3:move.l #t_neg,r3
br.w adrs1632
op_f7_4:move.l #t_mulu,r3
br.b op_f7_45
op_f7_5:move.l #t_muls,r3
op_f7_45:
bsr.w out_wltab
bsr.w out_adrs1632
move.l #_50,r3
br.w string
_50: dc.b ',r0,r1|r0',0
op_f7_6:move.l #t_divu,r3
br.b op_f7_67
op_f7_7:move.l #t_divs,r3
op_f7_67:
bsr.w out_wltab
bsr.w out_adrs1632
move.l #_50,r3
br.w string
_50: dc.b ',r1|r0',0
op_f8: move.l #_50,r3
br.w string
_50: dc.b 'bclr.w@#0,sr',0
op_f9: move.l #_50,r3
br.w string
_50: dc.b 'bset.w@#0,sr',0
op_fa: move.l #_50,r3
br.w string
_50: dc.b 'bclr.w@#9,sr',0
op_fb: move.l #_50,r3
br.w string
_50: dc.b 'bset.w@#9,sr',0
op_fc: move.l #_50,r3
br.w string
_50: dc.b 'bclr.w@#10,sr',0
op_fd: move.l #_50,r3
br.w string
_50: dc.b 'bset.w@#10,sr',0
op_fe: movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab8(r0*2))
tab8: dc.w op_fe_0
dc.w op_fe_1
dc.w op_fe_2
dc.w op_fe_3
dc.w op_fe_4
dc.w op_fe_5
dc.w op_fe_6
dc.w op_fe_7
op_fe_0:move.l #t_inc,r3
br.w adrs8
op_fe_1:move.l #t_dec,r3
br.w adrs8
op_fe_2:
op_fe_3:
op_fe_4:
op_fe_5:
op_fe_6:
op_fe_7:
br.w dc_byte
op_ff: movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab9(r0*2))
tab9: dc.w op_ff_0
dc.w op_ff_1
dc.w op_ff_2
dc.w op_ff_3
dc.w op_ff_4
dc.w op_ff_5
dc.w op_ff_6
dc.w op_ff_7
op_ff_0:move.l #t_inc,r3
br.w adrs1632
op_ff_1:move.l #t_dec,r3
br.w adrs1632
op_ff_2:move.l #t_jsr,r3
bsr.w out_wltab
move.b #'(',(r6,r4)
inc.w r4
bsr.w out_adrs1632
move.b #')',(r6,r4)
inc.w r4
br.w dass_end
op_ff_3:move.l #_50,r3
bsr.w out_wltab
move.b #'(',(r6,r4)
inc.w r4
bsr.w out_adrs1632
move.b #')',(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'jsr.w',0
op_ff_4:move.l #t_jmp,r3
bsr.w out_wltab
move.b #'(',(r6,r4)
inc.w r4
bsr.w out_adrs1632
move.b #')',(r6,r4)
inc.w r4
br.w dass_end
op_ff_5:move.l #_50,r3
bsr.w out_wltab
move.b #'(',(r6,r4)
inc.w r4
bsr.w out_adrs1632
move.b #')',(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'jmp.w',0
op_ff_6:move.l #t_move,r3
bsr.w out_wltab
bsr.w out_adrs1632
move.l #_50,r3
br.w string
_50: dc.b ',-(sp)',0
op_ff_7:
br.w dc_byte
tab2: dc.w op_0f_00
dc.w op_0f_01
dc.w op_0f_02
dc.w op_0f_03
dc.w op_0f_04
dc.w op_0f_05
dc.w op_0f_06
dc.w op_0f_07
dc.w op_0f_08
dc.w op_0f_09
dc.w op_0f_0a
dc.w op_0f_0b
dc.w op_0f_0c
dc.w op_0f_0d
dc.w op_0f_0e
dc.w op_0f_0f
dc.w op_0f_10
dc.w op_0f_11
dc.w op_0f_12
dc.w op_0f_13
dc.w op_0f_14
dc.w op_0f_15
dc.w op_0f_16
dc.w op_0f_17
dc.w op_0f_18
dc.w op_0f_19
dc.w op_0f_1a
dc.w op_0f_1b
dc.w op_0f_1c
dc.w op_0f_1d
dc.w op_0f_1e
dc.w op_0f_1f
dc.w op_0f_20
dc.w op_0f_21
dc.w op_0f_22
dc.w op_0f_23
dc.w op_0f_24
dc.w op_0f_25
dc.w op_0f_26
dc.w op_0f_27
dc.w op_0f_28
dc.w op_0f_29
dc.w op_0f_2a
dc.w op_0f_2b
dc.w op_0f_2c
dc.w op_0f_2d
dc.w op_0f_2e
dc.w op_0f_2f
dc.w op_0f_30
dc.w op_0f_31
dc.w op_0f_32
dc.w op_0f_33
dc.w op_0f_34
dc.w op_0f_35
dc.w op_0f_36
dc.w op_0f_37
dc.w op_0f_38
dc.w op_0f_39
dc.w op_0f_3a
dc.w op_0f_3b
dc.w op_0f_3c
dc.w op_0f_3d
dc.w op_0f_3e
dc.w op_0f_3f
dc.w op_0f_40
dc.w op_0f_41
dc.w op_0f_42
dc.w op_0f_43
dc.w op_0f_44
dc.w op_0f_45
dc.w op_0f_46
dc.w op_0f_47
dc.w op_0f_48
dc.w op_0f_49
dc.w op_0f_4a
dc.w op_0f_4b
dc.w op_0f_4c
dc.w op_0f_4d
dc.w op_0f_4e
dc.w op_0f_4f
dc.w op_0f_50
dc.w op_0f_51
dc.w op_0f_52
dc.w op_0f_53
dc.w op_0f_54
dc.w op_0f_55
dc.w op_0f_56
dc.w op_0f_57
dc.w op_0f_58
dc.w op_0f_59
dc.w op_0f_5a
dc.w op_0f_5b
dc.w op_0f_5c
dc.w op_0f_5d
dc.w op_0f_5e
dc.w op_0f_5f
dc.w op_0f_60
dc.w op_0f_61
dc.w op_0f_62
dc.w op_0f_63
dc.w op_0f_64
dc.w op_0f_65
dc.w op_0f_66
dc.w op_0f_67
dc.w op_0f_68
dc.w op_0f_69
dc.w op_0f_6a
dc.w op_0f_6b
dc.w op_0f_6c
dc.w op_0f_6d
dc.w op_0f_6e
dc.w op_0f_6f
dc.w op_0f_70
dc.w op_0f_71
dc.w op_0f_72
dc.w op_0f_73
dc.w op_0f_74
dc.w op_0f_75
dc.w op_0f_76
dc.w op_0f_77
dc.w op_0f_78
dc.w op_0f_79
dc.w op_0f_7a
dc.w op_0f_7b
dc.w op_0f_7c
dc.w op_0f_7d
dc.w op_0f_7e
dc.w op_0f_7f
dc.w op_0f_80
dc.w op_0f_81
dc.w op_0f_82
dc.w op_0f_83
dc.w op_0f_84
dc.w op_0f_85
dc.w op_0f_86
dc.w op_0f_87
dc.w op_0f_88
dc.w op_0f_89
dc.w op_0f_8a
dc.w op_0f_8b
dc.w op_0f_8c
dc.w op_0f_8d
dc.w op_0f_8e
dc.w op_0f_8f
dc.w op_0f_90
dc.w op_0f_91
dc.w op_0f_92
dc.w op_0f_93
dc.w op_0f_94
dc.w op_0f_95
dc.w op_0f_96
dc.w op_0f_97
dc.w op_0f_98
dc.w op_0f_99
dc.w op_0f_9a
dc.w op_0f_9b
dc.w op_0f_9c
dc.w op_0f_9d
dc.w op_0f_9e
dc.w op_0f_9f
dc.w op_0f_a0
dc.w op_0f_a1
dc.w op_0f_a2
dc.w op_0f_a3
dc.w op_0f_a4
dc.w op_0f_a5
dc.w op_0f_a6
dc.w op_0f_a7
dc.w op_0f_a8
dc.w op_0f_a9
dc.w op_0f_aa
dc.w op_0f_ab
dc.w op_0f_ac
dc.w op_0f_ad
dc.w op_0f_ae
dc.w op_0f_af
dc.w op_0f_b0
dc.w op_0f_b1
dc.w op_0f_b2
dc.w op_0f_b3
dc.w op_0f_b4
dc.w op_0f_b5
dc.w op_0f_b6
dc.w op_0f_b7
dc.w op_0f_b8
dc.w op_0f_b9
dc.w op_0f_ba
dc.w op_0f_bb
dc.w op_0f_bc
dc.w op_0f_bd
dc.w op_0f_be
dc.w op_0f_bf
dc.w op_0f_c0
dc.w op_0f_c1
dc.w op_0f_c2
dc.w op_0f_c3
dc.w op_0f_c4
dc.w op_0f_c5
dc.w op_0f_c6
dc.w op_0f_c7
dc.w op_0f_c8
dc.w op_0f_c9
dc.w op_0f_ca
dc.w op_0f_cb
dc.w op_0f_cc
dc.w op_0f_cd
dc.w op_0f_ce
dc.w op_0f_cf
dc.w op_0f_d0
dc.w op_0f_d1
dc.w op_0f_d2
dc.w op_0f_d3
dc.w op_0f_d4
dc.w op_0f_d5
dc.w op_0f_d6
dc.w op_0f_d7
dc.w op_0f_d8
dc.w op_0f_d9
dc.w op_0f_da
dc.w op_0f_db
dc.w op_0f_dc
dc.w op_0f_dd
dc.w op_0f_de
dc.w op_0f_df
dc.w op_0f_e0
dc.w op_0f_e1
dc.w op_0f_e2
dc.w op_0f_e3
dc.w op_0f_e4
dc.w op_0f_e5
dc.w op_0f_e6
dc.w op_0f_e7
dc.w op_0f_e8
dc.w op_0f_e9
dc.w op_0f_ea
dc.w op_0f_eb
dc.w op_0f_ec
dc.w op_0f_ed
dc.w op_0f_ee
dc.w op_0f_ef
dc.w op_0f_f0
dc.w op_0f_f1
dc.w op_0f_f2
dc.w op_0f_f3
dc.w op_0f_f4
dc.w op_0f_f5
dc.w op_0f_f6
dc.w op_0f_f7
dc.w op_0f_f8
dc.w op_0f_f9
dc.w op_0f_fa
dc.w op_0f_fb
dc.w op_0f_fc
dc.w op_0f_fd
dc.w op_0f_fe
dc.w op_0f_ff
op_0f_00:
movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab20(r0*2))
tab20: dc.w op_0f_00_0
dc.w op_0f_00_1
dc.w op_0f_00_2
dc.w op_0f_00_3
dc.w op_0f_00_4
dc.w op_0f_00_5
dc.w op_0f_00_6
dc.w op_0f_00_7
op_0f_00_0:
move.l #_50,r3
bsr.w out_string
bsr.w out_adrs1632
br.w dass_end
_50: dc.b 'move.w@ldtr,',0
op_0f_00_1:
move.l #_50,r3
bsr.w out_string
bsr.w out_adrs1632
br.w dass_end
_50: dc.b 'move.w@tr,',0
op_0f_00_2:
move.l #t_move,r3
bsr.w out_wtab
bsr.w out_adrs1632
move.l #'tdl,',(r6,r4)
move.b #'r',4.b(r6,r4)
addq.w #5,r4
br.w dass_end
op_0f_00_3:
move.l #t_move,r3
bsr.w out_wtab
bsr.w out_adrs1632
move.l #'rt,',(r6,r4)
addq.w #3,r4
br.w dass_end
op_0f_00_4:
move.l #_50,r3
bsr.w out_wtab
bsr.w out_adrs1632
br.w dass_end
_50: dc.b 'verr.',0
op_0f_00_5:
move.l #_50,r3
bsr.w out_wtab
bsr.w out_adrs1632
br.w dass_end
_50: dc.b 'verw.',0
op_0f_00_6:
op_0f_00_7:
br.w dc_byte
op_0f_01:
movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab21(r0*2))
tab21: dc.w op_0f_01_0
dc.w op_0f_01_1
dc.w op_0f_01_2
dc.w op_0f_01_3
dc.w op_0f_01_4
dc.w op_0f_01_5
dc.w op_0f_01_6
dc.w op_0f_01_7
op_0f_01_0:
move.l #t_move,r3
bsr.w out_wltab
move.l #'rtdg',(r6,r4)
move.b #',',4.b(r6,r4)
addq.w #5,r4
bsr.w out_adrs1632
br.w dass_end
op_0f_01_1:
move.l #t_move,r3
bsr.w out_wltab
move.l #'rtdi',(r6,r4)
move.b #',',4.b(r6,r4)
addq.w #5,r4
bsr.w out_adrs1632
br.w dass_end
op_0f_01_2:
move.l #t_move,r3
bsr.w out_wltab
bsr.w out_adrs1632
move.l #'tdg,',(r6,r4)
move.b #'r',4.b(r6,r4)
addq.w #5,r4
br.w dass_end
op_0f_01_3:
move.l #t_move,r3
bsr.w out_wltab
bsr.w out_adrs1632
move.l #'tdi,',(r6,r4)
move.w #'r',4.b(r6,r4)
addq.w #5,r4
br.w dass_end
op_0f_01_4:
move.l #_50,r3
bsr.w out_string
bsr.w out_adrs1632
br.w dass_end
_50: dc.b 'move.w cr0,',0
op_0f_01_5:
br.w dc_byte
op_0f_01_6:
move.l #t_move,r3
bsr.w out_wtab
bsr.w out_adrs1632
move.l #'0rc,',(r6,r4)
addq.l #4,r4
br.w dass_end
op_0f_01_7:
br.w dc_byte
op_0f_02:
move.l #_50,r3
br.w adrs_rk
_50: dc.b 'lar.',0
op_0f_03:
move.l #_50,r3
br.w adrs_rk
_50: dc.b 'ldsl.',0
op_0f_04:
op_0f_05:
br.w dc_byte
op_0f_06:
move.l #_50,r3
br.w string
_50: dc.b 'bclr.w@#3,cr0',0
op_0f_07:
br.w dc_byte
op_0f_08:
move.l #_50,r3
br.w string
_50: dc.b 'invl_cache',0
op_0f_09:
move.l #_50,r3
br.w string
_50: dc.b 'invl_cache_wb',0
op_0f_0a:
op_0f_0b:
op_0f_0c:
op_0f_0d:
op_0f_0e:
op_0f_0f:
op_0f_10:
op_0f_11:
op_0f_12:
op_0f_13:
op_0f_14:
op_0f_15:
op_0f_16:
op_0f_17:
op_0f_18:
op_0f_19:
op_0f_1a:
op_0f_1b:
op_0f_1c:
op_0f_1d:
op_0f_1e:
op_0f_1f:
br.w dc_byte
op_0f_20:
move.w #'c',-(sp)
br.w xrj_rk
op_0f_21:
move.w #'d',-(sp)
br.w xrj_rk
op_0f_22:
move.w #'c',-(sp)
br.w rk_xrj
op_0f_23:
move.w #'d',-(sp)
br.w rk_xrj
op_0f_24:
move.w #'t',-(sp)
br.w xrj_rk
op_0f_25:
br.w dc_byte
op_0f_26:
move.w #'t',-(sp)
br.w rk_xrj
op_0f_27:
op_0f_28:
op_0f_29:
op_0f_2a:
op_0f_2b:
op_0f_2c:
op_0f_2d:
op_0f_2e:
op_0f_2f:
op_0f_30:
op_0f_31:
op_0f_32:
op_0f_33:
op_0f_34:
op_0f_35:
op_0f_36:
op_0f_37:
op_0f_38:
op_0f_39:
op_0f_3a:
op_0f_3b:
op_0f_3c:
op_0f_3d:
op_0f_3e:
op_0f_3f:
op_0f_40:
op_0f_41:
op_0f_42:
op_0f_43:
op_0f_44:
op_0f_45:
op_0f_46:
op_0f_47:
op_0f_48:
op_0f_49:
op_0f_4a:
op_0f_4b:
op_0f_4c:
op_0f_4d:
op_0f_4e:
op_0f_4f:
op_0f_50:
op_0f_51:
op_0f_52:
op_0f_53:
op_0f_54:
op_0f_55:
op_0f_56:
op_0f_57:
op_0f_58:
op_0f_59:
op_0f_5a:
op_0f_5b:
op_0f_5c:
op_0f_5d:
op_0f_5e:
op_0f_5f:
op_0f_60:
op_0f_61:
op_0f_62:
op_0f_63:
op_0f_64:
op_0f_65:
op_0f_66:
op_0f_67:
op_0f_68:
op_0f_69:
op_0f_6a:
op_0f_6b:
op_0f_6c:
op_0f_6d:
op_0f_6e:
op_0f_6f:
op_0f_70:
op_0f_71:
op_0f_72:
op_0f_73:
op_0f_74:
op_0f_75:
op_0f_76:
op_0f_77:
op_0f_78:
op_0f_79:
op_0f_7a:
op_0f_7b:
op_0f_7c:
op_0f_7d:
op_0f_7e:
op_0f_7f:
br.w dc_byte
op_0f_80:
move.l #t_bvs,r3
br.w label1632
op_0f_81:
move.l #t_bvc,r3
br.w label1632
op_0f_82:
move.l #t_bcs,r3
br.w label1632
op_0f_83:
move.l #t_bcc,r3
br.w label1632
op_0f_84:
move.l #t_beq,r3
br.w label1632
op_0f_85:
move.l #t_bne,r3
br.w label1632
op_0f_86:
move.l #t_bls,r3
br.w label1632
op_0f_87:
move.l #t_bhi,r3
br.w label1632
op_0f_88:
move.l #t_bmi,r3
br.w label1632
op_0f_89:
move.l #t_bpl,r3
br.w label1632
op_0f_8a:
move.l #t_bps,r3
br.w label1632
op_0f_8b:
move.l #t_bpc,r3
br.w label1632
op_0f_8c:
move.l #t_blt,r3
br.w label1632
op_0f_8d:
move.l #t_bge,r3
br.w label1632
op_0f_8e:
move.l #t_ble,r3
br.w label1632
op_0f_8f:
move.l #t_bgt,r3
br.w label1632
op_0f_90:
move.l #t_svs,r3
br.w adrs8
op_0f_91:
move.l #t_svc,r3
br.w adrs8
op_0f_92:
move.l #t_scs,r3
br.w adrs8
op_0f_93:
move.l #t_scc,r3
br.w adrs8
op_0f_94:
move.l #t_seq,r3
br.w adrs8
op_0f_95:
move.l #t_sne,r3
br.w adrs8
op_0f_96:
move.l #t_sls,r3
br.w adrs8
op_0f_97:
move.l #t_shi,r3
br.w adrs8
op_0f_98:
move.l #t_smi,r3
br.w adrs8
op_0f_99:
move.l #t_spl,r3
br.w adrs8
op_0f_9a:
move.l #t_sps,r3
br.w adrs8
op_0f_9b:
move.l #t_spc,r3
br.w adrs8
op_0f_9c:
move.l #t_slt,r3
br.w adrs8
op_0f_9d:
move.l #t_sge,r3
br.w adrs8
op_0f_9e:
move.l #t_sle,r3
br.w adrs8
op_0f_9f:
move.l #t_sgt,r3
br.w adrs8
op_0f_a0:
move.l #t_move,r3
bsr.w out_wltab
move.l #'-,2s',(r6,r4)
move.l #')ps(',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_0f_a1:
move.l #t_move,r3
bsr.w out_wltab
move.l #')ps(',(r6,r4)
move.l #'2s,+',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_0f_a2:
br.w dc_byte
op_0f_a3:
move.l #t_btst,r3
br.w rk_adrs
op_0f_a4:
move.l #t_dsl,r3
bsr.w out_wltab
bsr.w get_r
move.w r0,-(sp)
bsr.w out_immq8_adrs
move.w (sp)+,r0
move.w #'r<',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
br.w dass_end
op_0f_a5:
move.l #t_dsl,r3
bsr.w out_wltab
move.l #',2r',(r6,r4)
addq.w #3,r4
bsr.w get_r
move.w r0,-(sp)
bsr.w out_adrs1632
bsr.w get_r
move.w r0,-(sp)
bsr.w out_immq8_adrs
move.w (sp)+,r0
move.w #'r<',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
br.w dass_end
op_0f_a6:
move.l t_cas,r3
bsr.w out_btab
move.l #',0r',(r6,r4)
addq.w #3,r4
bsr.w out_mk_adrs
br.w dass_end
op_0f_a7:
move.l t_cas,r3
bsr.w out_wltab
move.l #',0r',(r6,r4)
addq.w #3,r4
bsr.w out_rk_adrs
br.w dass_end
op_0f_a8:
move.l #t_move,r3
bsr.w out_wltab
move.l #'-,3s',(r6,r4)
move.l #')ps(',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_0f_a9:
move.l #t_move,r3
bsr.w out_wltab
move.l #')ps(',(r6,r4)
move.l #'3s,+',4.b(r6,r4)
addq.w #8,r4
br.w dass_end
op_0f_aa:
br.w dc_byte
op_0f_ab:
move.l #t_bset,r3
br.w rk_adrs
op_0f_ac:
move.l #t_dsr,r3
bsr.w out_wltab
bsr.w get_r
move.w r0,-(sp)
bsr.w out_immq8_adrs
move.w (sp)+,r0
move.w #'r>',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
br.w dass_end
op_0f_ad:
move.l #t_dsr,r3
bsr.w out_wltab
move.l #',2r',(r6,r4)
addq.w #3,r4
bsr.w get_r
move.w r0,-(sp)
bsr.w out_adrs1632
bsr.w get_r
move.w r0,-(sp)
bsr.w out_immq8_adrs
move.w (sp)+,r0
move.w #'r>',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
br.w dass_end
op_0f_ae:
br.w dc_byte
op_0f_af:
move.l #t_muls,r3
bsr.w out_wltab
bsr.w out_adrs_rk
move.l -3.b(r6,r4),r0
move.l r0,(r6,r4)
addq.w #3,r4
br.w dass_end
op_0f_b0:
op_0f_b1:
br.w dc_byte
op_0f_b2:
move.b #7,r0
br.w mov_adrs_si_rk
op_0f_b3:
move.l #t_bclr,r3
br.w rk_adrs
op_0f_b4:
move.b #2,r0
br.w mov_adrs_si_rk
op_0f_b5:
move.b #3,r0
br.w mov_adrs_si_rk
op_0f_b6:
move.l #_50,r3
br.w adrs8_rk
_50: dc.b 'muvu.b',0
op_0f_b7:
move.l #_50,r3
br.w adrs_rk
_50: dc.b 'muvu.w',0
op_0f_b8:
op_0f_b9:
br.w dc_byte
op_0f_ba:
movu.bl (r5){s3},r0
lsr.b #3,r0
and.b #7,r0
jmp.w (tab31(r0*2))
tab31: dc.w op_0f_ba_0
dc.w op_0f_ba_1
dc.w op_0f_ba_2
dc.w op_0f_ba_3
dc.w op_0f_ba_4
dc.w op_0f_ba_5
dc.w op_0f_ba_6
dc.w op_0f_ba_7
op_0f_ba_0:
op_0f_ba_1:
op_0f_ba_2:
op_0f_ba_3:
br.w dc_byte
op_0f_ba_4:
move.l #t_btst,r3
br.w immq8_adrs
op_0f_ba_5:
move.l #t_bset,r3
br.w immq8_adrs
op_0f_ba_6:
move.l #t_bclr,r3
br.w immq8_adrs
op_0f_ba_7:
move.l #t_bchg,r3
br.w immq8_adrs
op_0f_bb:
move.l #t_bchg,r3
br.w rk_adrs
op_0f_bc:
move.l #t_bscf,r3
br.w adrs_rk
op_0f_bd:
move.l #t_bscr,r3
br.w adrs_rk
op_0f_be:
move.l #_50,r3
br.w adrs8_rk
_50: dc.b 'muvs.b',0
op_0f_bf:
move.l #_50,r3
br.w adrs_rk
_50: dc.b 'muvs.w',0
op_0f_c0:
move.l #t_xadd,r3
br.w mk_adrs
op_0f_c1:
move.l #t_xadd,r3
br.w rk_adrs
op_0f_c2:
op_0f_c3:
op_0f_c4:
op_0f_c5:
op_0f_c6:
op_0f_c7:
br.w dc_byte
op_0f_c8:
move.w #'0',-(sp)
br.b op_0f_cx
op_0f_c9:
move.w #'2',-(sp)
br.b op_0f_cx
op_0f_ca:
move.w #'1',-(sp)
br.b op_0f_cx
op_0f_cb:
move.w #'3',-(sp)
br.b op_0f_cx
op_0f_cc:
move.w #'7',-(sp)
br.b op_0f_cx
op_0f_cd:
move.w #'4',-(sp)
br.b op_0f_cx
op_0f_ce:
move.w #'5',-(sp)
br.b op_0f_cx
op_0f_cf:
move.w #'6',-(sp)
; br.b op_0f_cx
op_0f_cx:
move.l #_50,r3
bsr.w out_string
move.w (sp)+,r0
move.w r0,(r6,r4)
inc.w r4
br.w dass_end
_50: dc.b 'bswap.l r',0
op_0f_d0:
op_0f_d1:
op_0f_d2:
op_0f_d3:
op_0f_d4:
op_0f_d5:
op_0f_d6:
op_0f_d7:
op_0f_d8:
op_0f_d9:
op_0f_da:
op_0f_db:
op_0f_dc:
op_0f_dd:
op_0f_de:
op_0f_df:
op_0f_e0:
op_0f_e1:
op_0f_e2:
op_0f_e3:
op_0f_e4:
op_0f_e5:
op_0f_e6:
op_0f_e7:
op_0f_e8:
op_0f_e9:
op_0f_ea:
op_0f_eb:
op_0f_ec:
op_0f_ed:
op_0f_ee:
op_0f_ef:
op_0f_f0:
op_0f_f1:
op_0f_f2:
op_0f_f3:
op_0f_f4:
op_0f_f5:
op_0f_f6:
op_0f_f7:
op_0f_f8:
op_0f_f9:
op_0f_fa:
op_0f_fb:
op_0f_fc:
op_0f_fd:
op_0f_fe:
op_0f_ff:
br.w dc_byte
;******************************************************
def32:: dc.b 0 ; default address and operand size
adr32: dc.b 0 ; address size fuer akt. Befehl
dat32: dc.b 0 ; operand size fuer akt. Befehl
seg: dc.b -1 ; Segmentoverride
op8: dc.b 0 ; Bytebefehl zu Unterscheidung von rk und mk
;******************************************************
string: bsr.w out_string
br.w dass_end
adrs8:
bsr.w out_btab
bsr.w out_adrs8
br.w dass_end
adrs1632:
bsr.w out_wltab
bsr.w out_adrs1632
br.w dass_end
adrs_rk:
bsr.w out_wltab
bsr.w out_adrs_rk
br.w dass_end
adrs8_rk:
bsr.w out_wltab
bsr.w out_adrs8_rk
br.w dass_end
adrs_mk:
bsr.w out_btab
bsr.w out_adrs_mk
br.w dass_end
rk_adrs:
bsr.w out_wltab
bsr.w out_rk_adrs
br.w dass_end
mk_adrs:
bsr.w out_btab
bsr.w out_mk_adrs
br.w dass_end
off8_r0:
bsr.w out_btab
br.b off81632_r0
off1632_r0:
bsr.w out_wltab
off81632_r0:
_30: tst.b #$ff,adr32
beq.b _40
bsr.w out_long
br.b _50
_40: bsr.w out_word
_50: bsr.w out_seg
move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
r0_off8:
bsr.w out_btab
br.b r0_off81632
r0_off1632:
bsr.w out_wltab
r0_off81632:
move.l #',0r',(r6,r4)
addq.w #3,r4
tst.b #$ff,adr32
beq.b _40
bsr.w out_long
br.b _50
_40: bsr.w out_word
_50: bsr.w out_seg
br.w dass_end
r5_r6_8:bsr.w out_btab
br.b r5_r6_81632
r5_r6_1632:
bsr.w out_wltab
r5_r6_81632:
tst.b #$ff,adr32
bne.b _40
move.l #_50,r3
bsr.w out_string
bsr.w out_seg
move.l #_51,r3
br.w string
_40: move.l #_60,r3
bsr.w out_string
bsr.w out_seg
move.l #_61,r3
br.w string
_50: dc.b '(r5.w)+-',0
_51: dc.b ',(r6.w)+-{s1}',0
_60: dc.b '(r5)+-',0
_61: dc.b ',(r6)+-{s1}',0
r6_r5_8:bsr.w out_btab
br.b r6_r5_81632
r6_r5_1632:
bsr.w out_wltab
r6_r5_81632:
tst.b #$ff,adr32
bne.b _40
move.l #_50,r3
bsr.w out_string
bsr.w out_seg
br.w dass_end
_40: move.l #_60,r3
bsr.w out_string
bsr.w out_seg
br.w dass_end
_50: dc.b '(r6.w)+-{s1},(r5.w)+-',0
_60: dc.b '(r6)+-{s1},(r5)+-',0
r0_r6_8:bsr.w out_btab
br.b r0_r6_81632
r0_r6_1632:
bsr.w out_wltab
r0_r6_81632:
tst.b #$ff,adr32
bne.b _40
move.l #_50,r3
bsr.w out_string
bsr.w out_seg
move.l #_51,r3
br.w string
_40: move.l #_60,r3
bsr.w out_string
bsr.w out_seg
move.l #_61,r3
br.w string
_50: dc.b 'r0',0
_51: dc.b ',(r6.w)+-{s1}',0
_60: dc.b 'r0',0
_61: dc.b ',(r6)+-{s1}',0
r5_r0_8:bsr.w out_btab
br.b r5_r0_81632
r5_r0_1632:
bsr.w out_wltab
r5_r0_81632:
tst.b #$ff,adr32
bne.b _40
move.l #_50,r3
bsr.w out_string
bsr.w out_seg
br.b _30
_40: move.l #_60,r3
bsr.w out_string
bsr.w out_seg
_30: move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
_50: dc.b '(r5.w)+-',0
_60: dc.b '(r5)+-',0
r6_r0_8:bsr.w out_btab
br.b r6_r0_81632
r6_r0_1632:
bsr.w out_wltab
r6_r0_81632:
move.l #_60,r3
tst.b #$ff,adr32
bne.w string
move.l #_50,r3
br.w string
_50: dc.b '(r6.w)+-{s1},r0',0
_60: dc.b '(r6)+-{s1},r0',0
xrj_rk:
move.l #t_move,r3
bsr.w out_ltab
move.w (sp)+,r0
move.b r0,(r6,r4)
inc.w r4
move.b #'r',(r6,r4)
inc.w r4
bsr.w get_nr
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
move.w #'r,',(r6,r4)
addq.w #2,r4
move.b (r5){s3},r0
inc.l r5
cmp.b #$c0,r0
blo.w out_byte
and.b #$07,r0
add.b #'0',r0
move.b r0,(r4,r6)
inc.w r4
br.w dass_end
rk_xrj:
move.l #t_move,r3
bsr.w out_ltab
move.w (sp)+,r1
move.b #'r',(r6,r4)
inc.w r4
move.b (r5){s3},r0
cmp.b #$c0,r0
blo.w out_byte
and.b #$07,r0
add.b #'0',r0
move.b r0,(r4,r6)
inc.w r4
move.b #',',(r6,r4)
inc.w r4
move.b r1,(r4,r6)
inc.w r4
move.b #'r',(r6,r4)
inc.w r4
bsr.w get_nr
inc.l r5
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
br.w dass_end
imm8_r0:bsr.w out_btab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_byte
move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
imm1632_r0:
tst.b #$ff,dat32
bne.b _10
bsr.w out_wtab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_word
move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
_10: bsr.w out_ltab
move.b #'#',(r6,r4)
inc.w r4
bsr.w out_long
move.l #'0r,',(r6,r4)
addq.w #3,r4
br.w dass_end
immq8_adrs_rk:
bsr.w out_wltab
bsr.w get_r
move.w r0,-(sp)
bsr.w out_immq8_adrs
move.w (sp)+,r0
move.w #'r,',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
br.w dass_end
imm1632_adrs:
bsr.w out_wltab
bsr.w out_imm1632_adrs
br.w dass_end
immq8_adrs:
bsr.w out_wltab
bsr.w out_immq8_adrs
br.w dass_end
imm8_adrs:
bsr.w out_btab
bsr.w out_imm8_adrs
br.w dass_end
label8:
bsr.w out_btab
bsr.w out_label8
br.w dass_end
label1632:
tst.b #$ff,dat32
beq.b _10
bsr.w out_ltab
move.l (r5){s3},r0
addq.l #4,r5
add.l r5,r0
bsr.w out_r0l
br.w dass_end
_10: bsr.w out_wtab
movs.wl (r5){s3},r0
addq.l #2,r5
add.l r5,r0
bsr.w out_r0w
br.w dass_end
mov_adrs_si_rk:
move.w r0,-(sp)
move.l #t_move,r3
bsr.w out_wltab
bsr.w get_r
move.w r0,-(sp)
bsr.w out_adrs1632
move.w #'s,',(r6,r4)
addq.w #2,r4
move.w (sp)+,r0
move.w (sp)+,r1
add.b #'0',r1
move.b r1,(r6,r4)
inc.w r4
move.w #'r|',(r6,r4)
addq.w #2,r4
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
br.w dass_end
;*******************************************************
get_nr:
move.b (r5){s3},r0
lsr.b #3,r0
and.b #$07,r0
rts.w
get_r: move.b (r5){s3},r0
lsr.b #3,r0
andq.l #$07,r0
move.b tab10(r0),r0
rts.w
tab10: dc.b 0,2,1,3,7,4,5,6 ; wird auch von sib benuetzt
get_m: move.b (r5){s3},r0
lsr.b #3,r0
andq.l #$07,r0
move.b tab11(r0),r0
rts.w
tab11: dc.b 0,2,1,3,4,6,5,7
get_s: move.b (r5){s3},r0
lsr.b #3,r0
andq.l #$07,r0
move.b tab12(r0),r0
rts.w
tab12: dc.b 1,6,7,0,2,3,'?'-'0','?'-'0'
get_shift:
move.b (r5){s3},r0
lsr.b #3,r0
andq.l #$07,r0
move.l tab13(r0*4),r3
rts.w
tab13: dc.l t_rol
dc.l t_ror
dc.l t_rocl
dc.l t_rocr
dc.l t_lsl
dc.l t_lsr
dc.l t_asl
dc.l t_asr
out_adrs_rk:
bsr.w get_r
move.b #0,op8
br.b out_adrs_rmk
out_adrs8_rk:
bsr.w get_r
move.b #-1,op8
br.b out_adrs_rmk
out_adrs_mk:
bsr.w get_m
move.b #-1,op8
out_adrs_rmk:
move.w r0,-(sp)
bsr.w out_modrm
move.w (sp)+,r0
move.b #',',(r6,r4)
inc.w r4
move.b #'r',(r6,r4)
tst.b #$ff,op8
beq.b _10
cmp.b #4,r0
blo.b _10
move.b #'m',(r6,r4)
sub.b #4,r0
_10: inc.w r4
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
rts.w
out_rk_adrs:
bsr.w get_r
move.b #0,op8
br.b out_rmk_adrs
out_mk_adrs:
bsr.w get_m
move.b #-1,op8
out_rmk_adrs:
move.b #'r',(r6,r4)
tst.b #$ff,op8
beq.b _10
cmp.b #4,r0
blo.b _10
move.b #'m',(r6,r4)
sub.b #4,r0
_10: inc.w r4
add.b #'0',r0
move.b r0,(r6,r4)
inc.w r4
move.b #',',(r6,r4)
inc.w r4
bsr.w out_modrm
rts.w
out_imm1632_adrs:
move.b #'#',(r6,r4)
inc.w r4
move.l r4,-(sp)
addq.w #5,r4
tst.b #$ff,dat32
beq.b _20
addq.w #4,r4
_20: move.b #',',(r6,r4)
inc.w r4
move.b #0,op8
bsr.w out_modrm
move.l r4,r0
move.l (sp)+,r4
move.l r0,-(sp)
tst.b #$ff,dat32
bne.b _30
move.w (r5){s3},r0
addq.l #2,r5
bsr.w out_r0w
br.b _100
_30: move.l (r5){s3},r0
addq.l #4,r5
bsr.w out_r0l
_100: move.l (sp)+,r4
rts.w
out_immq8_adrs:
move.b #'#',(r6,r4)
inc.w r4
move.l r4,-(sp)
addq.w #3,r4
move.b #',',(r6,r4)
inc.w r4
move.b #0,op8
bsr.w out_modrm
move.l r4,r0
move.l (sp)+,r4
move.l r0,-(sp)
move.b (r5){s3},r0
inc.l r5
bsr.w out_r0b
move.l (sp)+,r4
rts.w
out_imm8_adrs:
move.b #'#',(r6,r4)
inc.w r4
move.l r4,-(sp)
addq.w #3,r4
move.b #',',(r6,r4)
inc.w r4
move.b #-1,op8
bsr.w out_modrm
move.l r4,r0
move.l (sp)+,r4
move.l r0,-(sp)
move.b (r5){s3},r0
inc.l r5
bsr.w out_r0b
move.l (sp)+,r4
rts.w
out_label8:
movs.bl (r5){s3},r0
inc.l r5
add.l r5,r0
tst.b #$ff,dat32
beq.b _10
bsr.w out_r0l
rts.w
_10: bsr.w out_r0w
rts.w
out_adrs8:
move.b #-1,op8
br.b out_modrm
out_adrs1632:
move.b #0,op8
out_modrm:
movu.bl (r5){s3},r0
inc.l r5
ror.w #3,r0
lsr.b #3,r0
rol.w #3,r0
tst.b #$ff,adr32
bne.w _10
move.w tab3(r0*2),r0
jmp.w (r0)
_10: move.w tab4(r0*2),r0
jmp.w (r0)
tab3: dc.w mod16_00
dc.w mod16_01
dc.w mod16_02
dc.w mod16_03
dc.w mod16_04
dc.w mod16_05
dc.w mod16_06
dc.w mod16_07
dc.w mod16_10
dc.w mod16_11
dc.w mod16_12
dc.w mod16_13
dc.w mod16_14
dc.w mod16_15
dc.w mod16_16
dc.w mod16_17
dc.w mod16_20
dc.w mod16_21
dc.w mod16_22
dc.w mod16_23
dc.w mod16_24
dc.w mod16_25
dc.w mod16_26
dc.w mod16_27
dc.w mod16_30
dc.w mod16_31
dc.w mod16_32
dc.w mod16_33
dc.w mod16_34
dc.w mod16_35
dc.w mod16_36
dc.w mod16_37
tab4: dc.w mod32_00
dc.w mod32_01
dc.w mod32_02
dc.w mod32_03
dc.w mod32_04
dc.w mod32_05
dc.w mod32_06
dc.w mod32_07
dc.w mod32_10
dc.w mod32_11
dc.w mod32_12
dc.w mod32_13
dc.w mod32_14
dc.w mod32_15
dc.w mod32_16
dc.w mod32_17
dc.w mod32_20
dc.w mod32_21
dc.w mod32_22
dc.w mod32_23
dc.w mod32_24
dc.w mod32_25
dc.w mod32_26
dc.w mod32_27
dc.w mod32_30
dc.w mod32_31
dc.w mod32_32
dc.w mod32_33
dc.w mod32_34
dc.w mod32_35
dc.w mod32_36
dc.w mod32_37
mod16_00:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b '(r3.w,r5.w)',0
mod16_01:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b '(r3.w,r6.w)',0
mod16_02:
move.l #_10,r3
bsr.w out_string
tst.b #$ff,seg
bpl.w out_seg
move.b #7,seg
br.w out_seg
_10: dc.b '(r4.w,r5.w)',0
mod16_03:
move.l #_10,r3
bsr.w out_string
tst.b #$ff,seg
bpl.w out_seg
move.b #7,seg
br.w out_seg
_10: dc.b '(r4.w,r6.w)',0
mod16_04:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b '(r5.w)',0
mod16_05:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b '(r6.w)',0
mod16_06:
bsr.w out_word
br.w out_seg
mod16_06a:
move.l #_10,r3
bsr.w out_string
tst.b #$ff,seg
bpl.w out_seg
move.b #7,seg
br.w out_seg
_10: dc.b '(r4.w)',0
mod16_07:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b '(r3.w)',0
mod16_10:
bsr.w out_byte
br.w mod16_00
mod16_11:
bsr.w out_byte
br.w mod16_01
mod16_12:
bsr.w out_byte
br.w mod16_02
mod16_13:
bsr.w out_byte
br.w mod16_03
mod16_14:
bsr.w out_byte
br.w mod16_04
mod16_15:
bsr.w out_byte
br.w mod16_05
mod16_16:
bsr.w out_byte
br.w mod16_06a
mod16_17:
bsr.w out_byte
br.w mod16_07
mod16_20:
bsr.w out_word
br.w mod16_00
mod16_21:
bsr.w out_word
br.w mod16_01
mod16_22:
bsr.w out_word
br.w mod16_02
mod16_23:
bsr.w out_word
br.w mod16_03
mod16_24:
bsr.w out_word
br.w mod16_04
mod16_25:
bsr.w out_word
br.w mod16_05
mod16_26:
bsr.w out_word
br.w mod16_06a
mod16_27:
bsr.w out_word
br.w mod16_07
mod16_30:
mod32_30:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b 'r0',0
mod16_31:
mod32_31:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b 'r2',0
mod16_32:
mod32_32:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b 'r1',0
mod16_33:
mod32_33:
move.l #_10,r3
bsr.w out_string
br.w out_seg
_10: dc.b 'r3',0
mod16_34:
mod32_34:
move.l #_10,r3
tst.b #$ff,op8
beq.b _1
move.l #_20,r3
_1: bsr.w out_string
br.w out_seg
_10: dc.b 'r7',0
_20: dc.b 'm0',0
mod16_35:
mod32_35:
move.l #_10,r3
tst.b #$ff,op8
beq.b _1
move.l #_20,r3
_1: bsr.w out_string
br.w out_seg
_10: dc.b 'r4',0
_20: dc.b 'm2',0
mod16_36:
mod32_36:
move.l #_10,r3
tst.b #$ff,op8
beq.b _1
move.l #_20,r3
_1: bsr.w out_string
br.w out_seg
_10: dc.b 'r5',0
_20: dc.b 'm1',0
mod16_37:
mod32_37:
move.l #_10,r3
tst.b #$ff,op8
beq.b _1
move.l #_20,r3
_1: bsr.w out_string
br.w out_seg
_10: dc.b 'r6',0
_20: dc.b 'm3',0
mod32_00:
move.l #_50,r3
bsr.w out_string
br.w out_seg
_50: dc.b '(r0)',0
mod32_01:
move.l #_50,r3
bsr.w out_string
br.w out_seg
_50: dc.b '(r2)',0
mod32_02:
move.l #_50,r3
bsr.w out_string
br.w out_seg
_50: dc.b '(r1)',0
mod32_03:
move.l #_50,r3
bsr.w out_string
br.w out_seg
_50: dc.b '(r3)',0
mod32_04:
br.w sib1
mod32_05:
bsr.w out_long
br.w out_seg
mod32_05a:
move.l #_50,r3
bsr.w out_string
tst.b #$ff,seg
bpl.w out_seg
move.b #7,seg
br.w out_seg
_50: dc.b '(r4)',0
mod32_06:
move.l #_50,r3
bsr.w out_string
br.w out_seg
_50: dc.b '(r5)',0
mod32_07:
move.l #_50,r3
bsr.w out_string
br.w out_seg
_50: dc.b '(r6)',0
mod32_10:
bsr.w out_byte
br.w mod32_00
mod32_11:
bsr.w out_byte
br.w mod32_01
mod32_12:
bsr.w out_byte
br.w mod32_02
mod32_13:
bsr.w out_byte
br.w mod32_03
mod32_14:
move.b (r5){s3},r0
inc.l r5
move.w r0,-(sp)
bsr.w out_byte
br.w sib2
mod32_15:
bsr.w out_byte
br.w mod32_05a
mod32_16:
bsr.w out_byte
br.w mod32_06
mod32_17:
bsr.w out_byte
br.w mod32_07
mod32_20:
bsr.w out_long
br.w mod32_00
mod32_21:
bsr.w out_long
br.w mod32_01
mod32_22:
bsr.w out_long
br.w mod32_02
mod32_23:
bsr.w out_long
br.w mod32_03
mod32_24:
move.b (r5){s3},r0
inc.l r5
move.w r0,-(sp)
bsr.w out_long
br.w sib2
mod32_25:
bsr.w out_long
br.w mod32_05a
mod32_26:
bsr.w out_long
br.w mod32_06
mod32_27:
bsr.w out_long
br.w mod32_07
sib2: move.b #0,r3
move.w (sp)+,r0
br.b sib
sib1: move.b #-1,r3
move.b (r5){s3},r0
inc.l r5
sib: move.b r0,r1
move.b r0,r2
lsr.b #3,r1
rol.b #2,r2
andq.l #$07,r0
andq.l #$07,r1
andq.l #$03,r2
move.b tab10(r0),r0
move.b tab10(r1),r1
tst.b #$ff,r3
beq.b _5
cmp.b #4,r0
beq.b _10
_5: tst.b #$ff,seg
bpl.b _6
cmp.b #4,r0
beq.b _7
cmp.b #7,r0
bne.b _6
_7: move.b #7,seg
_6: move.w #'r(',(r6,r4)
add.b #'0',r0
move.b r0,2.b(r6,r4)
addq.w #3,r4
cmp.b #7,r1
bne.b _30
move.b #')',(r6,r4)
inc.w r4
br.w out_seg
_30: move.b #',',(r6,r4)
inc.w r4
br.b _20
_10: bsr.w out_long
cmp.b #7,r1
beq.w out_seg
move.b #'(',(r6,r4)
inc.w r4
_20: move.b #'r',(r6,r4)
inc.w r4
add.b #'0',r1
move.b r1,(r6,r4)
inc.w r4
jmp.w (_100(r2*2))
_100: dc.w _110
dc.w _120
dc.w _130
dc.w _140
_110: move.b #')',(r6,r4)
inc.w r4
br.w out_seg
_120: move.l #')2*',(r6,r4)
addq.w #3,r4
br.w out_seg
_130: move.l #')4*',(r6,r4)
addq.w #3,r4
br.w out_seg
_140: move.l #')8*',(r6,r4)
addq.w #3,r4
br.w out_seg
out_hex:
move.w r0,-(sp)
and.b #$0f,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _10
add.b #'a'-'9'-1,r0
_10: move.b r0,(r6,r4)
inc.w r4
move.w (sp)+,r0
rts.w
out_byte:
move.b (r5){s3},r0
inc.l r5
out_r0b:
move.b #'$',(r6,r4)
inc.w r4
out__r0b:
rol.b #4,r0
bsr.w out_hex
rol.b #4,r0
bsr.w out_hex
rts.w
out_word:
move.w (r5){s3},r0
addq.l #2,r5
out_r0w:
move.b #'$',(r6,r4)
inc.w r4
out__r0w:
rol.w #4,r0
bsr.w out_hex
rol.w #4,r0
bsr.w out_hex
rol.w #4,r0
bsr.w out_hex
rol.w #4,r0
bsr.w out_hex
rts.w
out_long:
move.l (r5){s3},r0
addq.l #4,r5
out_r0l:
move.b #'$',(r6,r4)
inc.w r4
out__r0l:
rol.l #16,r0
bsr.w out__r0w
rol.l #16,r0
bsr.w out__r0w
rts.w
out_seg:
cmp.b #0,seg
ble.b _10
move.b seg,r0
add.b #'0',r0
move.w #'s{',(r6,r4)
move.b r0,2.b(r6,r4)
move.b #'}',3.b(r6,r4)
addq.w #4,r4
_10: rts.w
out_string:
_10: move.b (r3),r0
inc.w r3
cmp.b #'@',r0
bne.b _20
bsr.w out_tab
br.b _10
_20: move.b r0,(r6,r4)
inc.w r4
tst.b r0,r0
bne.b _10
dec.w r4
rts.w
out_wltab:
bsr.w out_string
move.b #'w',(r6,r4)
tst.b #$ff,dat32
beq.b _10
move.b #'l',(r6,r4)
_10: inc.w r4
br.b out_tab
out_wtab:
bsr.w out_string
move.b #'w',(r6,r4)
inc.w r4
br.b out_tab
out_ltab:
bsr.w out_string
move.b #'l',(r6,r4)
inc.w r4
br.b out_tab
out_btab:
bsr.w out_string
move.b #'b',(r6,r4)
inc.w r4
br.b out_tab
out_tab:
move.b #' ',r0
_10: move.b r0,(r6,r4)
inc.w r4
cmpq.w #27,r4
blo.b _10
rts.w
dc_byte:move.l (sp)+,r5
move.l r5,-(sp)
move.l #_50,r3
bsr.w out_btab
bsr.w out_byte
br.w dass_end
_50: dc.b 'dc.',0
dass_end:
move.b #' ',r0
_10: move.b r0,(r6,r4)
inc.w r4
cmpq.w #50,r4
blo.b _10
move.b #'(',(r6,r4)
inc.w r4
move.l (sp)+,r3
_20: move.b (r3){s3},r0
inc.l r3
bsr.w out__r0b
move.b #' ',(r6,r4)
inc.w r4
cmp.l r5,r3
blo.b _20
move.b #')',-1.b(r6,r4)
move.b #0,(r6,r4)
move.l r5,_50
movem.l (sp)+,r0-r7
move.l _50,r5
rts.w
_50: dc.l 0
t_add: dc.b 'add.',0
t_or: dc.b 'or.',0
t_addc: dc.b 'addc.',0
t_subc: dc.b 'subc.',0
t_and: dc.b 'and.',0
t_sub: dc.b 'sub.',0
t_eor: dc.b 'eor.',0
t_cmp: dc.b 'cmp.',0
t_addq: dc.b 'addq.',0
t_orq: dc.b 'orq.',0
t_addcq:dc.b 'addcq.',0
t_subcq:dc.b 'subcq.',0
t_andq: dc.b 'andq.',0
t_subq: dc.b 'subq.',0
t_eorq: dc.b 'eorq.',0
t_cmpq: dc.b 'cmpq.',0
t_arpl: dc.b 'arpl.',0
t_chk: dc.b 'chk.',0
t_move: dc.b 'move.',0
t_moveq:dc.b 'moveq.',0
t_divu: dc.b 'divu.',0
t_divs: dc.b 'divs.',0
t_mulu: dc.b 'mulu.',0
t_muls: dc.b 'muls.',0
t_mulsq:dc.b 'mulsq.',0
t_bvs: dc.b 'bvs.',0
t_bvc: dc.b 'bvc.',0
t_bcs: dc.b 'bcs.',0
t_bcc: dc.b 'bcc.',0
t_beq: dc.b 'beq.',0
t_bne: dc.b 'bne.',0
t_bls: dc.b 'bls.',0
t_bhi: dc.b 'bhi.',0
t_bmi: dc.b 'bmi.',0
t_bpl: dc.b 'bpl.',0
t_bps: dc.b 'bps.',0
t_bpc: dc.b 'bpc.',0
t_blt: dc.b 'blt.',0
t_bge: dc.b 'bge.',0
t_ble: dc.b 'ble.',0
t_bgt: dc.b 'bgt.',0
t_tst: dc.b 'tst.',0
t_exg: dc.b 'exg.',0
t_lea: dc.b 'lea.',0
t_ext: dc.b 'ext.',0
t_rol: dc.b 'rol.',0
t_ror: dc.b 'ror.',0
t_rocl: dc.b 'rocl.',0
t_rocr: dc.b 'rocr.',0
t_lsl: dc.b 'lsl.',0
t_lsr: dc.b 'lsr.',0
t_asl: dc.b 'asl.',0
t_asr: dc.b 'asr.',0
t_rts: dc.b 'rts.',0
t_in: dc.b 'in.',0
t_out: dc.b 'out.',0
t_br: dc.b 'br.',0
t_not: dc.b 'not.',0
t_neg: dc.b 'neg.',0
t_inc: dc.b 'inc.',0
t_dec: dc.b 'dec.',0
t_jsr: dc.b 'jsr.',0
t_jmp: dc.b 'jmp.',0
t_svs: dc.b 'svs.',0
t_svc: dc.b 'svc.',0
t_scs: dc.b 'scs.',0
t_scc: dc.b 'scc.',0
t_seq: dc.b 'seq.',0
t_sne: dc.b 'sne.',0
t_sls: dc.b 'sls.',0
t_shi: dc.b 'shi.',0
t_smi: dc.b 'smi.',0
t_spl: dc.b 'spl.',0
t_sps: dc.b 'sps.',0
t_spc: dc.b 'spc.',0
t_slt: dc.b 'slt.',0
t_sge: dc.b 'sge.',0
t_sle: dc.b 'sle.',0
t_sgt: dc.b 'sgt.',0
t_btst: dc.b 'btst.',0
t_dsl: dc.b 'dsl.',0
t_cas: dc.b 'cas.',0
t_bset: dc.b 'bset.',0
t_bclr: dc.b 'bclr.',0
t_bchg: dc.b 'bchg.',0
t_dsr: dc.b 'dsr.',0
t_bscf: dc.b 'bscf.',0
t_bscr: dc.b 'bscr.',0
t_xadd: dc.b 'xadd.',0
ENDIF
LABEL_BLOCK
;*********************************************************************
;*********************************************************************
;*********** Ende 80486 Disassembler ********************
;*********************************************************************
;*********************************************************************
list
data:: ; ab hier nicht initialisierte daten
prog_ende==data+@data
.
- References:
- Re: Speed of [register + constant] vs [register] in asm/basm ?
- From: Herbert Kleebauer
- Re: Speed of [register + constant] vs [register] in asm/basm ?
- Prev by Date: Re: Speed of [register + constant] vs [register] in asm/basm ?
- Next by Date: Re: ///Wannabee Rants
- Previous by thread: Re: Speed of [register + constant] vs [register] in asm/basm ?
- Next by thread: Re: Speed of [register + constant] vs [register] in asm/basm ?
- Index(es):
Relevant Pages
|