Z80SimulatorIDE/files/basprint.asm

901 lines
9.8 KiB
NASM

; Compiled with: Z80 Simulator IDE v9.70
;
; Begin
LD IX,0FF00H
LD SP,0FEF4H
; The address of 'a' (single) (global) is FEFCH (IX-4)
a: EQU 0FEFCH
; The address of 'b' (single) (global) is FEF8H (IX-8)
b: EQU 0FEF8H
; The address of 'c' (single) (global) is FEF4H (IX-12)
c: EQU 0FEF4H
; Begin of program
; 1: Dim a As Single
LD A,00H
LD (IX-04H),A
LD (IX-03H),A
LD (IX-02H),A
LD (IX-01H),A
; 2: Dim b As Single
LD A,00H
LD (IX-08H),A
LD (IX-07H),A
LD (IX-06H),A
LD (IX-05H),A
; 3: Dim c As Single
LD A,00H
LD (IX-0CH),A
LD (IX-0BH),A
LD (IX-0AH),A
LD (IX-09H),A
; 4:
; 5: a = 9.876543 'First number
LD BC,411EH
LD DE,0652H
LD (IX-04H),E
LD (IX-03H),D
LD (IX-02H),C
LD (IX-01H),B
; 6: b = 2.345678 'Second number
LD BC,4016H
LD DE,1F97H
LD (IX-08H),E
LD (IX-07H),D
LD (IX-06H),C
LD (IX-05H),B
; 7: c = a * b
LD E,(IX-04H)
LD D,(IX-03H)
LD C,(IX-02H)
LD B,(IX-01H)
PUSH BC
PUSH DE
LD E,(IX-08H)
LD D,(IX-07H)
LD C,(IX-06H)
LD B,(IX-05H)
CALL M201
LD (IX-0CH),E
LD (IX-0BH),D
LD (IX-0AH),C
LD (IX-09H),B
; 8:
; 9: Print 1, "Number ", a, CrLf
LD A,4EH
OUT (01H),A
LD A,75H
OUT (01H),A
LD A,6DH
OUT (01H),A
LD A,62H
OUT (01H),A
LD A,65H
OUT (01H),A
LD A,72H
OUT (01H),A
LD A,20H
OUT (01H),A
LD BC,0001H
LD (IX+01H),C
LD (IX+02H),B
LD C,07H
LD (IX+03H),C
LD E,(IX-04H)
LD D,(IX-03H)
LD C,(IX-02H)
LD B,(IX-01H)
CALL P401
LD A,0DH
OUT (01H),A
LD A,0AH
OUT (01H),A
; 10: Print 1, "multiplied by ", b, CrLf
LD A,6DH
OUT (01H),A
LD A,75H
OUT (01H),A
LD A,6CH
OUT (01H),A
LD A,74H
OUT (01H),A
LD A,69H
OUT (01H),A
LD A,70H
OUT (01H),A
LD A,6CH
OUT (01H),A
LD A,69H
OUT (01H),A
LD A,65H
OUT (01H),A
LD A,64H
OUT (01H),A
LD A,20H
OUT (01H),A
LD A,62H
OUT (01H),A
LD A,79H
OUT (01H),A
LD A,20H
OUT (01H),A
LD BC,0001H
LD (IX+01H),C
LD (IX+02H),B
LD C,07H
LD (IX+03H),C
LD E,(IX-08H)
LD D,(IX-07H)
LD C,(IX-06H)
LD B,(IX-05H)
CALL P401
LD A,0DH
OUT (01H),A
LD A,0AH
OUT (01H),A
; 11: Print 1, "equals ", c, "!", CrLf
LD A,65H
OUT (01H),A
LD A,71H
OUT (01H),A
LD A,75H
OUT (01H),A
LD A,61H
OUT (01H),A
LD A,6CH
OUT (01H),A
LD A,73H
OUT (01H),A
LD A,20H
OUT (01H),A
LD BC,0001H
LD (IX+01H),C
LD (IX+02H),B
LD C,07H
LD (IX+03H),C
LD E,(IX-0CH)
LD D,(IX-0BH)
LD C,(IX-0AH)
LD B,(IX-09H)
CALL P401
LD A,21H
OUT (01H),A
LD A,0DH
OUT (01H),A
LD A,0AH
OUT (01H),A
; End of program
HALT
; Long Division Routine
D104: XOR A
SUB E
LD E,A
LD A,00H
SBC A,D
LD D,A
LD A,00H
SBC A,C
LD C,A
LD A,00H
SBC A,B
LD B,A
RET
D102: EXX
POP HL
POP DE
POP BC
PUSH HL
EXX
PUSH HL
CALL D103
EXX
POP HL
RET
D101: EXX
POP HL
POP DE
POP BC
PUSH HL
EXX
PUSH HL
CALL D103
POP HL
RET
D103: EXX
LD A,B
EXX
XOR B
EXX
LD A,B
PUSH AF
BIT 7,B
CALL NZ,D104
EXX
BIT 7,B
CALL NZ,D104
CALL D105
POP AF
JP P,D106
LD L,A
CALL M,D104
LD A,L
D106: OR A
RET P
EXX
CALL D104
EXX
RET
D105: EXX
PUSH BC
LD B,D
LD C,E
EXX
EX DE,HL
LD D,B
LD E,C
POP BC
PUSH HL
LD HL,0000H
EXX
POP DE
LD HL,0000H
LD A,20H
OR A
D108: RL C
RL B
EXX
RL C
RL B
EXX
ADC HL,HL
EXX
ADC HL,HL
EXX
SBC HL,DE
EXX
SBC HL,DE
EXX
JR NC,D107
ADD HL,DE
EXX
ADC HL,DE
EXX
D107: CCF
DEC A
JR NZ,D108
RL C
RL B
EXX
RL C
RL B
EXX
LD D,B
LD E,C
PUSH HL
EXX
POP DE
PUSH BC
LD B,H
LD C,L
EXX
POP BC
RET
; Single Precision Subtraction Routine
S201: LD A,B
XOR 80H
LD B,A
EXX
POP HL
POP DE
POP BC
PUSH HL
EXX
PUSH HL
CALL S202
CALL S203
POP HL
RET
S202: EXX
LD L,00H
LD H,E
LD E,D
LD D,C
SET 7,D
RL C
LD A,B
ADC A,A
LD C,A
EXX
LD L,00H
LD H,E
LD E,D
LD D,C
SET 7,D
RL C
LD A,B
ADC A,A
LD C,A
LD A,C
EXX
SUB C
JR Z,S204
JR NC,S205
NEG
EXX
S205: SRL D
RR E
RR H
RR L
INC C
DEC A
JR NZ,S205
S204: LD A,B
EXX
XOR B
EXX
JP M,S206
LD A,L
EXX
ADD A,L
EXX
LD L,A
LD A,H
EXX
ADC A,H
EXX
LD H,A
LD A,E
EXX
ADC A,E
EXX
LD E,A
LD A,D
EXX
ADC A,D
EXX
LD D,A
JR NC,S207
S210: LD A,D
RR D
RR E
RR H
RR L
OR C
OR E
OR H
OR L
JR Z,S207
INC C
JR S207
S206: LD A,D
EXX
CP D
JR C,S208
JR NZ,S209
LD A,E
EXX
CP E
JR C,S208
JR NZ,S209
LD A,H
EXX
CP H
JR C,S208
JR NZ,S209
LD A,L
EXX
CP L
JR C,S208
S209: EXX
S208: LD A,L
EXX
SUB L
EXX
LD L,A
LD A,H
EXX
SBC A,H
EXX
LD H,A
LD A,E
EXX
SBC A,E
EXX
LD E,A
LD A,D
EXX
SBC A,D
EXX
LD D,A
JR C,S210
S207: RET
S203: LD A,C
OR A
JR NZ,S211
S213: LD B,A
LD E,A
LD D,A
RET
S211: BIT 7,D
JR NZ,S212
LD A,C
OR A
JR Z,S213
DEC C
SLA L
RL H
RL E
RL D
JP S211
S212: LD A,L
ADD A,80H
LD A,H
ADC A,00H
LD L,A
LD A,E
ADC A,00H
LD H,A
LD A,D
ADC A,00H
JR NC,S214
INC C
S214: ADD A,A
SRL C
RRA
LD E,A
LD A,B
AND 80H
OR C
LD D,A
LD B,D
LD C,E
EX DE,HL
RET
; Single Precision Multiplication Routine
M201: EXX
POP HL
POP DE
POP BC
PUSH HL
EXX
PUSH HL
EXX
LD L,00H
LD H,E
LD E,D
LD D,C
SET 7,D
RL C
LD A,B
ADC A,A
LD C,A
JR Z,M202
EXX
LD L,00H
LD H,E
LD E,D
LD D,C
SET 7,D
RL C
LD A,B
ADC A,A
LD C,A
JR Z,M202
CALL M203
M202: CALL M204
POP HL
RET
M203: LD A,B
EXX
XOR B
LD B,A
LD A,C
EXX
SUB 7FH
LD B,A
LD A,C
SUB 7FH
ADD A,B
JP PO,M205
EXX
LD HL,0002H
LD (0FF00H),HL
LD C,0FFH
JR NC,M206
INC C
M206: LD D,C
LD E,C
LD H,C
LD L,00H
RET
M205: ADD A,80H
EXX
LD C,A
PUSH BC
PUSH DE
LD B,H
LD C,L
EXX
POP BC
PUSH HL
EXX
POP DE
LD A,20H
M208: DEC C
INC C
JR NZ,M207
CP 09H
JR C,M207
SUB 08H
PUSH AF
EXX
LD A,C
LD C,B
LD B,00H
EXX
LD C,B
LD B,A
EXX
LD A,L
LD L,H
LD H,00H
EXX
LD L,H
LD H,A
POP AF
JR M208
M207: EXX
SRL B
RR C
EXX
RR B
RR C
JR NC,M209
ADD HL,DE
EXX
ADC HL,DE
EXX
M209: EXX
RR H
RR L
EXX
RR H
RR L
DEC A
JR NZ,M208
EXX
PUSH HL
EXX
POP DE
POP BC
RET
M204: LD A,C
OR A
JR NZ,M210
M212: LD B,A
LD E,A
LD D,A
RET
M210: BIT 7,D
JR NZ,M211
LD A,C
OR A
JR Z,M212
DEC C
SLA L
RL H
RL E
RL D
JP M210
M211: LD A,L
ADD A,80H
LD A,H
ADC A,00H
LD L,A
LD A,E
ADC A,00H
LD H,A
LD A,D
ADC A,00H
JR NC,M213
INC C
M213: ADD A,A
SRL C
RRA
LD E,A
LD A,B
AND 80H
OR C
LD D,A
LD B,D
LD C,E
EX DE,HL
RET
; Single To Long Conversion Routine
X001: PUSH HL
LD L,00H
LD H,E
LD E,D
LD D,C
SET 7,D
RL C
LD A,B
ADC A,A
LD C,A
LD A,C
SUB 7FH
JR NC,X002
X005: LD BC,0000H
LD D,C
LD E,C
JR X003
X002: NEG
ADD A,1FH
JR Z,X004
CP 20H
JR NC,X005
X006: SRL D
RR E
RR H
RR L
DEC A
JR NZ,X006
X004: BIT 7,B
LD B,D
LD C,E
EX DE,HL
JR Z,X003
CALL X007
X003: POP HL
RET
X007: XOR A
SUB E
LD E,A
LD A,00H
SBC A,D
LD D,A
LD A,00H
SBC A,C
LD C,A
LD A,00H
SBC A,B
LD B,A
RET
; Long To Single Conversion Routine
X101: PUSH HL
LD A,B
BIT 7,B
JR Z,X102
CALL X103
LD A,80H
X102: EX DE,HL
LD E,C
LD D,B
LD B,A
LD C,9EH
CALL X104
POP HL
RET
X104: LD A,C
OR A
JR NZ,X105
X107: LD B,A
LD E,A
LD D,A
RET
X105: BIT 7,D
JR NZ,X106
LD A,C
OR A
JR Z,X107
DEC C
SLA L
RL H
RL E
RL D
JP X105
X106: LD A,L
ADD A,80H
LD A,H
ADC A,00H
LD L,A
LD A,E
ADC A,00H
LD H,A
LD A,D
ADC A,00H
JR NC,X108
INC C
X108: ADD A,A
SRL C
RRA
LD E,A
LD A,B
AND 80H
OR C
LD D,A
LD B,D
LD C,E
EX DE,HL
RET
X103: XOR A
SUB E
LD E,A
LD A,00H
SBC A,D
LD D,A
LD A,00H
SBC A,C
LD C,A
LD A,00H
SBC A,B
LD B,A
RET
; Single Print Routine
P401: BIT 7,B
JR Z,P402
LD A,2DH
PUSH BC
LD C,(IX+01H)
OUT (C),A
POP BC
RES 7,B
P402: PUSH BC
RLC C
RL B
LD A,6AH
SUB B
JP P,P403
LD A,95H
SUB B
JP M,P403
JR P404
P403: LD A,45H
LD C,(IX+01H)
OUT (C),A
POP BC
JP P405
P404: POP BC
PUSH BC
PUSH DE
CALL X001
PUSH BC
PUSH DE
LD BC,000FH
LD DE,4240H
CALL D101
CALL P406
PUSH BC
PUSH DE
LD BC,0001H
LD DE,86A0H
CALL D101
CALL P406
PUSH BC
PUSH DE
LD BC,0000H
LD DE,2710H
CALL D101
CALL P406
PUSH BC
PUSH DE
LD BC,0000H
LD DE,03E8H
CALL D101
CALL P406
PUSH BC
PUSH DE
LD BC,0000H
LD DE,0064H
CALL D101
CALL P406
PUSH BC
PUSH DE
LD BC,0000H
LD DE,000AH
CALL D101
CALL P406
LD B,(IX+02H)
LD A,E
LD B,30H
ADD A,B
LD C,(IX+01H)
OUT (C),A
LD C,(IX+03H)
DEC C
JP Z,P405
LD (IX+02H),B
LD (IX+03H),C
LD A,2EH
LD C,(IX+01H)
OUT (C),A
POP DE
POP BC
RES 7,B
PUSH BC
PUSH DE
CALL X001
CALL X101
CALL S201
PUSH BC
PUSH DE
LD BC,4974H
LD DE,2400H
CALL M201
CALL X001
PUSH BC
PUSH DE
LD BC,0001H
LD DE,86A0H
CALL D101
CALL P409
JR Z,P405
EXX
PUSH BC
PUSH DE
LD BC,0000H
LD DE,2710H
CALL D101
CALL P409
JR Z,P405
EXX
PUSH BC
PUSH DE
LD BC,0000H
LD DE,03E8H
CALL D101
CALL P409
JR Z,P405
EXX
PUSH BC
PUSH DE
LD BC,0000H
LD DE,0064H
CALL D101
CALL P409
JR Z,P405
EXX
PUSH BC
PUSH DE
LD BC,0000H
LD DE,000AH
CALL D101
CALL P409
JR Z,P405
EXX
LD B,(IX+02H)
LD A,E
ADD A,B
LD C,(IX+01H)
OUT (C),A
LD C,(IX+03H)
DEC C
LD (IX+03H),C
P405:
RET
P406: LD B,(IX+02H)
LD A,E
CP 00H
JR Z,P407
LD B,30H
P407: ADD A,B
LD (IX+02H),B
JR Z,P408
LD C,(IX+01H)
OUT (C),A
LD C,(IX+03H)
DEC C
LD (IX+03H),C
P408: EXX
RET
P409: LD B,(IX+02H)
LD A,E
ADD A,B
LD C,(IX+01H)
OUT (C),A
LD C,(IX+03H)
DEC C
LD (IX+03H),C
RET
; End of listing
.END