371 lines
11 KiB
Markdown
371 lines
11 KiB
Markdown
---
|
|
layout: page
|
|
title: Challenger 1P ROMs
|
|
permalink: /devices/c1p/rom/
|
|
---
|
|
|
|
Challenger 1P ROMs
|
|
---
|
|
|
|
The following ROMs are available:
|
|
|
|
- [BASIC (8Kb)](basic.json) ([HEX](basic.hex))
|
|
- [BASIC (8Kb) with GC Patch](basic-gcpatch.json) ([HEX](basic-gcpatch.hex))
|
|
- [SYSTEM (2Kb)](system.json) ([HEX](system.hex))
|
|
|
|
BASIC Garbage Collection (GC) Patch
|
|
---
|
|
|
|
The following information comes from BAS3FIX.TXT in the ["Fixed BASIC3 ROM"](http://osiweb.org/roms/basfix02.zip) ZIP
|
|
archive at [osiweb.org](http://osiweb.org/software.html#BASIC_ROMS). The patch was created in 2001 and is attributed to
|
|
"[Ed](http://dxforth.netbay.com.au/)" (formerly at http://www.netbay.com.au/~dxforth/).
|
|
|
|
New OSI/UK101 ROM BASIC garbage collection bug patch
|
|
----------------------------------------------------
|
|
|
|
The 8K ROM BASIC supplied with the OSI Superboard II and
|
|
UK101 computers contains a bug in the garbage collector
|
|
routine (see Listing 1). A patch was subsequently made
|
|
available in the form of an updated BASIC 3 ROM (for the
|
|
UK101 at least). The code is shown in Listing 3.
|
|
|
|
Unfortunately the patch was not a complete solution and
|
|
corrupted strings could still occur - see Listing 2.
|
|
|
|
Listing 4 shows a new garbage collector patch that fixes
|
|
all the problems. It is a combination of the original
|
|
patch with changes found in later versions of Microsoft
|
|
6502 BASIC.
|
|
|
|
Implementing the patch requires replacing of the BASIC 3
|
|
ROM. Binary and hex dumps for the new ROM are enclosed.
|
|
|
|
The patch and rom images suit either the OSI or UK101 ROM
|
|
BASIC.
|
|
|
|
|
|
4-Oct-2001
|
|
|
|
-----------------------------------------------------------
|
|
|
|
[Listing 1]
|
|
|
|
Demonstrates garbage collection bug in OSI/UK101 ROM BASIC.
|
|
|
|
10 DIM A$(3)
|
|
RUN
|
|
PRINT FRE(0) (machine hangs)
|
|
|
|
|
|
[Listing 2]
|
|
|
|
String corruption occurs with an unmodified ROM BASIC or
|
|
the original garbage collection patch. Before entering
|
|
the program, perform a Cold start and enter 1000 for the
|
|
memory size.
|
|
|
|
5 A$="+"
|
|
10 A$="-"+A$+"-"
|
|
20 A$="+"+A$+"+"
|
|
30 PRINT A$
|
|
40 GOTO 10
|
|
|
|
|
|
[Listing 3]
|
|
|
|
Original garbage collection patch
|
|
|
|
B147 LDX $85
|
|
LDA $86
|
|
B14B STX $81
|
|
STA $82
|
|
LDY #0
|
|
STY $9D
|
|
LDA $7F
|
|
LDX $80
|
|
STA $AA
|
|
STX $AB
|
|
LDA #$68
|
|
STA $71
|
|
STY $72
|
|
B161 CMP $65
|
|
BEQ $B16A
|
|
JSR $B1D7
|
|
BEQ $B161
|
|
B16A LDA #6
|
|
STA $A0
|
|
LDA $7B
|
|
LDX $7C
|
|
STA $71
|
|
STX $72
|
|
B176 CPX $7E
|
|
BNE $B17E
|
|
CMP $7D
|
|
BEQ $B183
|
|
B17E JSR $B1D1
|
|
BEQ $B176
|
|
B183 STA $A4
|
|
STX $A5
|
|
LDA #4
|
|
STA $A0
|
|
B18B LDA $A4
|
|
LDX $A5
|
|
B18F CPX $80
|
|
BNE $B19A
|
|
CMP $7F
|
|
BNE $B19A
|
|
JMP $B216
|
|
|
|
B19A STA $71
|
|
STX $72
|
|
LDY #1
|
|
LDA ($71),Y
|
|
PHP
|
|
INY
|
|
LDA ($71),Y
|
|
ADC $A4
|
|
STA $A4
|
|
INY
|
|
LDA ($71),Y
|
|
ADC $A5
|
|
STA $A5
|
|
PLP
|
|
BPL $B18B
|
|
INY
|
|
LDA ($71),Y
|
|
ASL A
|
|
ADC #5
|
|
ADC $71
|
|
STA $71
|
|
BCC $B1C2
|
|
INC $72
|
|
B1C2 LDX $72
|
|
B1C4 CPX $A5
|
|
BNE $B1CC
|
|
CMP $A4
|
|
BEQ $B18F
|
|
B1CC JSR $B1D7
|
|
BEQ $B1C4
|
|
B1D1 INY
|
|
LDA ($71),Y
|
|
BPL $B206
|
|
INY
|
|
B1D7 LDA ($71),Y
|
|
BEQ $B206
|
|
INY
|
|
LDA ($71),Y
|
|
TAX
|
|
INY
|
|
LDA ($71),Y
|
|
CMP $82
|
|
BCC $B1EC
|
|
BNE $B206
|
|
CPX $81
|
|
BCS $B206
|
|
B1EC CMP $AB
|
|
BCC $B206
|
|
BNE $B1F6
|
|
CPX $AA
|
|
BCC $B206
|
|
B1F6 STX $AA
|
|
STA $AB
|
|
LDA $71
|
|
LDX $72
|
|
STA $9C
|
|
STX $9D
|
|
DEY
|
|
DEY
|
|
STY $A2
|
|
B206 LDA $A0
|
|
CLC
|
|
ADC $71
|
|
STA $71
|
|
BCC $B211
|
|
INC $72
|
|
B211 LDX $72
|
|
LDY #0
|
|
RTS
|
|
|
|
B216 DEC $A0
|
|
LDX $9D
|
|
BEQ $B211
|
|
LDY $A2
|
|
CLC
|
|
LDA ($9C),Y
|
|
ADC $AA
|
|
STA $A6
|
|
LDA $AB
|
|
ADC #0
|
|
STA $A7
|
|
LDA $81
|
|
LDX $82
|
|
STA $A4
|
|
STX $A5
|
|
JSR LA1D6
|
|
LDY $A2
|
|
INY
|
|
LDA $A4
|
|
STA ($9C),Y
|
|
TAX
|
|
INC $A5
|
|
LDA $A5
|
|
INY
|
|
STA ($9C),Y
|
|
JMP $B14B
|
|
|
|
.BYTE $53,$54,$49,$42,$4F ; RUBBISH
|
|
|
|
|
|
[Listing 4]
|
|
|
|
New garbage collection patch
|
|
|
|
1 ; NEW GARBAGE COLLECTION FIX FOR
|
|
2 ; OSI/UK101 ROM BASIC 4-Oct-2001
|
|
3
|
|
4 B147 *= $B147
|
|
5
|
|
6 B147 A6 85 LDX $85
|
|
7 B149 A5 86 LDA $86
|
|
8 B14B 86 81 L1 STX $81
|
|
9 B14D 85 82 STA $82
|
|
10 B14F A0 00 LDY #0
|
|
11 B151 84 9D STY $9D
|
|
12 B153 84 9C STY $9C
|
|
13 B155 A5 7F LDA $7F
|
|
14 B157 A6 80 LDX $80
|
|
15 B159 85 AA STA $AA
|
|
16 B15B 86 AB STX $AB
|
|
17 B15D A9 68 LDA #$68
|
|
18 B15F 85 71 STA $71
|
|
19 B161 84 72 STY $72
|
|
20 B163 C5 65 L2 CMP $65
|
|
21 B165 F0 05 BEQ L3
|
|
22 B167 20 D8 B1 JSR L14
|
|
23 B16A F0 F7 BEQ L2
|
|
24 B16C A9 06 L3 LDA #6
|
|
25 B16E 85 A0 STA $A0
|
|
26 B170 A5 7B LDA $7B
|
|
27 B172 A6 7C LDX $7C
|
|
28 B174 85 71 STA $71
|
|
29 B176 86 72 STX $72
|
|
30 B178 E4 7E L4 CPX $7E
|
|
31 B17A D0 04 BNE L5
|
|
32 B17C C5 7D CMP $7D
|
|
33 B17E F0 05 BEQ L6
|
|
34 B180 20 D2 B1 L5 JSR L13
|
|
35 B183 F0 F3 BEQ L4
|
|
36 B185 85 A4 L6 STA $A4
|
|
37 B187 86 A5 STX $A5
|
|
38 B189 A9 04 LDA #4
|
|
39 B18B 85 A0 STA $A0
|
|
40 B18D A5 A4 L7 LDA $A4
|
|
41 B18F A6 A5 LDX $A5
|
|
42 B191 E4 80 L8 CPX $80
|
|
43 B193 D0 04 BNE L9
|
|
44 B195 C5 7F CMP $7F
|
|
45 B197 F0 7E BEQ L19
|
|
46
|
|
47 B199 85 71 L9 STA $71
|
|
48 B19B 86 72 STX $72
|
|
49 B19D A0 01 LDY #1
|
|
50 B19F B1 71 LDA ($71),Y
|
|
51 B1A1 08 PHP
|
|
52 B1A2 C8 INY
|
|
53 B1A3 B1 71 LDA ($71),Y
|
|
54 B1A5 65 A4 ADC $A4
|
|
55 B1A7 85 A4 STA $A4
|
|
56 B1A9 C8 INY
|
|
57 B1AA B1 71 LDA ($71),Y
|
|
58 B1AC 65 A5 ADC $A5
|
|
59 B1AE 85 A5 STA $A5
|
|
60 B1B0 28 PLP
|
|
61 B1B1 10 DA BPL L7
|
|
62 B1B3 C8 INY
|
|
63 B1B4 B1 71 LDA ($71),Y
|
|
64 B1B6 A0 00 LDY #0
|
|
65 B1B8 0A ASL A
|
|
66 B1B9 69 05 ADC #5
|
|
67 B1BB 65 71 ADC $71
|
|
68 B1BD 85 71 STA $71
|
|
69 B1BF 90 02 BCC L10
|
|
70 B1C1 E6 72 INC $72
|
|
71 B1C3 A6 72 L10 LDX $72
|
|
72 B1C5 E4 A5 L11 CPX $A5
|
|
73 B1C7 D0 04 BNE L12
|
|
74 B1C9 C5 A4 CMP $A4
|
|
75 B1CB F0 C4 BEQ L8
|
|
76 B1CD 20 D8 B1 L12 JSR L14
|
|
77 B1D0 F0 F3 BEQ L11
|
|
78
|
|
79 B1D2 C8 L13 INY
|
|
80 B1D3 B1 71 LDA ($71),Y
|
|
81 B1D5 10 30 BPL L17
|
|
82 B1D7 C8 INY
|
|
83 B1D8 B1 71 L14 LDA ($71),Y
|
|
84 B1DA F0 2B BEQ L17
|
|
85 B1DC C8 INY
|
|
86 B1DD B1 71 LDA ($71),Y
|
|
87 B1DF AA TAX
|
|
88 B1E0 C8 INY
|
|
89 B1E1 B1 71 LDA ($71),Y
|
|
90 B1E3 C5 82 CMP $82
|
|
91 B1E5 90 06 BCC L15
|
|
92 B1E7 D0 1E BNE L17
|
|
93 B1E9 E4 81 CPX $81
|
|
94 B1EB B0 1A BCS L17
|
|
95 B1ED C5 AB L15 CMP $AB
|
|
96 B1EF 90 16 BCC L17
|
|
97 B1F1 D0 04 BNE L16
|
|
98 B1F3 E4 AA CPX $AA
|
|
99 B1F5 90 10 BCC L17
|
|
100 B1F7 86 AA L16 STX $AA
|
|
101 B1F9 85 AB STA $AB
|
|
102 B1FB A5 71 LDA $71
|
|
103 B1FD A6 72 LDX $72
|
|
104 B1FF 85 9C STA $9C
|
|
105 B201 86 9D STX $9D
|
|
106 B203 88 DEY
|
|
107 B204 88 DEY
|
|
108 B205 84 A2 STY $A2
|
|
109 B207 A5 A0 L17 LDA $A0
|
|
110 B209 18 CLC
|
|
111 B20A 65 71 ADC $71
|
|
112 B20C 85 71 STA $71
|
|
113 B20E 90 02 BCC L18
|
|
114 B210 E6 72 INC $72
|
|
115 B212 A6 72 L18 LDX $72
|
|
116 B214 A0 00 LDY #0
|
|
117 B216 60 RTS
|
|
118
|
|
119 B217 C6 A0 L19 DEC $A0
|
|
120 B219 A5 9D LDA $9D
|
|
121 B21B 05 9C ORA $9C
|
|
122 B21D F0 F3 BEQ L18
|
|
123 B21F A4 A2 LDY $A2
|
|
124 B221 18 CLC
|
|
125 B222 B1 9C LDA ($9C),Y
|
|
126 B224 65 AA ADC $AA
|
|
127 B226 85 A6 STA $A6
|
|
128 B228 A5 AB LDA $AB
|
|
129 B22A 69 00 ADC #0
|
|
130 B22C 85 A7 STA $A7
|
|
131 B22E A5 81 LDA $81
|
|
132 B230 A6 82 LDX $82
|
|
133 B232 85 A4 STA $A4
|
|
134 B234 86 A5 STX $A5
|
|
135 B236 20 D6 A1 JSR $A1D6
|
|
136 B239 A4 A2 LDY $A2
|
|
137 B23B C8 INY
|
|
138 B23C A5 A4 LDA $A4
|
|
139 B23E 91 9C STA ($9C),Y
|
|
140 B240 AA TAX
|
|
141 B241 E6 A5 INC $A5
|
|
142 B243 A5 A5 LDA $A5
|
|
143 B245 C8 INY
|
|
144 B246 91 9C STA ($9C),Y
|
|
145 B248 4C 4B B1 JMP L1
|
|
146
|
|
147 B24B FF FF .BYTE $FF,$FF
|
|
148
|
|
149 B24D .END
|