REWRITE OF NEWDOS/80 DISK BASIC AMPERSAND (&) ROUTINE
by Gil Spencer
I never think in octal. It's hard enough to work in
binary, hex, and decimal. It always seemed to me that the
default for the '&' function should be hex, NOT octal. I
finally dug out the source code (from Apparat's Disk BASIC)
which I found in SYS20/SYS. My rewrite fits within the
required extra space. Although a quantity of bytes are
changed, this is because the code is "re-arranged" more than
because it is "re-written".
First, here is the Disk BASIC (&) routine found in
Apparat's NEWDOS/80 version 2.0 - specifically SYS20/SYS,
addresses 54C5H-5503H. If you are using SUPERZAP, address
54C5H is found at FRS 2, byte D1H and address 5503H is at
FRS 3, byte 13H. Note that the four bytes at FRS 3, bytes 06H-
09H (which are 01 00 FA 54) are loader codes and must NOT be
changed.
54C5 00100 ORG 54C5H
54C5 D7 00110 RST 10H
54C6 4F 00120 LD C,A
54C7 110000 00130 LD DE,0000H
54CA 79 00140 Q54CAH LD A,C
54CB FE48 00150 CP 48H
54CD 2022 00160 JR NZ,Q54F1H
54CF D7 00170 RST 10H
54D0 EB 00180 EX DE,HL
54D1 D630 00190 SUB 30H
54D3 FE0A 00200 CP 0AH
54D5 3808 00210 JR C,Q54DFH
54D7 D611 00220 SUB 11H
54D9 FE06 00230 CP 06H
54DB 3022 00240 JR NC,Q54FFH
54DD C60A 00250 ADD A,0AH
54DF 29 00260 Q54DFH ADD HL,HL
54E0 3807 00270 JR C,Q54E9H
54E2 29 00280 Q54E2H ADD HL,HL
54E3 3804 00290 JR C,Q54E9H
54E5 29 00300 ADD HL,HL
54E6 3801 00310 JR C,Q54E9H
54E8 29 00320 ADD HL,HL
54E9 DAB207 00330 Q54E9H JP C,07B2H
54EC 85 00340 ADD A,L
54ED 6F 00350 LD L,A
54EE EB 00360 EX DE,HL
54EF 18D9 00370 JR Q54CAH
54F1 0E4F 00380 Q54F1H LD C,4FH
54F3 B9 00390 CP C
54F4 2801 00400 JR Z,Q54F7H
54F6 2B 00410 DEC HL
54F7 D7 00420 Q54F7H RST 10H
54F8 EB 00430 EX DE,HL
54F9 D630 00440 SUB 30H
54FB FE08 00450 CP 08H
54FD 38E3 00460 JR C,Q54E2H
54FF CD9A0A 00470 Q54FFH CALL 0A9AH
5502 EB 00480 EX DE,HL
5503 C9 00490 RET
This is the REWRITE of the Disk BASIC ampersand (&)
routine. Now the octal argument MUST be specified by '&O'.
Hex argument MAY be specified by '&H'. No suffix (i.e. '&')
now defaults to hex rather than octal.
54C5 00100 ORG 54C5H
54C5 D7 00110 RST 10H
54C6 4F 00120 LD C,A
54C7 110000 00130 LD DE,0000H
54CA 79 00140 Q54CAH LD A,C
54CB FE4F 00150 CP 4FH
54CD 2828 00160 JR Z,Q54F7H
54CF 0E48 00170 LD C,48H
54D1 B9 00180 CP C
54D2 2801 00190 JR Z,Q54D5H
54D4 2B 00200 DEC HL
54D5 D7 00210 Q54D5H RST 10H
54D6 EB 00220 EX DE,HL
54D7 D630 00230 SUB 30H
54D9 FE0A 00240 CP 0AH
54DB 3808 00250 JR C,Q54E5H
54DD D611 00260 SUB 11H
54DF FE06 00270 CP 06H
54E1 301C 00280 JR NC,Q54FFH
54E3 C60A 00290 ADD A,0AH
54E5 29 00300 Q54E5H ADD HL,HL
54E6 3807 00310 JR C,Q54EFH
54E8 29 00320 Q54E8H ADD HL,HL
54E9 3804 00330 JR C,Q54EFH
54EB 29 00340 ADD HL,HL
54EC 3801 00350 JR C,Q54EFH
54EE 29 00360 ADD HL,HL
54EF DAB207 00370 Q54EFH JP C,07B2H
54F2 85 00380 ADD A,L
54F3 6F 00390 LD L,A
54F4 EB 00400 EX DE,HL
54F5 18D3 00410 JR Q54CAH
54F7 D7 00420 Q54F7H RST 10H
54F8 EB 00430 EX DE,HL
54F9 D630 00440 SUB 30H
54FB FE08 00450 CP 08H
54FD 38E9 00460 JR C,Q54E8H
54FF CD9A0A 00470 Q54FFH CALL 0A9AH
5502 EB 00480 EX DE,HL
5503 C9 00490 RET
|
|