home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
swCHIP 1991 January
/
swCHIP_95-1.bin
/
dos
/
malbuch
/
malbuch.mac
< prev
Wrap
Text File
|
1995-12-09
|
53KB
|
2,276 lines
; 22. 4.94
; 7.11.94 Uebersicht mit Rand
; 3. 1.95 option -c (kein Farbaenderung durch rechte Maustaste)
; option -m (zusaetzlich keine Mischfarben)
; 11. 1.95 PostScript Plot
; klee@informatik.unibw-muenchen.de
nolist
ycount=32 ; 1,2,4,6,16 oder 32
@=$100
start: br.w main
ende: move.w #$4c00,r0
trap #$21
read_ch:
; Eingabe: keine
; Ausgabe: r0.b : ascii m0.b : erweiterter Code
move.w #0,r0
move.w r3,-(sp)
trap #$16
move.w (sp)+,r3
rts.w
read_if_ch:
; Eingabe: keine
; Ausgabe: z-flag = 0 fall Zeichen vorhanden, dann:
; r0.b : ascii m0.b : erweiterter Code
move.w #$100,r0
trap #$16
rts.w
print_ch:
; Eingabe: r0.b auszugebendes Zeichen
; Ausgabe: keine
movem.l r0-r7,-(sp)
move.w s1,-(sp)
move.b #$0e,m0
move.b #0,r3
trap #$10
move.w (sp)+,s1
movem.l (sp)+,r0-r7
rts.w
print_string:
; Eingabe: r0.w{s0} : pointer auf string durch 0 abgeschlossen
; Ausgabe: keine
movem.l r0-r7,-(sp)
move.w r0,r3
_20: move.b (r3.w),r0
tst.b r0,r0
beq.b _10
inc.w r3
bsr.w print_ch
br.b _20
_10: movem.l (sp)+,r0-r7
rts.w
print_hex_l:
; Eingabe r0.l auszugebendes Langwort
; Ausgabe keine
movem.l r0-r7,-(sp)
move.l r0,r1
move.w #8,r2
_20: rol.l #4,r1
move.b r1,r0
andq.l #$0f,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _10
add.b #'a'-'9'-1,r0
_10: bsr.w print_ch
dbf.w r2,_20
movem.l (sp)+,r0-r7
rts.w
maus_init:
movem.w r0-r7,-(sp)
move.w #$0007,r0
move.w #639,r1
eor.w r2,r2
trap #$33
move.w #$0008,r0
move.w #479,r1
eor.w r2,r2
trap #$33
movem.w (sp)+,r0-r7
rts.w
maus_on:
move.w r0,-(sp)
move.w #1,r0
trap #$33
move.w (sp)+,r0
rts.w
maus_off:
move.w r0,-(sp)
move.w #2,r0
trap #$33
move.w (sp)+,r0
rts.w
maus_read:
move.w r1,-(sp)
move.w r2,-(sp)
move.w r3,-(sp)
move.w #3,r0
trap #$33
move.w r1,ypos
move.w r2,xpos
move.w r3,r0
move.w (sp)+,r3
move.w (sp)+,r2
move.w (sp)+,r1
rts.w
init_graph:
move.w r0,-(sp)
move.w r1,-(sp)
move.w #$12,r0 ; 640x480 16 Farben
trap #$10
move.w #$3ce,r1
move.w #$0f01,r0
out.w r0,r1 ; Enable Set/Reset = f
move.w #$0305,r0 ; Write Mode 3
out.w r0,r1
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
set_gmode:
move.w r0,-(sp)
move.w r1,-(sp)
move.w #$3ce,r1
move.w #$0f01,r0
out.w r0,r1 ; Enable Set/Reset = f
move.w #$0305,r0 ; Write Mode 3
out.w r0,r1
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
set_grau_palette:
movem.w r0-r7,-(sp)
move.w #palette_grau,r5
br.b set_palette1
set_palette:
movem.w r0-r7,-(sp)
move.w #palette,r5
set_palette1:
move.w #$3c8,r1
eor.b r0,r0
out.b r0,r1
move.w #6*3,r2
bsr.w _200
move.b #$14,r0
out.b r0,r1
move.w #1*3,r2
bsr.w _200
move.b #$07,r0
out.b r0,r1
move.w #1*3,r2
bsr.w _200
move.b #$38,r0
out.b r0,r1
move.w #8*3,r2
bsr.w _200
movem.w (sp)+,r0-r7
rts.w
_200: inc.w r1
_210: move.b (r5.w),r0
inc.w r5
out.b r0,r1
dbf.w r2,_210
dec.w r1
rts.w
set_color:
; setzt color als die aktuelle Farbe
; veraendert keine Register
move.w r0,-(sp)
move.w r1,-(sp)
move.w #$3ce,r1
move.b color,m0
and.b #$0f,m0
eor.b r0,r0
out.w r0,r1
move.w (sp)+,r1
move.w (sp)+,r0
rts.w
white_screen:
move.l r0,-(sp)
move.w #$0f00,r0
br.b .black_screen
black_screen:
; loescht Bildschirm
; veraendert keine Register
move.l r0,-(sp)
eor.w r0,r0
.black_screen:
move.w r1,-(sp)
move.w r2,-(sp)
move.w r6,-(sp)
move.w #$3ce,r1
out.w r0,r1
bsr.w set_gmode
move.w #640*480/32,r2
eor.l r0,r0
dec.l r0
eor.w r6,r6
_10: move.l r0,(r6.w){s1}
addq.w #4,r6
dbf.w r2,_10
move.w (sp)+,r6
move.w (sp)+,r2
move.w (sp)+,r1
move.l (sp)+,r0
rts.w
black_gitter:
; veraendert keine Register
move.l r0,-(sp)
move.w r1,-(sp)
move.w r2,-(sp)
move.w r6,-(sp)
eor.w r0,r0
move.w #$3ce,r1
out.w r0,r1
bsr.w set_gmode
move.w #10*480,r2
move.b #1,r0
move.w #7,r6
_10: move.b (r6.w){s1},r1
move.b r0,(r6.w){s1}
add.w #8,r6
dbf.w r2,_10
eor.l r0,r0
dec.l r0
move.w #80*47,r6
move.w #10,r1
_21: move.w #20,r2
_20: move.l r0,(r6.w){s1}
addq.w #4,r6
dbf.w r2,_20
add.w #80*47,r6
dec.w r1
bne.b _21
move.w (sp)+,r6
move.w (sp)+,r2
move.w (sp)+,r1
move.l (sp)+,r0
rts.w
hintergrund_halb:
movem.l r0-r7,-(sp)
move.w #40/4,r1
move.w #40,r4
br.b hintergrund0
hintergrund:
movem.l r0-r7,-(sp)
move.w #80/4,r1
eor.w r4,r4
hintergrund0:
bsr.w set_gmode
move.w #15,color
bsr.w set_color
eor.w r5,r5
move.w #480,r3
_10: move.w r1,r2
_20: move.b (r5.w){s1},r0
move.b 3.b(r5.w){s2},r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b 1.b(r5.w){s2},r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b -1.b(r5.w){s2},r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b -3.b(r5.w){s2},r0
move.b r0,(r5.w){s1}
inc.w r5
dbf.w r2,_20
add.w r4,r5
dec.w r3
bne.b _10
movem.l (sp)+,r0-r7
rts.w
fill: movem.l r0-r7,-(sp)
eor.l r6,r6
eor.l r0,r0
move.w #80*480/4,r2
_10: move.l r0,(r6.w){s3}
addq.w #4,r6
dbf.w r2,_10
move.w #xpos,r5
move.w #ypos,r6
move.w #1,r0
eor.w r1,r1
move.w #1,r3
br.b _130
_132: add.w r0,(r5.w)
inc.w r1
cmp.w r1,r3
bne.b _130
eor.w r1,r1
exg.w r5,r6
cmp.w #xpos,r5
bne.b _130
neg.w r0
inc.w r3
cmp.w #20,r3
bhi.w _100
_130: cmp.w #639,xpos
bhi.b _132
cmp.w #479,ypos
bhi.b _132
muls.l #640,ypos,r2
add.l xpos,r2
eor.b #$1f,r2
btst.l r2,0.w{s2}
bcc.b _132
bset.l r2,0.w{s3}
move.l ypos,r4
move.w r4,_oben
move.w r4,_unten
move.w r4,r3
bsr.w _fill_line
br.b _28
_25: move.w _unten,r3
move.w _oben,r4
move.w #0,_unten
move.w #1000,_oben
_28: cmp.w #479,r3
bhs.b _20
inc.w r3
_20: inc.w r4
cmp.w r3,r4
bhi.b _29
_27: muls.l #80,r4,r5
_24: move.w #20,r2
_23: move.l -80.b(r5.w){s3},r0
or.l (r5.w){s3},r0
and.l (r5.w){s2},r0
cmp.l r0,(r5.w){s3}
bne.b _22
addq.w #4,r5
dbf.w r2,_23
br.b _20
_21: move.l -80.b(r5.w){s3},r0
or.l (r5.w){s3},r0
and.l (r5.w){s2},r0
_22: move.l r0,(r5.w){s3}
addq.w #4,r5
dbf.w r2,_21
bsr.w _fill_line
bcc.b _26
move.w r4,_unten
cmp.w _oben,r4
bhs.b _26
move.w r4,_oben
_26: inc.w r4
cmp.w #479,r4
bls.b _27
_29: cmp.w #1000,_oben
beq.b _50
move.w _oben,r3
move.w _unten,r4
move.w #0,_unten
move.w #1000,_oben
dec.w r3
bpl.b _30
inc.w r3
_30: dec.w r4
bmi.b _39
cmp.w r3,r4
blo.b _39
_37: muls.l #80,r4,r5
_34: move.w #20,r2
_33: move.l 80.b(r5.w){s3},r0
or.l (r5.w){s3},r0
and.l (r5.w){s2},r0
cmp.l r0,(r5.w){s3}
bne.b _32
addq.w #4,r5
dbf.w r2,_33
br.b _30
_31: move.l 80.b(r5.w){s3},r0
or.l (r5.w){s3},r0
and.l (r5.w){s2},r0
_32: move.l r0,(r5.w){s3}
addq.w #4,r5
dbf.w r2,_31
bsr.w _fill_line
bcc.b _36
move.w r4,_oben
cmp.w _unten,r4
bls.b _36
move.w r4,_unten
_36: dec.w r4
bpl.b _37
_39: cmp.w #1000,_oben
bne.w _25
_50:
bsr.w set_gmode
move.w color1,r0
move.w r0,color
bsr.w set_color
move.w #-1,r1
eor.w r5,r5
move.w #80*480/4,r2
_99: move.l (r5.w){s3},r0
or.l r0,r0
bne.b _96
addq.w #4,r5
dbf.w r2,_99
br.b _97
_96: or.w r1,r1
bpl.b _98
move.l r0,r4
inc.w r1
move.w #80*480/4,r0
sub.w r2,r0
lsl.w #2,r0
move.w #80,r3
divu.w r3,r1|r0
lsl.l #16,r0
move.w r1,r0
lsl.w #3,r0
bscr.l r4,r1
eor.b #$1f,r1
add.w r1,r0
move.l r0,r1
_98: move.b (r5.w){s1},r0
move.b 3.b(r5.w){s3},r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b 1.b(r5.w){s3},r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b -1.b(r5.w){s3},r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b -3.b(r5.w){s3},r0
move.b r0,(r5.w){s1}
inc.w r5
dbf.w r2,_99
_97:
move.w color2,r0
cmp.w color1,r0
beq.b _91
move.w r0,color
bsr.w set_color
; falls mischfarben
eor.w r5,r5
move.b #$55,r3
move.w #480,r4
_93: move.w #80/4,r2
ror.b #1,r3
_92: move.l (r5.w){s3},r0
or.l r0,r0
bne.b _94
addq.w #4,r5
dbf.w r2,_92
dec.w r4
bne.b _93
br.b _91
_94: move.b (r5.w){s1},r0
move.b 3.b(r5.w){s3},r0
and.b r3,r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b 1.b(r5.w){s3},r0
and.b r3,r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b -1.b(r5.w){s3},r0
and.b r3,r0
move.b r0,(r5.w){s1}
inc.w r5
move.b (r5.w){s1},r0
move.b -3.b(r5.w){s3},r0
and.b r3,r0
move.b r0,(r5.w){s1}
inc.w r5
dbf.w r2,_92
dec.w r4
bne.b _93
_91: move.l r1,r0
move.w #fillbuff,r5
move.w fillcount,r2
or.w r2,r2
beq.b _83
_82: cmp.l (r5.w),r0
beq.b _81
addq.w #6,r5
dbf.w r2,_82
_83: move.l r0,(r5.w)
inc.w fillcount
cmp.w #512,fillcount
bhs.b _100
_81: move.b color1,r0
move.b color2,m0
move.w r0,4.b(r5.w)
_100: movem.l (sp)+,r0-r7
rts.w
_oben: dc.w 0
_unten: dc.w 0
_fill_line:
eor.w r6,r6
muls.l #80,r4,r5
eor.b r0,r0
move.w #20,r2
_fl20: lsr.b #1,r0 ; Bit 0 in Carry
move.l (r5.w){s3},r0
move.l r0,r1
rocr.l #1,r0
br.b _fl23
_fl21: lsr.l #1,r0
_fl23: or.l r1,r0
and.l (r5.w){s2},r0
cmp.l r1,r0
beq.b _fl22
move.w #-1,r6
move.l r0,r1
br.b _fl21
_fl22: move.l r0,(r5.w){s3}
addq.w #4,r5
dbf.w r2,_fl20
eor.l r0,r0
move.w #20,r2
_fl30: subq.w #4,r5
lsl.l #1,r0 ; Bit 31 in Carry
move.l (r5.w){s3},r0
move.l r0,r1
rocl.l #1,r0
br.b _fl33
_fl31: lsl.l #1,r0
_fl33: or.l r1,r0
and.l (r5.w){s2},r0
cmp.l r1,r0
beq.b _fl32
move.w #-1,r6
move.l r0,r1
br.b _fl31
_fl32: move.l r0,(r5.w){s3}
dbf.w r2,_fl30
lsr.w #1,r6 ; Carry setzen
rts.w
new_color:
movem.l r0-r7,-(sp)
and.w #$fff8,xpos
cmp.w #640-64,xpos
bls.b _10
move.w #640-64,xpos
_10: cmp.w #480-64,ypos
bls.b _11
move.w #480-64,ypos
_11: sub.w #64,xpos
bpl.b _12
move.w #0,xpos
_12: sub.w #64,ypos
bpl.b _13
move.w #0,ypos
_13:
move.w xpos,r0
move.w r0,xpos1
move.w ypos,r0
move.w r0,ypos1
muls.w #80,ypos,r4
move.w xpos,r1
lsr.w #3,r1
add.w r1,r4
move.w r4,-(sp)
move.w #bild_save,r6
move.w #$3ce,r1
move.w #$0004,r0
out.w r0,r1 ; Plane 0 lesen
bsr.w _500
move.w #$0104,r0
out.w r0,r1 ; Plane 1 lesen
bsr.w _500
move.w #$0204,r0
out.w r0,r1 ; Plane 2 lesen
bsr.w _500
move.w #$0304,r0
out.w r0,r1 ; Plane 3 lesen
bsr.w _500
_14: move.w #0,color
bsr.w set_gmode
eor.l r0,r0
dec.l r0
move.w #4,r1
_36: move.w #4,r3
_35: move.w r4,r5
addq.w #4,r4
move.w #32,r2
bsr.w set_color
inc.w color
_34: move.l r0,(r5.w){s1}
add.w #80,r5
dbf.w r2,_34
dec.w r3
bne.b _35
add.w #32*80-16,r4
dec.w r1
bne.b _36
_51: bsr.w maus_read
or.b r0,r0
bne.b _51
bsr.w maus_on
_50: bsr.w maus_read
tst.b #3,r0
beq.b _50
move.b r0,r3
bsr.w maus_off
move.w xpos,r0
sub.w xpos1,r0
bmi.w _60
cmp.w #4*32,r0
bhs.w _60
lsr.w #5,r0
move.w ypos,r1
sub.w ypos1,r1
bmi.w _60
cmp.w #4*32,r1
bhs.w _60
lsr.w #5,r1
lsl.w #2,r1
add.w r1,r0
move.w r0,color1
move.w r0,color2
move.b #0,auto_color
.no_change_color:
cmp.b #2,r3
bne.w _61
.no_mix_color:
cmp.w #0,color1
bls.b _70
cmp.w #15,color1
beq.b _70
move.w (sp)+,r4
move.w r4,-(sp)
bsr.w change_color
bcc.w _61
br.w _14
_70: bsr.w set_gmode
move.w #0,color
move.w (sp)+,r4
move.w r4,-(sp)
move.b #$55,r1
_74: bsr.w set_color
move.w color,r5
add.w r4,r5
move.w #8*9,r2
_71: move.b (r5.w){s1},r0
move.b r1,(r5.w){s1}
addq.w #80,r5
ror.b #1,r1
dbf.w r2,_71
_79: move.w color,r5
add.w r4,r5
eor.w r3,r3
_77: move.w #8,r2
_73: move.b (r5.w){s1},r0
ror.b #1,r1
move.b r1,(r5.w){s1}
add.w #80,r5
dbf.w r2,_73
cmp.w color,r3
bne.b _78
addq.w #16,r5
_78: dec.w r5
inc.w r3
cmp.w #9,r3
bne.b _77
inc.w color
cmp.w #15,color
bls.b _74
_75: bsr.w maus_read
or.b r0,r0
bne.b _75
move.w #0,_color1
move.w #0,_color2
_90: bsr.w set_gmode
move.w _color1,r0
move.w r0,color
bsr.w set_color
move.w r4,r5
add.w #9*8*80,r5
move.w r5,r6
move.b #$55,r1
move.w #7*8,r3
_93: move.w #16,r2
_92: move.b (r5.w){s1},r0
move.b r1,(r5.w){s1}
inc.w r5
dbf.w r2,_92
ror.b #1,r1
addq.w #80-16,r5
dec.w r3
bne.b _93
_91: move.w _color2,r0
move.w r0,color
bsr.w set_color
ror.b #1,r1
move.w #7*8,r3
_96: move.w #16,r2
_95: move.b (r6.w){s1},r0
move.b r1,(r6.w){s1}
inc.w r6
dbf.w r2,_95
ror.b #1,r1
addq.w #80-16,r6
dec.w r3
bne.b _96
bsr.w maus_on
_76: bsr.w maus_read
tst.b #3,r0
bne.b _62
move.w xpos,r0
sub.w xpos1,r0
bmi.b _20
cmp.w #16*8,r0
blo.b _21
_20: eor.w r0,r0
eor.w r1,r1
br.b _29
_21: lsr.w #3,r0
move.w ypos,r1
sub.w ypos1,r1
bmi.b _22
cmp.w #9*8,r1
blo.b _23
_22: eor.w r0,r0
eor.w r1,r1
_23: lsr.w #3,r1
add.w r0,r1
and.b #$0f,r1
_29: cmp.w r0,_color1
bne.b _24
cmp.w r1,_color2
beq.b _76
_24: move.w r0,_color1
move.w r1,_color2
bsr.w maus_off
br.w _90
_62: move.b r0,r3
bsr.w maus_off
move.w xpos,r0
sub.w xpos1,r0
bmi.b _60
cmp.w #16*8,r0
bhs.b _60
lsr.w #3,r0
move.w ypos,r1
sub.w ypos1,r1
bmi.b _60
cmp.w #9*8,r1
bhs.b _60
lsr.w #3,r1
add.w r0,r1
and.b #$0f,r1
move.w r0,color1
move.w r1,color2
move.b #0,auto_color
cmp.b #2,r3
bne.b _61
br.w _14
_60: move.b #-1,auto_color
move.w color1,r0
or.w r0,r0
bne.b _64
inc.w r0
move.w r0,color1
_64: move.w r0,color2
_61: move.w (sp)+,r4
move.w #bild_save,r6
move.w #$3ce,r1
move.w #$0005,r0 ; Write Mode 3
out.w r0,r1
move.w #$ff08,r0 ; bit mask
out.w r0,r1
move.w #$0001,r0 ; enable set/reset
out.w r0,r1
move.w #$3c4,r1
move.w #$0102,r0 ; plane 0 schreiben
out.w r0,r1
bsr.w _600
move.w #$0202,r0 ; plane 1 schreiben
out.w r0,r1
bsr.w _600
move.w #$0402,r0 ; plane 2 schreiben
out.w r0,r1
bsr.w _600
move.w #$0802,r0 ; plane 3 schreiben
out.w r0,r1
bsr.w _600
_80: bsr.w maus_read
cmp.b #0,r0
bne.b _80
movem.l (sp)+,r0-r7
rts.w
even
_color1: dc.w 0
_color2: dc.w 0
_500: move.w r4,r5
move.w #4*32,r3
_520: move.w #4,r2
_510: move.l (r5.w){s1},r0
move.l r0,(r6.w)
addq.l #4,r5
addq.l #4,r6
dbf.w r2,_510
add.w #80-16,r5
dec.w r3
bne.b _520
rts.w
_600: move.w r4,r5
move.w #4*32,r3
_620: move.w #4,r2
_610: move.l (r6.w),r0
move.l r0,(r5.w){s1}
addq.l #4,r5
addq.l #4,r6
dbf.w r2,_610
add.w #80-16,r5
dec.w r3
bne.b _620
rts.w
change_color:
move.w color1,r6
lsl.w #1,r6
add.w color1,r6
add.w #palette,r6
move.w #0,color
bsr.w set_gmode
eor.l r0,r0
dec.l r0
move.w #2,r3
move.w r4,r5
_20: move.w #64,r2
bsr.w set_color
_10: move.l r0,(r5.w){s1}
move.l r0,4.b(r5.w){s1}
move.l r0,8.b(r5.w){s1}
move.l r0,12.b(r5.w){s1}
add.w #80,r5
dbf.w r2,_10
move.w color1,r2
move.w r2,color
dec.w r3
bne.b _20
_60: bsr.w maus_read
or.b r0,r0
bne.b _60
_50: bsr.w set_gmode
move.w #15,color
bsr.w set_color
move.w r4,r5
add.w #4*80,r5
eor.l r0,r0
dec.l r0
bsr.w _200
add.w #4*80,r5
bsr.w _200
add.w #4*80,r5
bsr.w _200
move.w #0,color
bsr.w set_color
move.w r4,r3
add.w #4*80,r3
move.b #3,m1
_40:
eor.w r0,r0
move.b (r6.w),r0
inc.w r6
and.w #$3f,r0
bne.b _41
move.w r3,r5
move.b #$40,r1
br.b _42
_41: move.w r0,r5
lsr.w #2,r5
add.w r3,r5
lsl.b #1,r0
not.b r0
and.b #$07,r0
eor.b r1,r1
bset.w r0,r1
_42: move.w #16,r2
_30: move.b (r5.w){s1},r0
move.b r1,(r5.w){s1}
addq.w #80,r5
dbf.w r2,_30
add.w #20*80,r3
dec.b m1
bne.b _40
subq.w #3,r6
bsr.w maus_read
eor.w r3,r3
or.b r0,r0
beq.b _61
dec.w r3
move.w _500,r0
br.b _62
_61: bsr.w maus_on
_70: bsr.w maus_read
tst.b #3,r0
beq.b _70
bsr.w maus_off
cmp.b #2,r0
beq.b _101
move.w ypos,r0
move.w r0,_500
_62: sub.w ypos1,r0
bmi.b _100
cmp.w #64,r0
bhs.b _100
move.b #22,r1
divu.b r1,m0|r0
eor.b m0,m0
move.w color1,r5
add.w r5,r0
lsl.w #1,r5
add.w r0,r5
move.w xpos,r1
sub.w xpos1,r1
bpl.b _71
or.w r3,r3
bne.b _73
cmp.w #-10,r1
blt.b _100
_73: eor.w r1,r1
_71: cmp.w #128,r1
blo.b _72
or.w r3,r3
bne.b _74
cmp.w #128+10,r1
bhs.b _100
_74: move.w #127,r1
_72: lsr.b #1,r1
move.b r1,palette(r5.w)
bsr.w set_palette
move.b #1,color_changed
br.w _50
_100: bclr.w #0,sr
rts.w
_101: bset.w #0,sr
rts.w
_200: move.w #16,r2
_201: move.l r0,(r5.w){s1}
move.l r0,4.b(r5.w){s1}
move.l r0,8.b(r5.w){s1}
move.l r0,12.b(r5.w){s1}
addq.w #80,r5
dbf.w r2,_201
rts.w
_500: dc.w 0
get_dat:
move.l #'tad.',name2
move.w #$3d00,r0 ; Datei oeffnen
move.w #name,r1
trap #$21
bcs.w _100 ; Fehler? dann aufhoeren
move.w r0,r3 ; handle nach r3
move.w s3,r0
move.w r0,s0
move.w #$3f00,r0
move.w #640*480/8+62,r2 ; max lesen
eor.w r1,r1
trap #$21
move.w r0,r1
move.w #$3e00,r0 ; Datei schliessen
trap #$21
cmp.w r2,r1
beq.b _55 ; Paintbrush Bitmap
cmp.w #640*480/8,r1
beq.w _50 ; nicht komprimierte Datei
_19: eor.w r5,r5
eor.w r6,r6
eor.w r1,r1
move.w #480/ycount,r3
_27: move.b #80,m0
_26: move.w #ycount,r2
_20: dec.b r1
bpl.b _21
dec.b m1
bpl.b _25
move.b (r5.w),r1
inc.w r5
eor.b r0,r0
eor.b m1,m1
or.b r1,r1
bpl.b _22
and.b #$7f,r1
br.b _21
_22: move.b r1,m1
_25: eor.b r1,r1
move.b (r5.w),r0
inc.w r5
_21: move.b r0,(r6.w){s2}
add.w #80,r6
dbf.w r2,_20
sub.w #ycount*80-1,r6
dec.b m0
bne.b _26
add.w #(ycount-1)*80,r6
dec.w r3
bne.b _27
br.w _60
_55: move.w #$3e,r5
move.w #480,r3
move.w #479*80,r6
_57: move.w #640/8/4,r2
_56: move.l (r5.w),r0 ;gelesene Daten direkt in bitmap
addq.w #4,r5
not.l r0
move.l r0,(r6.w){s2}
addq.w #4,r6
dbf.w r2,_56
sub.w #640/8*2,r6
dec.w r3
bne.b _57
br.b _58
_50: eor.w r5,r5
move.w #640*480/8/4,r2
_51: move.l (r5.w),r0 ;gelesene Daten direkt in bitmap
move.l r0,(r5.w){s2}
addq.w #4,r5
dbf.w r2,_51
_58:
tst.b #$ff,compri_flag{s6}
beq.w _60
eor.w r6,r6
eor.w r5,r5
move.w #480/ycount,r1 ; ycount Byte untereinander dann die
_72: move.b #80,m0 ; naechsten ycount Byte daneben usw.
_71: move.w #ycount,r2
_70: move.b (r5.w){s2},r0
add.w #80,r5
move.b r0,(r6.w)
inc.w r6
dbf.w r2,_70
sub.w #ycount*80-1,r5
dec.b m0
bne.b _71
add.w #(ycount-1)*80,r5
dec.w r1
bne.b _72
move.w #640*480/8,r2
eor.w r5,r5
_79: move.l (r5.w),r0
move.l r0,(r5.w){s2}
addq.w #4,r5
dbf.w r2,_79
move.w #640*480/8,r2
eor.w r5,r5
eor.w r6,r6
eor.b r1,r1
move.l r5,r4
_c10: bsr.w _out_null ;comprimieren
_c11: cmp.w #0,(r5.w){s2}
beq.b _c20
inc.w r5
inc.b r1
cmp.b #128,r1
blo.b _c12
bsr.w _out_muster
_c12: dbf.w r2,_c11
bsr.w _out_muster
br.b _59
_c20: bsr.w _out_muster
_c21: cmp.b #0,(r5.w){s2}
bne.b _c10
inc.w r5
inc.b r1
cmp.b #128,r1
blo.b _c22
bsr.w _out_null
_c22: dbf.w r2,_c21
bsr.w _out_null
br.b _59
_out_null:
dec.b r1
bmi.b _on2
or.b #$80,r1
move.b r1,(r6.w)
inc.w r6
move.l r5,r4
_on2: eor.b r1,r1
rts.w
_out_muster:
exg.l r4,r5
dec.b r1
bmi.b _om2
move.b r1,(r6.w)
inc.w r6
_om1: move.b (r5.w){s2},r0
inc.w r5
move.b r0,(r6.w)
inc.w r6
dec.b r1
bpl.b _om1
_om2: eor.b r1,r1
rts.w
_59:
move.w s6,r0
move.w r0,s0
move.w #$3c00,r0 ; Datei oeffnen
move.w #name,r1
move.w #0,r2
trap #$21
bcs.w _60 ; Fehler? dann eben nicht schreiben
move.w r0,r3 ; handle nach r3
move.w s3,r0
move.w r0,s0
move.w #$4000,r0
eor.w r1,r1
move.w r6,r2
trap #$21
move.w #$3e00,r0 ; Datei schliessen
trap #$21
br.w _19
_60: move.w s6,r1
move.w r1,s0
bclr.w #0,sr
_100: rts.w
get_bild:
bsr.w get_dat
bcs.w _100
eor.w r5,r5
move.w #80*480/4,r2
_61: not.l (r5.w){s2}
move.b (r5.w){s2},r0
move.b 3.b(r5.w){s2},m0
move.b m0,(r5.w){s2}
move.b r0,3.b(r5.w){s2}
move.b 1.b(r5.w){s2},r0
move.b 2.b(r5.w){s2},m0
move.b m0,1.b(r5.w){s2}
move.b r0,2.b(r5.w){s2}
addq.w #4,r5
dbf.w r2,_61
move.b #0,color_changed
move.l #'loc.',name2
move.w #$3d00,r0 ; Datei oeffnen
move.w #name,r1
trap #$21
bcc.w _b50 ; kein Fehler? dann weiter
move.w #0,fillcount
move.w #3*16/4,r2
move.w #palette_org,r5
move.w #palette,r6
_b10: move.l (r5.w),r0
addq.w #4,r5
move.l r0,(r6.w)
addq.w #4,r6
dbf.w r2,_b10
bsr.w set_palette
br.b _b20
_b50: move.w r0,r3 ; handle nach r3
move.w #$3f00,r0
move.w #3*16+2+512*4,r2 ; max lesen
move.w #palette,r1
trap #$21
move.w #$3e00,r0 ; Datei schliessen
trap #$21
bsr.w set_palette
move.w #fillbuff,r5
move.w fillcount,r2
or.w r2,r2
beq.b _b20
move.w r2,r0
lsl.w #2,r0
move.w r5,r6
add.w r0,r5
add.w r0,r6
add.w r2,r6
add.w r2,r6
_b30: subq.w #4,r5
subq.w #6,r6
move.l (r5.w),r0
move.w r0,r1
and.w #$0fff,r1
move.w r1,(r6.w)
lsr.l #8,r0
lsr.w #4,r0
move.w r0,2.b(r6.w)
eor.w r0,r0
rol.l #12,r0
lsl.w #4,r0
rol.l #4,r0
move.w r0,4.b(r6.w)
dbf.w r2,_b30
_b20: bsr.w black_screen
bsr.w fill_all
move.b #-1,auto_color
move.w #1,color1
move.w #1,color2
bclr.w #0,sr
_100: rts.w
fill_all:
cmp.b #$7f,3{s2}
bne.b _00
bsr.w hintergrund_halb
_00: cmp.b #$bf,3{s2}
bne.b _01
bsr.w hintergrund
_01: move.w r0,-(sp)
move.w r2,-(sp)
move.w r5,-(sp)
move.w #fillbuff,r5
move.w fillcount,r2
or.w r2,r2
beq.b _100
_10: move.w (r5.w),r0
move.w r0,xpos
move.w 2.b(r5.w),r0
move.w r0,ypos
move.w 4.b(r5.w),r0
move.b r0,color1
move.b m0,color2
addq.w #6,r5
bsr.w fill
bsr.w read_if_ch
beq.b _20
cmp.b #$49,m0
beq.b _100
cmp.b #$51,m0
beq.b _100
cmp.b #27,r0
beq.b _100
bsr.w read_ch
_20: dbf.w r2,_10
_100: move.w (sp)+,r5
move.w (sp)+,r2
move.w (sp)+,r0
rts.w
put_color:
tst.b #$ff,color_changed
beq.b _101
movem.w r0-r7,-(sp)
move.w #fillbuff,r5
move.w fillcount,r2
or.w r2,r2
beq.b _20
move.w r5,r6
_30: move.l 2.b(r5.w),r0
rol.l #12,r0
lsr.b #4,r0
ror.l #12,r0
lsl.w #4,r0
lsl.l #8,r0
add.w (r5.w),r0
move.l r0,(r6.w)
addq.w #6,r5
addq.w #4,r6
dbf.w r2,_30
_20: move.w #$3c00,r0 ; Datei oeffnen
move.w #name,r1
move.w #0,r2
trap #$21
bcs.w _100 ; Fehler? dann aufhoeren
move.w r0,r3 ; handle nach r3
move.w #$4000,r0
move.w fillcount,r2
lsl.w #2,r2
add.w #2+16*3,r2
move.w #palette,r1
trap #$21
move.w #$3e00,r0 ; Datei schliessen
trap #$21
_100: movem.w (sp)+,r0-r7
_101: rts.w
eingabe:
bsr.w read_ch
cmp.b #' ',r0
beq.w __00
cmp.b #$49,m0 ; naechstes Bild
beq.b _n00
cmp.b #$51,m0 ; vorheriges Bild
beq.b _v00
cmp.b #$52,m0 ; EINFG
beq.w _ein
cmp.b #$53,m0 ; DEL
beq.w _del
cmp.b #$11,m0 ; w
beq.w _w00
cmp.b #$47,m0 ; POS1
beq.w _uebersicht
cmp.b #$19,m0 ; p
bne.b _100
bsr.w hardcopy
_100: rts.w
__00: bsr.w hintergrund
bsr.w fill_all
br.w _100
_n00: bsr.w put_color
_n01: inc.b name1+1
cmp.b #'9',name1+1
bls.b _n10
move.b #'0',name1+1
inc.b name1
cmp.b #'9',name1
bls.b _n10
move.b #'0',name1
_n10: bsr.w get_bild
bcs.b _n01
br.b _100
_v00: bsr.w put_color
_v01: dec.b name1+1
cmp.b #'0',name1+1
bhs.b _v10
move.b #'9',name1+1
dec.b name1
cmp.b #'0',name1
bhs.b _v10
move.b #'9',name1
_v10: bsr.w get_bild
bcs.b _v01
br.b _100
_w00: bsr.w put_color
move.b #1,compri_flag
bsr.w get_bild
move.b #0,compri_flag
br.b _100
_ein: bsr.w get_bild
br.b _100
_del: move.w #0,fillcount
bsr.w black_screen
bsr.w fill_all
move.b #1,color_changed
br.w _100
_uebersicht:
bsr.w put_color
bsr.w white_screen
bsr.w black_gitter
bsr.w set_grau_palette
move.w #'00',name1
br.w _u61
_u60: bsr.w read_if_ch
beq.b _u64
bsr.w read_ch
cmp.b #27,r0
bne.b _u60
br.w _n10
_u64: inc.b name1+1
cmp.b #'9',name1+1
bls.b _u61
move.b #'0',name1+1
inc.b name1
cmp.b #'9',name1
bls.b _u61
move.b #'0',name1
bsr.w maus_on
_u70: bsr.w read_if_ch
beq.b _u74
bsr.w read_ch
cmp.b #$19,m0 ; p
bne.b _u79
bsr.w maus_off
bsr.w hardcopy
bsr.w maus_on
br.b _u70
_u79: cmp.b #27,r0
bne.w _u70
bsr.w maus_off
br.w _n10
_u74: bsr.w maus_read
tst.b #1,r0
beq.b _u70
bsr.w maus_off
move.w ypos,r0
move.b #48,r1
divs.b r1,m0|r0
cmp.b #9,r0
bls.b _u71
move.b #9,r0
_u71: add.b #'0',r0
move.b r0,name1
move.w xpos,r0
move.b #64,r1
divs.b r1,m0|r0
cmp.b #9,r0
bls.b _u72
move.b #9,r0
_u72: add.b #'0',r0
move.b r0,name1+1
_u73: bsr.w maus_read
tst.b #3,r0
bne.b _u73
br.w _n10
_u61: bsr.w get_dat
bcs.w _u60
eor.w r6,r6
move.w #64*48/4,r2
eor.l r0,r0
_u5: move.l r0,(r6.w){s3}
addq.l #4,r6
dbf.w r2,_u5
lea.w bit_tab,r3
eor.w r5,r5
eor.w r6,r6
move.w #48,r1
_u30: move.w #10,r4
_u20: move.w #16,r2
_u10: move.b (r5.w){s2},r0
lsr.b #3,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
move.w (r5.w){s2},r0
exg.b r0,m0
lsr.w #6,r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
inc.w r5
inc.w r6
move.b (r5.w){s2},r0
lsr.b #1,r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
move.w (r5.w){s2},r0
exg.b r0,m0
lsr.w #4,r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
inc.w r5
inc.w r6
move.w (r5.w){s2},r0
exg.b r0,m0
lsr.w #7,r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
inc.w r5
move.b (r5.w){s2},r0
lsr.b #2,r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
inc.w r6
move.w (r5.w){s2},r0
exg.b r0,m0
lsr.w #5,r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
inc.w r5
move.b (r5.w){s2},r0
and.b #$1f,r0
move.b (r3.w,r0.b),r0
add.b r0,(r6.w){s3}
inc.w r5
inc.w r6
dbf.w r2,_u10
subq.w #64,r6
dec.w r4
bne.b _u20
addq.w #64,r6
dec.w r1
bne.w _u30
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eor.l r4,r4
eor.w r5,r5
eor.l r3,r3
move.w #64*48,r2
eor.l r0,r0
_u81: move.b (r5.w){s3},r0
inc.w r5
cmp.b #6,r0
bls.b _u86
add.l r0,r3
inc.w r4
_u86: dbf.w r2,_u81
inc.l r3
inc.l r4
mulsq.l #10,r4,r4
eor.w r5,r5
move.w #64*48,r2
_u82: eor.l r0,r0
eor.l r1,r1
move.b (r5.w){s3},r0
muls.l r4,r0,r0
divu.l r3,r1|r0
cmpq.l #15,r0
bls.b _u85
move.b #15,r0
_u85: move.b r0,(r5.w){s3}
inc.w r5
dbf.w r2,_u82
eor.w r0,r0
move.b name1,r0
sub.b #'0',r0
move.w #80*48,r1
mulu.w r1,r0,r1|r0
move.w r0,r6
eor.w r0,r0
move.b name1+1,r0
sub.b #'0',r0
lsl.w #3,r0
add.w r0,r6
move.w #$3ce,r1
; move.b #$80,r3 ; nur falls ohne Rand
eor.w r5,r5
move.w #47,r4 ; 48 falls ohne Rand
_u52: move.w #63,r2 ; 64 falls ohne Rand
move.b #$80,r3 ; nur falls mit Rand
_u51: move.b (r5.w){s3},m0
inc.w r5
eor.b #$0f,m0
eor.b r0,r0
out.w r0,r1
move.b (r6.w){s1},r0
move.b r3,(r6.w){s1}
ror.b #1,r3
cmp.b #$80,r3
bne.b _u53
inc.w r6
_u53: dbf.w r2,_u51
inc.w r5 ; nur falls mit Rand
add.w #80-7,r6 ; 80-8 falls ohne Rand
dec.w r4
bne.b _u52
br.w _u60
bit_tab:dc.b 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
dc.b 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5
meld1: dc.b ' : Pruefsummenfehler',0
meld2: dc.b 'Nicht genuegend Speicher',0
meld3: dc.b 'bild00.dat nicht gefunden',0
main:
move.w #$100,r5
move.w #checksum,r6
eor.l r0,r0
_5: add.l (r5.w),r0
addq.l #4,r5
cmp.w r6,r5
bls.b _5
or.l r0,r0
beq.b _6
if 1
neg.l r0
bsr.w print_hex_l
move.w #meld1,r0
bsr.w print_string
br.w ende
endif
_6: move.w #$40,r0
move.w r0,s1
move.w 8{s1},r0 ; verwende LPT1:
move.w r0,LPT_DAT
inc.w r0
move.w r0,LPT_STAT
inc.w r0
move.w r0,LPT_COMM
move.w #$80,r5
move.b (r5.w),r0
_12: cmp.w #'m-',(r5.w)
beq.b _11
cmp.w #'c-',(r5.w)
beq.b _14
cmp.w #'2-',(r5.w)
beq.b _18
_19: inc.w r5
dec.b r0
bpl.b _12
br.b _13
_18: move.w 10{s1},r0 ; verwende LPT2:
move.w r0,LPT_DAT
inc.w r0
move.w r0,LPT_STAT
inc.w r0
move.w r0,LPT_COMM
br.b _19
_11: move.b #0,.no_change_color+2
_14: move.b #255,.no_mix_color+4
br.b _19
_13: move.w #$a000,r0
move.w r0,s1
move.w s0,r0
add.w #$1000,r0
move.w r0,s2
add.w #$1000,r0
move.w r0,s3 ; Daten hinter Codesegment
add.w #$1000,r0
cmp.w 2.w,r0 ; Speicherende aus dem PSP
blo.b _7
move.w #meld2,r0
bsr.w print_string
br.w ende
; s1 Bildspeicher
; s2 Bild
; s3 Fill-Puffer
_7: bsr.w init_graph
bsr.w maus_init
bsr.w get_bild
bcc.b _8
move.w #$03,r0
trap #$10
move.w #meld3,r0
bsr.w print_string
br.w ende
_8: move.w #1,color1
move.w #1,color2
bsr.w maus_on
_10: bsr.w maus_read
tst.b #$01,r0
beq.b _31
bsr.w maus_off
bsr.w fill
move.b #1,color_changed
tst.b #$ff,auto_color
beq.b _39
move.w color1,r0
_21: add.b #5,r0
and.w #$000f,r0
beq.b _21
cmp.b #15,r0
beq.b _21
move.w r0,color1
move.w r0,color2
br.b _39
_31: tst.b #$02,r0
beq.b _30
bsr.w maus_off
bsr.w new_color
_39: bsr.w maus_read
or.b r0,r0
bne.b _39
bsr.w maus_on
_30: bsr.w read_if_ch
beq.w _10
cmp.b #27,r0
beq.w _100
bsr.w maus_off
bsr.w eingabe
bsr.w maus_on
br.w _10
_99: bsr.w read_ch
_100: bsr.w put_color
; Textmode
move.w #$03,r0
trap #$10
br.w ende
even4
xpos: dc.l 0
ypos: dc.l 0
xpos1: dc.l 0
ypos1: dc.l 0
color: dc.w 0
color1: dc.w 0
color2: dc.w 0
auto_color: dc.w $00ff
color_changed: dc.b 0
compri_flag: dc.b 0
name: dc.b 'bild'
name1: dc.b '00'
name2: dc.b '.dat',0
palette_org:
dc.b 00,00,00, 63,00,00, 63,21,00, 63,31,15
dc.b 63,37,00, 63,42,00, 00,63,00, 00,63,31
dc.b 42,63,00, 00,15,63, 00,38,63, 37,63,63
dc.b 42,42,63, 63,63,00, 47,51,22, 63,63,63
palette_grau:
dc.b 00,00,00, 04,04,04, 08,08,08, 12,12,12
dc.b 16,16,16, 20,20,20, 24,24,24, 28,28,28
dc.b 32,32,32, 36,36,36, 40,40,40, 44,44,44
dc.b 48,48,48, 52,52,52, 56,56,56, 63,63,63
;**************************************************************************
;* *
;* Hardcopy VGA 640x480 16 Farben *
;* *
;**************************************************************************
LPT=0 ; 0 fuer Adresse $3bc (falls vorhanden LPT1:)
; 1 fuer Adresse $378 (meist LPT1:)
; 2 fuer Adresse $278 (meist LPT2:)
CONTRAST=1 ; 0 fuer Orginalhelligkeit
; 1 fuer Kontrastverstaerkung und Aufhellung
hardcopy:
movem.l r0-r7,-(sp)
move.w s0,-(sp)
move.w s1,-(sp)
move.w s6,r0
move.w r0,s0
move.w #$a000,r0
move.w r0,s1
move.w #$3c6,r1 ; Video DAC Pixel Mask Register
in.b r1,r0
move.b r0,r2
move.w #$00ff,r3
_20: move.b r3,r0
and.b r2,r0
move.w #$3c7,r1 ; Video DAC Pixel Address (Read Mode)
out.b r0,r1
move.w #$3c9,r1 ; Video DAC Pixel Data Register
bsr.w wait
in.b r1,r0 ; rot
and.w #$3f,r0
mulsq.w #39,r0,r4 ; 39/130 (0.30)
bsr.w wait
in.b r1,r0 ; gruen
and.w #$3f,r0
mulsq.w #77,r0,r0 ; 77/130 (0.59)
add.w r0,r4
bsr.w wait
in.b r1,r0 ; blau
and.w #$3f,r0
mulsq.w #14,r0,r0 ; 14/130 (0.11)
add.w r4,r0
lsr.w #5,r0
move.b r0,tab(r3.w)
dec.w r3
bpl.b _20
move.b tab+20,r0
move.b r0,tab+6
move.b tab+56,r0
move.b r0,tab+8
move.b tab+57,r0
move.b r0,tab+9
move.b tab+58,r0
move.b r0,tab+10
move.b tab+59,r0
move.b r0,tab+11
move.b tab+60,r0
move.b r0,tab+12
move.b tab+61,r0
move.b r0,tab+13
move.b tab+62,r0
move.b r0,tab+14
move.b tab+63,r0
move.b r0,tab+15
IF CONTRAST
; hoechste und niedrigste Helligkeit berechnen
move.w #$00ff,r3
move.w r3,r1 ; min
eor.w r2,r2 ; max
_50: move.b tab(r3.w),r0
cmp.b r1,r0
bhs.b _51
move.b r0,r1 ; min
_51: cmp.b r2,r0
bls.b _52
move.b r0,r2 ; max
_52: dec.w r3
bpl.b _50
move.w r1,r5 ; xmin
sub.b r1,r2 ; max-min
beq.b _70
; Kontrast erhoehen
move.w #$00ff,r3
move.w r3,r4
_53: movu.bw tab(r3.w),r0
sub.w r5,r0
muls.w r4,r0,r1|r0
divs.w r2,r1|r0
move.b r0,tab(r3.w) ; 255*(x-xmin) / (xmax-xmin)
dec.w r3
bpl.b _53
; mittlere Helligkeit des Bildes berechnen
move.w #tab,r3
move.w #320*200,r2
eor.l r0,r0
eor.l r4,r4
eor.w r5,r5
_54: move.b (r5.w){s1},r0
inc.w r5
move.b (r3.w,r0.b),r0
add.l r0,r4
dbf.w r2,_54
cmp.l #320*200*128,r4 ; Bild hell genug?
bhi.b _70
; Helligkeit erhoehen
move.w #$00ff,r3
move.w r3,r2
_55: movu.bw tab(r3.w),r0
move.w #510,r1
sub.w r0,r1
muls.w r1,r0,r1|r0
divs.w r2,r1|r0
move.b r0,tab(r3.w) ; x*(510-x)/255
dec.w r3
bpl.b _55
_70:
ENDIF
move.b #1,plot_ok
move.l #ps_ini,r1
bsr.w plot_string
move.w #tab,r3
move.l #640*480,r2
eor.l r5,r5
_30: bsr.w get_color
inc.l r5
move.b (r3.w,r0.b),r0
bsr.w plot_hex_byte
tst.b #$ff,plot_ok
beq.b _40 ; Timeout
dbf.l r2,_30
move.l #ps_end,r1
bsr.w plot_string
_40: move.w (sp)+,s1
move.w (sp)+,s0
movem.l (sp)+,r0-r7
rts.w
get_color:
move.w r2,-(sp)
move.w r3,-(sp)
move.l r5,-(sp)
move.l r5,r6
lsr.l #3,r6
and.w #7,r5
eor.w #7,r5
eor.w r4,r4
move.w #$3ce,r1 ; Graphics Controller Index Register
move.w #$0304,r0 ; Register 4 (Read Plane Select) = 3
move.w #4,r2
_20: out.w r0,r1
move.b (r6.w){s1},r3
add.w r4,r4
btst.w r5,r3
bcc.b _10
inc.w r4
_10: sub.w #$0100,r0
dbf.w r2,_20
move.w r4,r0
move.l (sp)+,r5
move.w (sp)+,r3
move.w (sp)+,r2
rts.w
wait: move.w r2,-(sp)
move.w #100,r2
_10: dbf.w r2,_10
move.w (sp)+,r2
rts.w
ps_ini:
dc.b 04
dc.b ' /zeile 640 string def'
dc.b ' 585 30 translate'; x-Richtung: 1 Bildpunkt = 5 Laserpunkte
dc.b ' 90 rotate' ; y-Richtung: 1 Bildpunkt = 5 Laserpunkte
dc.b ' 768 576 scale' ; (640*72/300)*5 , (480*72/300)*5
dc.b ' 640 480 8 [640 0 0 -480 0 480]'
dc.b ' {currentfile zeile readhexstring pop }'
dc.b ' image '
dc.b 0
ps_end:
dc.b ' showpage ',04,0
LPT_DAT: dc.w $3bc
LPT_STAT:dc.w $3bd
LPT_COMM:dc.w $3be
plot_ok: dc.b 0
plot_ch:
; gibt Zeichen in r0.b an Drucker aus
; Eingabe: r0.b : auszugebendes Zeichen
; Ausgabe: keine
; veraenderte Register: keine
tst.b #$ff,plot_ok
beq.b _102
move.w r0,-(sp)
move.w r1,-(sp)
move.l r2,-(sp)
move.b r0,m0
move.l #$10000000,r2
move.w LPT_STAT,r1
_10: in.b r1,r0
tst.b #$80,r0 ; BUSY
dbne.l r2,_10
beq.b _100 ; timeout
move.b m0,r0
move.w LPT_DAT,r1
out.b r0,r1 ; Datenbyte
move.w LPT_COMM,r1
in.b r1,r0
move.b r0,m0
move.b #$0f,r0
out.b r0,r1 ; STROBE aktiv
move.w #10,r2
_11: dbf.w r2,_11
move.b #$0e,r0
out.b r0,r1 ; STROBE inaktiv
move.l #$10000000,r2
move.w LPT_STAT,r1
_20: in.b r1,r0
tst.b #$80,r0 ; BUSY
dbne.l r2,_20
bne.b _30
move.b #0,plot_ok ; timeout
_30: move.b #$ff,r0
move.w LPT_DAT,r1
out.b r0,r1 ; Datenleitungen high
move.b m0,r0
move.w LPT_COMM,r1
out.b r0,r1
br.b _101
_100: move.b #0,plot_ok
_101: move.l (sp)+,r2
move.w (sp)+,r1
move.w (sp)+,r0
_102: rts.w
plot_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 plot_ch
br.b _20
_10: move.l (sp)+,r1
move.w (sp)+,r0
rts.w
plot_hex_byte:
; gibt Byte in Hexform an Drucker aus
; Eingabe: r0.b : auszugebendes Byte
; Ausgabe: keine
; veraenderte Register: keine
move.w r0,-(sp)
move.b r0,m0
lsr.b #4,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _10
add.b #'a'-'0'-10,r0
_10: bsr.w plot_ch
move.b m0,r0
and.b #$0f,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _20
add.b #'a'-'0'-10,r0
_20: bsr.w plot_ch
move.b #13,r0
bsr.w plot_ch
move.b #10,r0
bsr.w plot_ch
move.w (sp)+,r0
rts.w
;**************************************************************************
;* *
;* Ende Hardcopy VGA 640x480 16 Farben *
;* *
;**************************************************************************
even4
checksum: dc.l $65022674 ; muss am Ende des Codes stehen
palette: blk.b 3*16
fillcount: blk.w 1
fillbuff: blk.w 512*6
bild_save: blk.b 4*4*32*4*4
tab: blk.b 256 ; hier 256 Byte fuer Helligkeitstabelle