adc equ $d0000 pit equ $e0000 PGCR equ $0 PSRR equ $1 PADDR equ $2 PBDDR equ $3 PCDDR equ $4 PACR equ $6 PBCR equ $7 PADR equ $8 PBDR equ $9 PCDR equ $c PSR equ $d TCR equ $10 cNTRH equ $17 CNTRM equ $18 CNTRL equ $19 TSR equ $20 stack equ $1400 global equ $1800 screen equ $2000 $1f40 bytes buf equ $4000 old equ $6000 rombeg equ $80000 line equ 0 col equ 2 row equ 4 width equ 6 av equ 8 tick equ 10 bufptr equ 12 org 0 entry dc.l $1400 initial SP dc.l rombeg+main initial PC dc.l 0 dc.l 0 main move #$2700,sr lea.l pit,a3 global usage! move.b #$84,PBCR(a3) submode 1X: bit IO, H4 input & irq enable move.b #$ff,PBDDR(a3) uitgang move.b #$80,PACR(a3) move.b #$00,PADDR(a3) ingang move.b #$ff,PCDDR(a3) uitgang move.b #$30,PGCR(a3) H34 enabled, active low move.b #$08,PSRR(a3) autovec irqs move.b #$14,TCR(a3) count ext clock, timer disabled lea.l global,a5 global data pointer clr line(a5) clr line count clr tick(a5) clr av(a5) lea.l buf,a0 lea.l old,a1 move.l a0,bufptr(a5) move #$1000-1,d1 clrbuf move #0,(a0)+ move #0,(a1)+ dbra d1,clrbuf move #800,(buf) move #800,(buf+$1000) bsr cls clear screen bsr frame lea.l int2(pc),a0 move.l a0,$68 lea.l int5(pc),a0 move.l a0,$74 move.l a0,$7c irq7 (2+5 geeft spur 7 :-( ) andi #$f0ff,sr enable irq's loop tst av(a5) bne.s loop movea.l bufptr(a5),a1 lea.l old,a2 move.l a1,d0 addi #$1000,d0 4000 => 5000 => 6000 andi #$4000,d0 6000 => 4000 move.l d0,bufptr(a5) move #8,av(a5) moveq #0,d0 start x-coord move (a2),d5 move (a1),d3 clr (a1)+ move d3,d7 maxy move d0,d6 maxx lsr #4,d3 8 time averaged, + 1 to scale move d3,d2 lsr #2,d2 add d2,d3 move d3,(a2)+ newlp move (a2),d2 move d5,d1 move d2,d5 bsr vline erase former move d3,d1 move (a1),d2 clr (a1)+ cmp d2,d7 bpl.s lp1 move d2,d7 move d0,d6 lp1 lsr #4,d2 move d2,d3 lsr #2,d3 add d3,d2 move d2,d3 move d2,(a2)+ bsr vline draw new line addq #1,d0 increment x-coord cmpi #400,d0 end of screen? bne.s newlp no.. next point bra loop cls lea.l screen,a0 clear screen move #8000-1,d0 moveq #0,d2 clbyt move.b d2,(a0)+ dbra d0,clbyt clr col(a5) cursor home clr row(a5) rts frame lea.l screen,a0 draw a frame 400x160 moveq #6,d2 ylp adda #1000,a0 20,40,60,80,100,120,140 move.l a0,a1 moveq #8,d1 xlp adda #5,a0 1005,10,15,20,25,30,35,40,45 move.b #$02,-50(a0) move.b #$07,(a0) move.b #$02,50(a0) dbra d1,xlp move.l a1,a0 dbra d2,ylp rts * * draw vertical line from (d0,d1) to (d0,d2) * vline movem.l d0-d3,-(sp) lea.l (screen+7950),a0 cmp d1,d2 bpl.s vok exg d1,d2 vok sub d1,d2 mulu #50,d1 suba d1,a0 move d0,d1 lsr #3,d0 adda d0,a0 move.b #$80,d3 andi.b #$07,d1 lsr.b d1,d3 vlp eor.b d3,(a0) suba #50,a0 subq #1,d2 bpl.s vlp movem.l (sp)+,d0-d3 rts printf movem.l d0-d4/a0,-(sp) moveq #0,d0 pr1 move.b (a0)+,d0 beq.s pr9 cmpi.b #'%',d0 bne.s pr2 move.b (a0)+,d0 cmpi.b #'d',d0 bne.s pr6 move.l (sp),d0 bsr prdec bra.s pr1 pr6 cmpi.b #'x',d0 hex (long) bne.s pr5 move.l (sp),d0 bsr prhex bra.s pr1 pr5 cmpi.b #'b',d0 byte bne.s pr3 move.l (sp),d0 bsr prbyt bra.s pr1 pr3 cmpi.b #'s',d0 bne.s pr4 move.l a0,-(sp) move.l d0,a0 bsr printf move.l (sp)+,a0 bra.s pr1 pr4 cmpi.b #'%',d0 bne.s pr1 pr2 bsr putch bra.s pr1 pr9 movem.l (sp)+,d0-d4/a0 rts prdec moveq #0,d3 prdec1 addq #1,d3 divu #10,d0 swap d0 move.b d0,-(sp) move #0,d0 swap d0 bne.s prdec1 prdec2 move.b (sp)+,d0 addi.b #$30,d0 bsr putch subq #1,d3 bne.s prdec2 prdec9 rts prhex moveq #0,d2 skip leading zero's moveq #7,d3 8 nibbles move.l d0,d1 prhex1 moveq #0,d0 moveq #3,d4 4 bits in nibble prhex3 roxl.l #1,d1 roxl #1,d0 dbra d4,prhex3 tst d0 is nibble zero? bne.s prhex5 no: just print it tst d2 else, is it a leading zero? beq.s prhex4 yes, don't print it prhex5 moveq #1,d2 print nibble bsr prnib prhex4 dbra d3,prhex1 rts prbyt move.l d0,d1 lsr.b #4,d0 bsr prnib move.b d1,d0 prnib andi.b #$f,d0 addi.b #$30,d0 cmpi.b #$3a,d0 bmi.s prnib2 addi.b #$7,d0 prnib2 bsr.s putch rts putch movem.l d0-d4/a0-a1,-(sp) move col(a5),d2 cmpi.b #$d,d0 bne.s lf moveq #0,d2 bra.s put5 lf cmpi.b #$0a,d0 beq.s put3 ascii lea.l charmap(pc),a0 subi.b #$20,d0 bpl.s put1 moveq #'?',d0 put1 lsl #3,d0 adda d0,a0 lea.l screen,a1 adda d2,a1 move row(a5),d1 mulu #400,d1 adda d1,a1 moveq #7,d1 put2 move.b (a0)+,(a1) adda #50,a1 dbra d1,put2 addq #1,d2 cmpi #50,d2 blt.s put5 moveq #0,d2 put3 move row(a5),d1 addq #1,d1 cmpi #20,d1 blt.s put4 scroll lea.l screen,a0 lea.l 400(a0),a1 move #7599,d1 scrl move.b (a1)+,(a0)+ dbra d1,scrl moveq #0,d0 move #399,d1 clln move.b d0,(a0)+ dbra d1,clln subq #1,d1 put4 move d1,row(a5) put5 move d2,col(a5) movem.l (sp)+,d0-d4/a0-a1 rts int2 movem.l d0/a0,-(sp) move.b #$FF,PSR(a3) ($08) reset H4status move tick(a5),width(a5) movea.l bufptr(a5),a0 get current buffer move #0,(a0) reset index move av(a5),d0 subq #1,d0 bmi.s int29 move d0,av(a5) int29 movem.l (sp)+,d0/a0 rte int5 movem.l d0-d1/a0-a2,-(sp) 12960/2048 => 158 usec addi #1,tick(a5) tst av(a5) 8 times averaged? beq.s cont wait for screen display movea.l bufptr(a5),a0 move (a0)+,d1 cmpi #800,d1 bpl.s cont lea.l adc,a1 move.b (a1),d0 read byte from adc andi #$ff,d0 add d0,(a0,d1.w) store as word addq #2,d1 move d1,-2(a0) move.b #0,(a1) cont lea.l screen,a0 lea.l PCDR(a3),a1 lea.l PBDR(a3),a2 port B move.w line(a5),d0 !!!!!!!!!!!!!!!!!! adda d0,a0 calc offset move.b (a0)+,(a2) first byte moveq #0,d1 default clreared DI move.w line(a5),d0 bne.s int51 moveq #2,d1 int51 move.b d1,(a1) set DI if line==0 ori.b #1,d1 move.b d1,(a1) set CL1 andi.b #-2,d1 clear CL1 move.b d1,(a1) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) move.b (a0)+,(a2) addi #50,d0 cmpi #8000,d0 160 lines of 50 bytes bne.s int59 moveq #0,d0 line=0 int59 move d0,line(a5) movem.l (sp)+,d0-d1/a0-a2 rte charmap dc.b $00,$00,$00,$00,$00,$00,$00,$00 space dc.b $04,$04,$04,$04,$04,$00,$04,$00 ! dc.b $0a,$0a,$0a,$00,$00,$00,$00,$00 " dc.b $0a,$0a,$1f,$0a,$1f,$0a,$0a,$00 # dc.b $04,$0f,$14,$0e,$05,$1e,$04,$00 $ dc.b $18,$19,$02,$04,$08,$13,$03,$00 % dc.b $0c,$12,$14,$08,$15,$12,$0d,$00 & dc.b $02,$03,$01,$02,$00,$00,$00,$00 ' dc.b $02,$04,$08,$08,$08,$04,$02,$00 ( dc.b $08,$04,$02,$02,$02,$04,$08,$00 ) dc.b $04,$15,$0e,$1f,$0e,$15,$04,$00 * dc.b $00,$04,$04,$1f,$04,$04,$00,$00 + dc.b $00,$00,$00,$00,$03,$03,$01,$02 , dc.b $00,$00,$00,$1f,$00,$00,$00,$00 - dc.b $00,$00,$00,$00,$00,$0c,$0c,$00 . dc.b $00,$01,$02,$04,$08,$10,$00,$00 / dc.b $0c,$12,$12,$12,$12,$12,$0c,$00 0 dc.b $04,$0c,$04,$04,$04,$04,$04,$00 1 dc.b $0e,$11,$01,$06,$08,$10,$1f,$00 2 dc.b $1f,$01,$02,$0c,$01,$01,$1e,$00 3 dc.b $12,$12,$12,$1f,$02,$02,$02,$00 4 dc.b $1f,$10,$1e,$01,$01,$01,$1e,$00 5 dc.b $06,$08,$10,$1e,$11,$11,$0e,$00 6 dc.b $1f,$01,$02,$04,$08,$10,$10,$00 7 dc.b $0e,$11,$11,$0e,$11,$11,$0e,$00 8 dc.b $0e,$11,$11,$0f,$01,$02,$06,$00 9 dc.b $00,$00,$00,$02,$00,$00,$02,$00 : dc.b $00,$00,$00,$02,$00,$00,$02,$04 ; dc.b $01,$02,$04,$08,$04,$02,$01,$00 < dc.b $00,$00,$1f,$00,$1f,$00,$00,$00 = dc.b $08,$04,$02,$01,$02,$04,$08,$00 > dc.b $0e,$11,$01,$02,$04,$00,$04,$00 ? dc.b $0e,$11,$17,$15,$17,$10,$0f,$00 @ dc.b $0e,$11,$11,$1f,$11,$11,$11,$00 A dc.b $1e,$11,$11,$1e,$11,$11,$1e,$00 B dc.b $0e,$11,$10,$10,$10,$11,$0e,$00 C dc.b $1e,$11,$11,$11,$11,$11,$1e,$00 D dc.b $1f,$10,$10,$1e,$10,$10,$1f,$00 E dc.b $1f,$10,$10,$1e,$10,$10,$10,$00 F dc.b $0e,$11,$10,$17,$11,$11,$0f,$00 G dc.b $11,$11,$11,$1f,$11,$11,$11,$00 H dc.b $0e,$04,$04,$04,$04,$04,$0e,$00 I dc.b $01,$01,$01,$01,$01,$11,$0e,$00 J dc.b $11,$12,$14,$18,$14,$12,$11,$00 K dc.b $10,$10,$10,$10,$10,$10,$1f,$00 L dc.b $11,$1b,$15,$15,$11,$11,$11,$00 M dc.b $11,$19,$15,$13,$11,$11,$11,$00 N dc.b $0e,$11,$11,$11,$11,$11,$0e,$00 O dc.b $1e,$11,$11,$1e,$10,$10,$10,$00 P dc.b $0e,$11,$11,$11,$15,$12,$0d,$00 Q dc.b $1e,$11,$11,$1e,$14,$12,$11,$00 R dc.b $0e,$11,$10,$0e,$01,$11,$0e,$00 S dc.b $1f,$04,$04,$04,$04,$04,$04,$00 T dc.b $11,$11,$11,$11,$11,$11,$0e,$00 U dc.b $11,$11,$11,$11,$11,$0a,$04,$00 V dc.b $11,$11,$11,$15,$15,$1b,$11,$00 W dc.b $11,$11,$0a,$04,$0a,$11,$11,$00 X dc.b $11,$11,$0a,$04,$04,$04,$04,$00 Y dc.b $1f,$01,$02,$04,$08,$10,$1f,$00 Z dc.b $0a,$0a,$1f,$0a,$1f,$0a,$0a,$00 [ dc.b $00,$10,$08,$04,$02,$01,$00,$00 \ dc.b $0e,$02,$02,$02,$02,$02,$0e,$00 ] dc.b $04,$0a,$11,$00,$00,$00,$00,$00 ^ dc.b $00,$00,$00,$00,$00,$00,$00,$1f _ dc.b $0c,$0c,$08,$04,$00,$00,$00,$00 ` dc.b $00,$00,$0c,$02,$1e,$12,$1f,$00 a dc.b $08,$08,$0f,$09,$09,$09,$1e,$00 b dc.b $00,$00,$06,$09,$08,$08,$07,$00 c dc.b $02,$02,$0e,$12,$12,$12,$0f,$00 d dc.b $00,$00,$06,$09,$0e,$08,$07,$00 e dc.b $00,$03,$04,$0e,$04,$04,$04,$00 f dc.b $00,$00,$07,$09,$09,$07,$01,$0e g dc.b $08,$08,$0E,$09,$09,$09,$09,$00 h dc.b $00,$04,$00,$04,$04,$04,$04,$00 i dc.b $00,$02,$00,$02,$02,$02,$0a,$04 j dc.b $00,$08,$09,$0a,$0c,$0a,$09,$00 k dc.b $04,$04,$04,$04,$04,$04,$04,$00 l dc.b $00,$00,$1e,$15,$15,$15,$15,$00 m dc.b $00,$00,$0e,$09,$09,$09,$09,$00 n dc.b $00,$00,$06,$09,$09,$09,$06,$00 o dc.b $00,$00,$0e,$09,$09,$0e,$08,$08 p dc.b $00,$00,$0e,$12,$12,$0e,$02,$03 q dc.b $00,$00,$0b,$0c,$08,$08,$08,$00 r dc.b $00,$00,$07,$08,$06,$01,$0e,$00 s dc.b $00,$04,$0e,$04,$04,$05,$02,$00 t dc.b $00,$00,$12,$12,$12,$12,$0f,$00 u dc.b $00,$00,$11,$11,$0a,$0a,$04,$00 v dc.b $00,$00,$11,$11,$15,$15,$0a,$00 w dc.b $00,$00,$19,$06,$04,$0c,$13,$00 x dc.b $00,$00,$09,$09,$09,$07,$01,$03 y dc.b $00,$00,$0f,$02,$04,$08,$1e,$00 z dc.b $03,$04,$04,$08,$04,$04,$03,$00 { dc.b $04,$04,$04,$00,$04,$04,$04,$00 | dc.b $0c,$02,$02,$01,$02,$02,$0c,$00 } dc.b $00,$00,$00,$00,$00,$00,$1f,$00 _ dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$00 str dc.b 'adc = %x',0