ttl Boot Processor Initial Test Program. ****************************************** * * * Boot Processor Initial Test Program. * * * * Checks programmed IO from keyboard. * * Checks mains switch sensing * * Checks Local Ram. * * Copied from fred:prt.asm 6/12/84 JHB * * * ****************************************** bin readsym macro \* ds.w 0 \@ btst #0,acias beq \@ move.b aciad,\1 endm gethex macro readsym \2 printsym \2 cmp.b #$40,\2 bls.s \@na or.b #$20,\2 \@na sub.b #'0',\2 bmi.s \1 cmp.b #9,\2 bls.s \@got sub.b #'a'-'0'-10,\2 cmp.b #10,\2 blo.s \1 cmp.b #15,\2 bhi.s \1 \@got equ * endm readhex macro \@a clr.l \1 gethex \@a,\2 \@b lsl.l #4,\1 or.b \2,\1 gethex \@c,\2 bra \@b \@c equ * endm printsym macro \* ds.w 0 \@ btst #1,acias beq \@ move.b \1,aciad endm printstr macro \* clr.w d7 lea s\@,a6 move.b (a6)+,d7 sub.w #1,d7 bmi.s n\@ l\@ printsym (a6)+ dbra d7,l\@ bra.s n\@ s\@ dc.b e\@-*-1,\1 e\@ equ * n\@ ds.w 0 endm check macro eor d0,d1 beq.s \@ * move.b #$51,acias * move.b #$11,acias move a0,d2 swap d3 or d2,d3 swap d3 not d2 or d2,d3 move d0,d2 not d2 and d1,d2 and d0,d1 swap d1 or d2,d1 swap d1 swap d2 or d1,d2 swap d2 \@ equ * endm printbin macro swap \1 move #15,d7 \@l rol #1,\1 bcc.s \@z printsym #'1' bra.s \@o \@z printsym #'0' \@o dbra d7,\@l swap \1 endm printhex macro \* swap \1 move #3,d7 l\@ rol #4,\1 move.b \1,d6 and.b #$0F,d6 add.b #'0',d6 cmp.b #'9',d6 bls.s d\@ add.b #'A'-'9'-1,d6 d\@ printsym d6 dbra d7,l\@ swap \1 endm string macro \* dc.b \@-*-1,\1 \@ equ * endm bs equ $08 lf equ $0A ff equ $0B cr equ $0D can equ $18 esc equ $1B del equ $7F memlimit equ $600000 org $1000 resetsp dc.l $4000 resetpc dc.l start berr dc.l berrhand addrerr dc.l addrhand illinst dc.l illihand zerodiv dc.l zdivhand chkfail dc.l chkfhand trapoflo dc.l trpvhand priviol dc.l privhand trace dc.l trachand emul1010 dc.l illihand emul1111 dc.l illihand ds.l 12 spurious dc.l intrhand auto1 dc.l int1hand auto2 dc.l int2hand auto3 dc.l int3hand auto4 dc.l int4hand auto5 dc.l int5hand auto6 dc.l int6hand auto7 dc.l int7hand trap0 dc.l illihand trap1 dc.l illihand trap2 dc.l illihand trap3 dc.l illihand trap4 dc.l illihand trap5 dc.l illihand trap6 dc.l illihand trap7 dc.l illihand trap8 dc.l illihand trap9 dc.l illihand trapA dc.l illihand trapB dc.l illihand trapC dc.l illihand trapD dc.l illihand trapE dc.l illihand trapF dc.l illihand ds.l 16 switches equ $400031 acias equ $4000C1 aciad equ $4000C3 mapreg0 equ $080000 mapreg1 equ $180000 mapreg2 equ $280000 mapreg3 equ $380000 mapreg4 equ $480000 mapreg5 equ $580000 mapreg6 equ $680000 mapreg7 equ $780000 ************************************************* * * * System initialisation * * ------ -------------- * * * ************************************************* berrhand printstr callstop printstr <' Error',cr,lf> stop bra stop addrhand printstr bra callstop illihand printstr bra callstop zdivhand printstr bra callstop chkfhand printstr bra callstop trpvhand printstr bra callstop privhand printstr bra callstop trachand printstr bra callstop intrhand printstr bra callstop intrmess string intrban string int1hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #1,d0 bne chkstate swap d0 bset #1,d0 swap d0 bra chkstate int2hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #2,d0 bne chkstate swap d0 bset #2,d0 swap d0 bra chkstate int3hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #3,d0 bne chkstate swap d0 bset #3,d0 swap d0 bra chkstate int4hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #4,d0 bne chkstate swap d0 bset #4,d0 swap d0 bra chkstate int5hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #5,d0 bne chkstate swap d0 bset #5,d0 swap d0 bra chkstate int6hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #6,d0 bne chkstate swap d0 bset #6,d0 swap d0 bra chkstate int7hand cmp.l #intstart,2(sp) bls intrhand cmp.l #intend,2(sp) bhi intrhand bclr.l #7,d0 bne chkstate swap d0 bset #7,d0 swap d0 chkstate move.w d0,d1 lsl.w #8,d1 move.w d0,d3 lsr.w #1,d3 swap d2 move.w #7,d2 move.b #$A3,d1 move.l #$FF0002,a1 bra.s chkstlps chkstlp clr.b d1 lsr.w #1,d3 roxr.b #1,d1 chkstlps move.w (a1),d4 eor.w d1,d4 move.w d1,d5 not.w d5 and.w d4,d5 and.w d1,d4 swap d5 or.w d4,d5 swap d5 swap d4 or.w d5,d4 swap d4 add.l #$2000,a1 dbra d2,chkstlp swap d2 rte start reset move.b #$03,acias Initialise RS232 move.b #$11,acias port. ************************************************* * * * Test 1 * * * * Send Barber Pole Pattern to Screen. * * Continue until any Key is depressed. * * * ************************************************* again move.b #' ',d2 newlne printsym #cr printsym #lf btst #0,acias bne part2 move #79,d1 move.b d2,d0 add.b #1,d2 cmp.b #$7F,d2 bne loop move.b #' ',d2 loop printsym d0 add.b #1,d0 cmp.b #$7F,d0 bne.s looptst move.b #' ',d0 looptst dbra d1,loop bra newlne ****************************************** * * * Test 2 * * * * Check characters are echoed from * * Keyboard correctly. * * Continue until blank line is entered. * * * ****************************************** part2 move.b aciad,d0 Throw away character. printstr echoloop readsym d0 cmp.b #' ',d0 blo.s gotconch contecho printsym d0 bra echoloop gotconch printsym #cr printsym #lf readsym d0 cmp.b #' ',d0 bhs contecho printstr clr.w d0 putswit swap d0 printhex d0 swap d0 printsym #cr readswit btst.b #0,acias bne.s part4 move.b switches,d1 and.w #$000F,d1 cmp.w d0,d1 beq readswit move.w d1,d0 bra putswit part4 printstr printstr <' Equal limits terminates.',cr,lf> part4a move.b aciad,d0 clr.l d4 clr.l d5 printstr readhex d4,d0 printstr readhex d5,d0 sub.l d4,d5 beq part5 bmi part4a lsr.w #1,d5 printstr clr.l d0 clr.l d1 clr.l d2 clr.l d3 move.l d4,a0 move d5,d7 lclrloop move d0,(a0)+ dbra d7,lclrloop bra lprint mainloop move.l d4,a0 move d5,d7 lscnloop swap d0 move (a0),d1 check swap d0 move d0,(a0) move (a0),d1 check add.l #2,a0 dbra d7,lscnloop lprint printsym #cr printhex d0 printsym <#' '> printhex d1 printsym <#' '> printhex d2 printsym <#' '> printhex d3 printsym <#' '> swap d3 printhex d3 swap d3 move d0,d1 swap d0 move d1,d0 swap d0 add #$100,d0 add.b #1,d0 btst.b #0,acias bne part4a bra mainloop part5 lea intrmess,a0 bsr printstr lea intrban,a0 bsr printstr move.w #$0080,mapreg0 move.w #$0090,mapreg1 move.w #$00A0,mapreg2 move.w #$00B0,mapreg3 move.w #$00C0,mapreg4 move.w #$00D0,mapreg5 move.w #$00E0,mapreg6 move.w #$00F0,mapreg7 clr.l d0 clr.l d4 clr.l d5 clr.l d6 clr.l d7 intrloop move.w d7,d0 move.w d0,d1 move.l #$FF0003,a0 move.w #7,d2 intrsulp lsr.w #1,d1 bcc.s nointr intstart move.b #0,(a0) nointr lea $2000(a0),a0 dbra d2,intrsulp move.w #$2000,sr intend move.w #$2700,sr or.w d0,d6 move.b #cr,d0 bsr printsym move.w d7,d0 bsr prthexw move.w d6,d0 bsr prtshexw swap d0 bsr prtshexw swap d0 swap d4 move.w d4,d0 bsr prtshexw swap d4 swap d5 move.w d5,d0 bsr prtshexw swap d5 add.b #2,d7 btst.b #0,acias beq intrloop move.b aciad,d0 move.w #0,waitsize lea readlog,a0 move #143,d7 clr.l d4 clr.l d5 initloop move.l d4,(a0)+ dbra d7,initloop lea gropexit,a0 move.l a0,berr move.l #$800000,a0 lea lowacc,a2 move.w #$FFFF,d7 move.w #(memlimit-1)>>18,d6 clr.l d2 move.l d2,(a2) move.l d2,4(a2) clr.l d3 rclrloop move.l d2,(a0)+ dbra d7,rclrloop dbra d6,rclrloop gropexit move.l resetsp,sp move.l #(memlimit-1)>>18,d7 sub.l d6,d7 lsl.l #2,d7 sub.l #1,d7 lea memsize,a0 move.l d7,(a0) * lea rprint,a0 * move.l #$800000,a1 * move #(progsize>>1)-1,d7 *moveloop move.w (a0)+,(a1)+ * dbra d7,moveloop lea clrscrn,a0 bsr printstr lea parehand,a0 move.l a0,berr * jmp $800000 rprint move.l d2,-(sp) btst.b #2,acias bne noprint lea patmess,a0 bsr printstr move.l (sp),d0 bsr prtbinw lea pickmess,a0 bsr printstr move.l d4,d0 bsr prtbinw lea dropmess,a0 bsr printstr move.l d5,d0 bsr prtbinw lea lowmess,a0 bsr printstr move.l lowacc,d0 bsr prtbinl lea highmess,a0 bsr printstr move.l highacc,d0 bsr prtbinl lea readlog+576,a6 move #1,d3 plogl0 move #7,d7 bsr newline plogl1 move #8,d6 bsr newline bra.s plogl2e plogl2 bsr space plogl2e move.l -(a6),d0 bsr prthexl dbra d6,plogl2 dbra d7,plogl1 dbra d3,plogl0 btst.b #0,acias beq.s commonpr move.b aciad,d0 cmp.b #$7F,d0 bne.s commonpr move.l #0,d0 move.l #0,d4 move.l #0,d5 move.l #143,d6 lea readlog,a6 tclrlp move.l d0,(a6)+ dbra d6,tclrlp bra.s commonpr noprint move.b #$03,acias move.b #$11,acias commonpr move.l (sp)+,d3 move.l d3,d2 shloop add.b #1,d2 bne.s mainpart move.w waitsize,d6 bne.s waitnotz move.l #$20,d6 waitnotz lsl.w d6 move.w d6,waitsize *mainpart move.l #$800000+progsize,a6 * move.w #$FFFF-progsize>>2,d7 mainpart move.l #$800000,a6 move.b d2,d0 and.w #$00FF,d2 parsetlp lsr.b d0 bcc.s noparinv eor.w #$0100,d2 noparinv dbra d6,parsetlp move.w #$FFFF,d7 move.w waitsize,d6 memtstwt dbra d7,memtstwt dbra d6,memtstwt move.l #$FFFF,d7 move.l memsize,d6 rscnloop exg d2,d3 lea readlog,a0 move.b (a6),d1 eor.b d2,d1 beq.s finea * move.b #$51,acias * move.b #$11,acias bsr check finea exg d2,d3 lea writelog,a0 move.b d2,(a6) move.b (a6),d1 eor.b d2,d1 beq.s fineb * move.b #$51,acias * move.b #$11,acias bsr check fineb add.l #1,a6 dbra d7,rscnloop dbra d6,rscnloop bra rprint check move.b d2,d0 not.b d0 and.b d1,d0 or.b d0,d4 move.b d2,d0 and.b d1,d0 or.b d0,d5 move.l a6,d0 not.l d0 or.l d0,(a2) move.l a6,d0 or.l d0,4(a2) and.w #7,d0 mulu.w #36,d0 lea 4(a0,d0),a0 move #7,d0 logloop lsr.l d1 bcc.s noerror add.l #1,(a0) noerror add.l #4,a0 dbra d0,logloop rts parehand move.l 10(sp),d0 and.w #7,d0 mulu.w #36,d0 add.l #1,0(a0,d0) move.w d2,d0 and.w #$0100,d0 or.w d0,d4 eor.w #$0100,d0 or.w d0,d5 add.l #58,sp lea readlog,a1 cmp.l a0,a1 beq finea bra fineb printsym move sr,-(sp) printsyl btst #1,acias beq printsyl move.b d0,aciad rtr printstr move sr,-(sp) movem.l d0-d1/a0,-(sp) clr.w d1 move.b (a0)+,d1 bra.s printsts printstl move.b (a0)+,d0 bsr printsym printsts dbra d1,printstl movem.l (sp)+,d0-d1/a0 rtr newline move sr,-(sp) move d0,-(sp) move.b #cr,d0 bsr printsym move.b #lf,d0 bsr printsym move (sp)+,d0 rtr space move sr,-(sp) move d0,-(sp) move.b #' ',d0 bsr printsym move (sp)+,d0 rtr puthexn and.b #$0F,d0 add.b #'0',d0 cmp.b #'9',d0 bls putdig add.b #'A'-'9'-1,d0 putdig jmp printsym prthexn move sr,-(sp) move d0,-(sp) bra.s nentry prtshexb bsr space prthexb move sr,-(sp) move d0,-(sp) wentry ror.b #4,d0 bsr puthexn move (sp),d0 nentry bsr puthexn move (sp)+,d0 rtr prtshexw bsr space prthexw move sr,-(sp) lentry move d0,-(sp) rol #8,d0 bsr prthexb move (sp),d0 bra wentry prtshexl bsr space prthexl move sr,-(sp) swap d0 bsr prthexw swap d0 bra lentry prtcarry bcc.s prtzero move d0,-(sp) move.b #'1',d0 bra prtcarrr prtzero move d0,-(sp) move.b #'0',d0 prtcarrr bsr printsym move (sp)+,d0 rts prtsbinl bsr space prtbinl move sr,-(sp) move d1,-(sp) move #31,d1 prtbllp rol.l #1,d0 bsr prtcarry dbra d1,prtbllp move (sp)+,d1 rtr prtsbinw bsr space prtbinw move sr,-(sp) move d1,-(sp) move #15,d1 prtbwlp rol #1,d0 bsr prtcarry dbra d1,prtbwlp move (sp)+,d1 rtr prtsbinb bsr space prtbinb move sr,-(sp) move d1,-(sp) move #7,d1 prtbblp rol.b #1,d0 bsr.s prtcarry dbra d1,prtbblp move (sp)+,d1 rtr clrscrn string patmess string pickmess string dropmess string lowmess string highmess string ds.w 0 progsize equ *-rprint waitsize ds.w 1 memsize ds.l 1 lowacc ds.l 1 highacc ds.l 1 readlog ds.l 72 writelog ds.l 72 end