Browse Source

Update zxcc BIOS and ZMAC Binary

- Updated zxcc BIOS binary to sync with latest from Tony Nicholson.
- ZMAC.COM updated to remove inappropriate Z3ENV pointer in file header.
pull/633/head
Wayne Warthen 2 months ago
parent
commit
6a9f06cb22
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. BIN
      Tools/cpm/bin80/ZMAC.COM
  2. 9
      Tools/unix/zxcc/ReadMe.txt
  3. BIN
      Tools/unix/zxcc/cpm/bios.bin
  4. BIN
      Tools/unix/zxcc/cpm/bios.com
  5. 227
      Tools/unix/zxcc/cpm/bios.lst
  6. 125
      Tools/unix/zxcc/cpm/bios.z80
  7. 16
      Tools/zxcc/ReadMe.txt
  8. BIN
      Tools/zxcc/bios.bin
  9. BIN
      Tools/zxcc/zxcc-src.zip
  10. BIN
      Tools/zxcc/zxcc.exe
  11. BIN
      Tools/zxcc/zxcc_ft.exe
  12. BIN
      Tools/zxcc/zxccdbg.exe
  13. BIN
      Tools/zxcc/zxccdbg_ft.exe

BIN
Tools/cpm/bin80/ZMAC.COM

Binary file not shown.

9
Tools/unix/zxcc/ReadMe.txt

@ -62,7 +62,7 @@ wwarthen@gmail.com
January 9, 2022
- Running zxcc under WSL (Windows Subsystem for Linux) was gererating output
- Running zxcc under WSL (Windows Subsystem for Linux) was generating output
that was correct but did not match standard Windows or Linux runs. This
turned out to be an assumption in a few places in the code that reading
into a buffer would not modify the area of the buffer that was beyond
@ -78,7 +78,7 @@ January 9, 2022
Nicholson's GitHub repo at https://github.com/agn453/ZXCC. The most
significant difference in my code is that I am using the WIN32 API
for all disk I/O. Although the file tracking code is retained, I have
found this mechanism to fail insome scenarios. By using the WIN32 API
found this mechanism to fail in some scenarios. By using the WIN32 API
I can achieve the same file sharing attributes as Unix which makes the
file tracking mechanism optional.
@ -91,3 +91,8 @@ January 9, 2022
--WBW 3:58 PM 3/2/2022
The CP/M BIOS was updated to sync with the latest from Tony
Nicholson and to remove the ZMAC workaround that I had put there
previously. ZMAC was patched instead.
--WBW 1:41 PM 11/17/2025

BIN
Tools/unix/zxcc/cpm/bios.bin

Binary file not shown.

BIN
Tools/unix/zxcc/cpm/bios.com

Binary file not shown.

227
Tools/unix/zxcc/cpm/bios.lst

@ -1,4 +1,4 @@
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 1
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 1
BIOS Z80
1 ; BIOS / BDOS for the ZXCC environment.
@ -14,93 +14,146 @@ BIOS Z80
11 FE0B ED FE DEFB 0EDh,0FEh
12 FE0D C9 RET
13 ;
14 ; Hack for ZMAC. ZMAC is using contents of 0FE22H to establish a memory pointer.
15 ; It makes no sense. We stuff 04F4CH here because it is known to work...
16 ;
17 FE22 org 0FE22H
18 FE22 4F4C DEFW 04F4CH
19 ;
20 ;This is not a real BIOS, so let its code live below the BIOS jumpblock.
21 ;
22 FE24 DD 22 FE33 UBIOS: LD (XIX),IX
23 FE28 DD E1 POP IX ;IX = address of UBIOS function
24 FE2A 3E C3 LD A,0C3h ;C3h = BIOS call
25 FE2C ED FE DEFB 0EDh,0FEh
26 FE2E DD 2A FE33 LD IX,(XIX)
27 FE32 C9 RET
28 ;
29 FE33 0000 XIX: DEFW 0
30
31 FE35 21 FF03 CBOOT: LD HL,WBOOT0
32 FE38 22 0001 LD (1),HL
33 FE3B 21 FE06 LD HL,BDOS0
34 FE3E 22 0006 LD (6),HL
35 FE41 3E C3 LD A,0C3h
36 FE43 32 0000 LD (0),A
37 FE46 32 0005 LD (5),A
38 FE49 3E C9 LD A,0C9h
39 FE4B 32 0038 LD (038h),A
40 FE4E 3E C1 LD A,0C1h ;C1h = program load
41 FE50 ED FE DEFB 0EDh,0FEh
42 FE52 21 0000 LD HL,0
43 FE55 E5 PUSH HL ;In case called program tries to RET
44 FE56 C3 0100 JP 0100h
45 ;
46 FE59 3E C3 WBOOT: LD A,0C3h ;Program termination
47 FE5B DD 21 0006 LD IX,6 ;BIOS call 1
48 FE5F ED FE DEFB 0EDh,0FEh
49 FE61 76 HALT
50 FE62 C3 FE62 JP $
51 ;
52 FEEC org 0FEECh
53 FEEC FF tmpdrv: defb 0FFh ;Temp drive = current
54
55
56 ;
57 ;TODO: SCB at FE9Ch
14 ;This is not a real BIOS, so let its code live below the BIOS jumpblock.
15 ;
16 FE0E DD 22 FE24 UBIOS: LD (XIX),IX
17 FE12 DD E1 POP IX ;IX = address of UBIOS function
18 ;
19 ; ZXCC was written on the assumption that the BIOS jumpblock was a series
20 ; of CALL UBIOS instructions; in which case, IX would be the return address,
21 ; or the address of the jumpblock entry plus 3.
22 ;
23 ; Now that the BIOS jumpblock is a true jumpblock and the CALL instructions
24 ; are elsewhere, the offset is relative to BIOS2 rather than CONST0. So
25 ; adjust the offset.
26 ;
27 FE14 D5 PUSH DE
28 FE15 11 00B0 LD DE,CONST0 - BIOS2
29 FE18 DD 19 ADD IX,DE
30 FE1A D1 POP DE
31 FE1B 3E C3 LD A,0C3h ;C3h = BIOS call
32 FE1D ED FE DEFB 0EDh,0FEh ;ZXCC trap; IX = BIOS function
33 FE1F DD 2A FE24 LD IX,(XIX)
34 FE23 C9 RET
35 ;
36 FE24 0000 XIX: DEFW 0
37
38 FE26 21 FF03 CBOOT: LD HL,WBOOT0 ;ZXCC cold boot: Initialise the Zero Page.
39 FE29 22 0001 LD (1),HL
40 FE2C 21 FE06 LD HL,BDOS0
41 FE2F 22 0006 LD (6),HL
42 FE32 3E C3 LD A,0C3h
43 FE34 32 0000 LD (0),A
44 FE37 32 0005 LD (5),A
45 FE3A 3E C9 LD A,0C9h
46 FE3C 32 0038 LD (038h),A
47 FE3F 3E C1 LD A,0C1h ;C1h = program load
48 FE41 ED FE DEFB 0EDh,0FEh
49 FE43 21 0000 LD HL,0
50 FE46 E5 PUSH HL ;In case called program tries to RET
51 FE47 C3 0100 JP 0100h
52 ;
53 FE4A 3E C3 WBOOT: LD A,0C3h ;Program termination
54 FE4C DD 21 0006 LD IX,6 ;BIOS call 1
55 FE50 ED FE DEFB 0EDh,0FEh
56 FE52 76 HALT
57 FE53 C3 FE53 JP $
58 ;
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 2
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 2
BIOS Z80
59 FF00 org 0FF00h
60 FF00 C3 FE35 JP CBOOT ;FF00
61 FF03 C3 FE59 WBOOT0: JP WBOOT ;03
62 FF06 CD FE24 CALL UBIOS ;06
63 FF09 CD FE24 CALL UBIOS ;09
64 FF0C CD FE24 CALL UBIOS ;0C
65 FF0F CD FE24 CALL UBIOS ;0F
66 FF12 CD FE24 CALL UBIOS ;12
67 FF15 CD FE24 CALL UBIOS ;15
68 FF18 CD FE24 CALL UBIOS ;18
69 FF1B CD FE24 CALL UBIOS ;1B
70 FF1E CD FE24 CALL UBIOS ;1E
71 FF21 CD FE24 CALL UBIOS ;21
72 FF24 CD FE24 CALL UBIOS ;24
73 FF27 CD FE24 CALL UBIOS ;27
74 FF2A CD FE24 CALL UBIOS ;2A
75 FF2D CD FE24 CALL UBIOS ;2D
76 FF30 CD FE24 CALL UBIOS ;30
77 FF33 CD FE24 CALL UBIOS ;33
78 FF36 CD FE24 CALL UBIOS ;36
79 FF39 CD FE24 CALL UBIOS ;39
80 FF3C CD FE24 CALL UBIOS ;42
81 FF3F CD FE24 CALL UBIOS ;45
82 FF42 CD FE24 CALL UBIOS ;48
83 FF45 CD FE24 CALL UBIOS ;4B
84 FF48 CD FE24 CALL UBIOS ;4E
85 FF4B CD FE24 CALL UBIOS ;51
86 FF4E CD FE24 CALL UBIOS ;54
87 FF51 CD FE24 CALL UBIOS ;57
88 FF54 CD FE24 CALL UBIOS ;5A, USERF
89 FF57 CD FE24 CALL UBIOS ;5D, RESERV1
90 FF5A CD FE24 CALL UBIOS ;60, RESERV2
91 ;
92 FFC0 org 0FFC0h ;Space for DPB
93 FFC0 0020 dpb: defs 20h
94
95 END
59 ; Implementation of all other BIOS functions
60 ;
61 FE56 CD FE0E BIOS2: CALL UBIOS
62 FE59 CD FE0E BIOS3: CALL UBIOS
63 FE5C CD FE0E BIOS4: CALL UBIOS
64 FE5F CD FE0E BIOS5: CALL UBIOS
65 FE62 CD FE0E BIOS6: CALL UBIOS
66 FE65 CD FE0E BIOS7: CALL UBIOS
67 FE68 CD FE0E BIOS8: CALL UBIOS
68 FE6B CD FE0E BIOS9: CALL UBIOS
69 FE6E CD FE0E BIOS10: CALL UBIOS
70 FE71 CD FE0E BIOS11: CALL UBIOS
71 FE74 CD FE0E BIOS12: CALL UBIOS
72 FE77 CD FE0E BIOS13: CALL UBIOS
73 FE7A CD FE0E BIOS14: CALL UBIOS
74 FE7D CD FE0E BIOS15: CALL UBIOS
75 FE80 CD FE0E BIOS16: CALL UBIOS
76 FE83 CD FE0E BIOS17: CALL UBIOS
77 FE86 CD FE0E BIOS18: CALL UBIOS
78 FE89 CD FE0E BIOS19: CALL UBIOS
79 FE8C CD FE0E BIOS20: CALL UBIOS
80 FE8F CD FE0E BIOS21: CALL UBIOS
81 FE92 CD FE0E BIOS22: CALL UBIOS
82 FE95 CD FE0E BIOS23: CALL UBIOS
83 FE98 CD FE0E BIOS24: CALL UBIOS
84 FE9B CD FE0E BIOS25: CALL UBIOS
85 FE9E CD FE0E BIOS26: CALL UBIOS
86 FEA1 CD FE0E BIOS27: CALL UBIOS
87 FEA4 CD FE0E BIOS28: CALL UBIOS
88 FEA7 CD FE0E BIOS29: CALL UBIOS
89 FEAA CD FE0E BIOS30: CALL UBIOS
90 FEAD CD FE0E BIOS31: CALL UBIOS
91 FEB0 CD FE0E BIOS32: CALL UBIOS
92 ;
93 ;
94 FEEC org 0FEECh
95 FEEC FF tmpdrv: defb 0FFh ;Temp drive = current
96
97
98 ;
99 ;TODO: SCB at FE9Ch
100 ;
101
102 ;
103 ; Mallard BASIC (and maybe other programs) assumes that the BIOS
104 ; jumpblock is a list of jumps, not calls. So rather than composing the
105 ; BIOS jumpblock of a sequence of CALL UBIOS, it's now a sequence
106 ; of jumps to CALL UBIOS.
107 ;
108 FF00 org 0FF00h
109 FF00 C3 FE26 JP CBOOT ;FF00
110 FF03 C3 FE4A WBOOT0: JP WBOOT ;03
111 FF06 C3 FE56 CONST0: JP BIOS2
112 FF09 C3 FE59 JP BIOS3
113 FF0C C3 FE5C JP BIOS4
114 FF0F C3 FE5F JP BIOS5
115 FF12 C3 FE62 JP BIOS6
116 FF15 C3 FE65 JP BIOS7
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 3
BIOS Z80
117 FF18 C3 FE68 JP BIOS8
118 FF1B C3 FE6B JP BIOS9
119 FF1E C3 FE6E JP BIOS10
120 FF21 C3 FE71 JP BIOS11
121 FF24 C3 FE74 JP BIOS12
122 FF27 C3 FE77 JP BIOS13
123 FF2A C3 FE7A JP BIOS14
124 FF2D C3 FE7D JP BIOS15
125 FF30 C3 FE80 JP BIOS16
126 FF33 C3 FE83 JP BIOS17
127 FF36 C3 FE86 JP BIOS18
128 FF39 C3 FE89 JP BIOS19
129 FF3C C3 FE8C JP BIOS20
130 FF3F C3 FE8F JP BIOS21
131 FF42 C3 FE92 JP BIOS22
132 FF45 C3 FE95 JP BIOS23
133 FF48 C3 FE98 JP BIOS24
134 FF4B C3 FE9B JP BIOS25
135 FF4E C3 FE9E JP BIOS26
136 FF51 C3 FEA1 JP BIOS27
137 FF54 C3 FEA4 JP BIOS28
138 FF57 C3 FEA7 JP BIOS29
139 FF5A C3 FEAA JP BIOS30
140 FF5D C3 FEAD JP BIOS31
141 FF60 C3 FEB0 JP BIOS32
142 ;
143 FFC0 org 0FFC0h ;Space for DPB
144 FFC0 0020 dpb: defs 20h
145
146 END
0 Error(s) Detected.
480 Absolute Bytes. 9 Symbols Detected.
 UBIOS ;27
74 FF2A CD FE24 CALL UBIOS ;2A
75 FF2D CD FE24
480 Absolute Bytes. 41 Symbols Detected.
 JP BIOS10
120 FF21 C3 FE71 JP B

125
Tools/unix/zxcc/cpm/bios.z80

@ -11,24 +11,31 @@ BDOS1: LD A,0C0h
DEFB 0EDh,0FEh
RET
;
; Hack for ZMAC. ZMAC is using contents of 0FE22H to establish a memory pointer.
; It makes no sense. We stuff 04F4CH here because it is known to work...
;
org 0FE22H
DEFW 04F4CH
;
;This is not a real BIOS, so let its code live below the BIOS jumpblock.
;
UBIOS: LD (XIX),IX
POP IX ;IX = address of UBIOS function
;
; ZXCC was written on the assumption that the BIOS jumpblock was a series
; of CALL UBIOS instructions; in which case, IX would be the return address,
; or the address of the jumpblock entry plus 3.
;
; Now that the BIOS jumpblock is a true jumpblock and the CALL instructions
; are elsewhere, the offset is relative to BIOS2 rather than CONST0. So
; adjust the offset.
;
PUSH DE
LD DE,CONST0 - BIOS2
ADD IX,DE
POP DE
LD A,0C3h ;C3h = BIOS call
DEFB 0EDh,0FEh
DEFB 0EDh,0FEh ;ZXCC trap; IX = BIOS function
LD IX,(XIX)
RET
;
XIX: DEFW 0
CBOOT: LD HL,WBOOT0
CBOOT: LD HL,WBOOT0 ;ZXCC cold boot: Initialise the Zero Page.
LD (1),HL
LD HL,BDOS0
LD (6),HL
@ -48,6 +55,41 @@ WBOOT: LD A,0C3h ;Program termination
DEFB 0EDh,0FEh
HALT
JP $
;
; Implementation of all other BIOS functions
;
BIOS2: CALL UBIOS
BIOS3: CALL UBIOS
BIOS4: CALL UBIOS
BIOS5: CALL UBIOS
BIOS6: CALL UBIOS
BIOS7: CALL UBIOS
BIOS8: CALL UBIOS
BIOS9: CALL UBIOS
BIOS10: CALL UBIOS
BIOS11: CALL UBIOS
BIOS12: CALL UBIOS
BIOS13: CALL UBIOS
BIOS14: CALL UBIOS
BIOS15: CALL UBIOS
BIOS16: CALL UBIOS
BIOS17: CALL UBIOS
BIOS18: CALL UBIOS
BIOS19: CALL UBIOS
BIOS20: CALL UBIOS
BIOS21: CALL UBIOS
BIOS22: CALL UBIOS
BIOS23: CALL UBIOS
BIOS24: CALL UBIOS
BIOS25: CALL UBIOS
BIOS26: CALL UBIOS
BIOS27: CALL UBIOS
BIOS28: CALL UBIOS
BIOS29: CALL UBIOS
BIOS30: CALL UBIOS
BIOS31: CALL UBIOS
BIOS32: CALL UBIOS
;
;
org 0FEECh
tmpdrv: defb 0FFh ;Temp drive = current
@ -55,39 +97,48 @@ tmpdrv: defb 0FFh ;Temp drive = current
;
;TODO: SCB at FE9Ch
;
;
; Mallard BASIC (and maybe other programs) assumes that the BIOS
; jumpblock is a list of jumps, not calls. So rather than composing the
; BIOS jumpblock of a sequence of CALL UBIOS, it's now a sequence
; of jumps to CALL UBIOS.
;
org 0FF00h
JP CBOOT ;FF00
WBOOT0: JP WBOOT ;03
CALL UBIOS ;06
CALL UBIOS ;09
CALL UBIOS ;0C
CALL UBIOS ;0F
CALL UBIOS ;12
CALL UBIOS ;15
CALL UBIOS ;18
CALL UBIOS ;1B
CALL UBIOS ;1E
CALL UBIOS ;21
CALL UBIOS ;24
CALL UBIOS ;27
CALL UBIOS ;2A
CALL UBIOS ;2D
CALL UBIOS ;30
CALL UBIOS ;33
CALL UBIOS ;36
CALL UBIOS ;39
CALL UBIOS ;42
CALL UBIOS ;45
CALL UBIOS ;48
CALL UBIOS ;4B
CALL UBIOS ;4E
CALL UBIOS ;51
CALL UBIOS ;54
CALL UBIOS ;57
CALL UBIOS ;5A, USERF
CALL UBIOS ;5D, RESERV1
CALL UBIOS ;60, RESERV2
CONST0: JP BIOS2
JP BIOS3
JP BIOS4
JP BIOS5
JP BIOS6
JP BIOS7
JP BIOS8
JP BIOS9
JP BIOS10
JP BIOS11
JP BIOS12
JP BIOS13
JP BIOS14
JP BIOS15
JP BIOS16
JP BIOS17
JP BIOS18
JP BIOS19
JP BIOS20
JP BIOS21
JP BIOS22
JP BIOS23
JP BIOS24
JP BIOS25
JP BIOS26
JP BIOS27
JP BIOS28
JP BIOS29
JP BIOS30
JP BIOS31
JP BIOS32
;
org 0FFC0h ;Space for DPB
dpb: defs 20h

16
Tools/zxcc/ReadMe.txt

@ -62,7 +62,7 @@ wwarthen@gmail.com
January 9, 2022
- Running zxcc under WSL (Windows Subsystem for Linux) was gererating output
- Running zxcc under WSL (Windows Subsystem for Linux) was generating output
that was correct but did not match standard Windows or Linux runs. This
turned out to be an assumption in a few places in the code that reading
into a buffer would not modify the area of the buffer that was beyond
@ -78,9 +78,21 @@ January 9, 2022
Nicholson's GitHub repo at https://github.com/agn453/ZXCC. The most
significant difference in my code is that I am using the WIN32 API
for all disk I/O. Although the file tracking code is retained, I have
found this mechanism to fail insome scenarios. By using the WIN32 API
found this mechanism to fail in some scenarios. By using the WIN32 API
I can achieve the same file sharing attributes as Unix which makes the
file tracking mechanism optional.
--WBW 9:34 AM 2/10/2022
- Added a call to trackFile in fcb_close. I think it was always
supposed to be there. Was not causing any real problems other
than superfluous attempts by releaseFile to close files that
were already closed.
--WBW 3:58 PM 3/2/2022
The CP/M BIOS was updated to sync with the latest from Tony
Nicholson and to remove the ZMAC workaround that I had put there
previously. ZMAC was patched instead.
--WBW 1:41 PM 11/17/2025

BIN
Tools/zxcc/bios.bin

Binary file not shown.

BIN
Tools/zxcc/zxcc-src.zip

Binary file not shown.

BIN
Tools/zxcc/zxcc.exe

Binary file not shown.

BIN
Tools/zxcc/zxcc_ft.exe

Binary file not shown.

BIN
Tools/zxcc/zxccdbg.exe

Binary file not shown.

BIN
Tools/zxcc/zxccdbg_ft.exe

Binary file not shown.
Loading…
Cancel
Save