You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

153 lines
4.5 KiB

; 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