; printers.asm 12/25/2011 dwg - ; Copyright (C) 2011-2012 Douglas Goodall All Rights Reserved. ; For non-commercial use by N8VEM community maclib portab maclib cpmbdos extrn hexref cseg public pr$h$nyb pr$h$nyb: enter 0000+F5 PUSH PSW 0001+C5 PUSH B 0002+D5 PUSH D 0003+E5 PUSH H 0004 E60F ani 15 0006 210000 lxi h,hexref 0009 85 add l 000A 6F mov l,a 000B 5E mov e,m 000C 0E02 mvi c,CWRITE 000E CD0500 call BDOS leave 0011+E1 POP H 0012+D1 POP D 0013+C1 POP B 0014+F1 POP PSW 0015 C9 ret public pr$h$byte pr$h$byte: enter 0016+F5 PUSH PSW 0017+C5 PUSH B 0018+D5 PUSH D 0019+E5 PUSH H 001A F5 push psw 001B 0F rrc 001C 0F rrc 001D 0F rrc 001E 0F rrc 001F CD0000 call pr$h$nyb 0022 F1 pop psw 0023 CD0000 call pr$h$nyb leave 0026+E1 POP H 0027+D1 POP D 0028+C1 POP B 0029+F1 POP PSW 002A C9 ret public pr$h$word pr$h$word: enter 002B+F5 PUSH PSW 002C+C5 PUSH B 002D+D5 PUSH D 002E+E5 PUSH H 002F E5 push h 0030 7C mov a,h 0031 CD1600 call pr$h$byte 0034 E1 pop h 0035 7D mov a,l 0036 CD1600 call pr$h$byte leave 0039+E1 POP H 003A+D1 POP D 003B+C1 POP B 003C+F1 POP PSW 003D C9 ret public pr$d$word pr$d$word: enter 003E+F5 PUSH PSW 003F+C5 PUSH B 0040+D5 PUSH D 0041+E5 PUSH H 0042 CD4A00 call PDEC leave 0045+E1 POP H 0046+D1 POP D 0047+C1 POP B 0048+F1 POP PSW 0049 C9 ret ; From the "99 Bottles of Beer" web page at ; http://99-bottles-of-beer.net/language-assembler-(8080-8085)-764.html ; adapted for use in RomWBW/Apps with rmac syntax ; PRINT HL AS A DECIMAL NUMBER (0-65535) ; public PDEC public PDEC,PDEC1,PDEC2,PDEC3,PDEC4,PDEC5 004A AF PDEC: XRA A ; LEADING ZERO FLAG 004B 320100 STA PDEC5 004E 01F0D8 LXI B, -10000 0051 CD6C00 CALL PDEC1 0054 0118FC LXI B, -1000 0057 CD6C00 CALL PDEC1 005A 019CFF LXI B, -100 005D CD6C00 CALL PDEC1 0060 0EF6 MVI C, -10 0062 CD6C00 CALL PDEC1 0065 0EFF MVI C, -1 0067 3EFF MVI A, 0FFh ; IF NUMBER IS ZERO, THIS MAKES SURE 0069 320100 STA PDEC5 ; IT'S PRINTED 006C 3E2F PDEC1: MVI A, '/' ; "0" - 1 006E 3C PDEC2: INR A 006F 09 DAD B 0070 DA6E00 JC PDEC2 0073 320000 STA PDEC4 ; SUBTRACT BC FROM HL 0076 7D MOV A, L 0077 99 SBB C 0078 6F MOV L, A 0079 7C MOV A, H 007A 98 SBB B 007B 67 MOV H, A 007C 3A0000 LDA PDEC4 007F FE30 CPI '0' ; ZERO? 0081 C28A00 JNZ PDEC3 0084 3A0100 LDA PDEC5 ; ZERO FLAG SET? 0087 FE00 CPI 0h 0089 C8 RZ ; COMMENT OUT TO PRINT LEADING ZEROS 008A 3A0000 PDEC3: LDA PDEC4 CONOUTA ; WAS "CALL PCHAR" 008D+F5 PUSH PSW 008E+C5 PUSH B 008F+D5 PUSH D 0090+E5 PUSH H 0091+0E02 MVI C,CWRITE 0093+5F MOV E,A 0094+CD0500 CALL BDOS 0097+E1 POP H 0098+D1 POP D 0099+C1 POP B 009A+F1 POP PSW 009B 3EFF MVI A, 0FFh ; SET LEADING ZERO FLAG 009D 320100 STA PDEC5 00A0 C9 RET dseg 0000 00 PDEC4: DB 0 ; TEMP FOR 16 BIT SUBTRACTION 0001 00 PDEC5: DB 0 ; FLAG FOR LEADING ZEROS 0002 END