.TITLE DAMMAL .MCALL .GTLIN,.PRINT,.EXIT DAMMAL::JMP DEMO ; VALIDATE DAMM STRING IN R0; ZERO FLAG SET IF VALID DAMM: CLR R2 ; INTERIM DIGIT BR 2$ 1$: SUB #60,R1 ; DIGIT? BCS 3$ ; IF NOT, NOT VALID CMP R1,#^D9 BGT 3$ MOV R2,R3 ; CALCULATE DAMM TABLE INDEX ASL R3 ASL R3 ADD R2,R3 ASL R3 ADD R1,R3 MOVB 4$(R3),R2 ; GET NEW INTERIM DIGIT FROM TABLE 2$: MOVB (R0)+,R1 ; NEXT CHAR BNE 1$ ; END OF STRING? TST R2 ; IF SO, CHECK IF INTERIM DIGIT IS 0 3$: RTS PC 4$: .BYTE ^D0,^D3,^D1,^D7,^D5,^D9,^D8,^D6,^D4,^D2 .BYTE ^D7,^D0,^D9,^D2,^D1,^D5,^D4,^D8,^D6,^D3 .BYTE ^D4,^D2,^D0,^D6,^D8,^D7,^D1,^D3,^D5,^D9 .BYTE ^D1,^D7,^D5,^D0,^D9,^D8,^D3,^D4,^D2,^D6 .BYTE ^D6,^D1,^D2,^D3,^D0,^D4,^D5,^D9,^D7,^D8 .BYTE ^D3,^D6,^D7,^D4,^D2,^D0,^D9,^D5,^D8,^D1 .BYTE ^D5,^D8,^D6,^D9,^D7,^D2,^D0,^D1,^D3,^D4 .BYTE ^D8,^D9,^D4,^D5,^D3,^D6,^D2,^D0,^D1,^D7 .BYTE ^D9,^D4,^D4,^D8,^D6,^D1,^D7,^D2,^D0,^D5 .BYTE ^D2,^D5,^D8,^D1,^D4,^D3,^D6,^D7,^D9,^D0 DEMO: .GTLIN #5$ ; READ LINE MOV #5$,R0 TSTB (R0) ; EMPTY LINE? BNE 1$ .EXIT ; IF SO, STOP 1$: JSR PC,DAMM ; TEST LINE BNE 2$ ; FAIL? .PRINT #3$ BR DEMO 2$: .PRINT #4$ ; PASS? BR DEMO 3$: .ASCIZ /PASS/ 4$: .ASCIZ /FAIL/ 5$: .BLKB 200 .END DAMMAL