901 lines
9.8 KiB
NASM
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
|