Re: Speed of [register + constant] vs [register] in asm/basm ?



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



.



Relevant Pages

  • I know you
    ... Mir gefällt dieser Text sehr, weil ich mich in ihm wiedererkenne, und ... Die Isolation, der Hass, der mit ihr kommt, das ... verlieben, den anderen nicht erkennen können, bei den anderen das Gute ... sich selbst, sie reden nur nach, Du beobachtest und fühlst Dich von ...
    (de.soc.weltanschauung.buddhismus)
  • Re: sophia et al.
    ... >> Feind ist nicht der Andere, ... Es sind nur jene, die sich seit Beginn ihres Hierseins in dieser vom Verstand beherrschen Welt als in der falschen Welt empfanden, welche sich ein Suchen begonnen haben, das nicht im Außen zu finden ist. ... Shams war der Lehrer und Geliebte von => Mevlana Jelaluddin Rumi, der ihm mit den spirituellen Welten vertraut machte, worauf Rumi anfing Gedichte zu schreiben. ...
    (de.sci.philosophie)
  • Re: [DCC] Spannung am Gleis
    ... Also darf ein Booster nicht mehr als +-22V liefern. ... Unter dem Text sind noch Bildchen mit minimalen, typischen und ... Die Hersteller in den USA und Europa haben unterschiedliche ... Das sieh man nicht nur an den ...
    (de.rec.modelle.bahn)
  • Re: erstellen von cue/bin CD-Abbildern
    ... Eine Weiterentwicklung fnd jedoch nicht statt. ... Cdrkit 1.1.6 has been released, adding generic drive guessing, OpenBSD ... oder nicht, werde ich mich mit dir nicht streiten, da ich das nicht ... Fuer mich arbeitete bisher cdrkit unter Linux ...
    (de.comp.os.unix.linux.misc)