11 KiB
11 KiB
| layout | title | permalink |
|---|---|---|
| page | Challenger 1P ROMs | /devices/c1p/rom/ |
Challenger 1P ROMs
The following ROMs are available:
BASIC Garbage Collection (GC) Patch
The following information comes from BAS3FIX.TXT in the "Fixed BASIC3 ROM" ZIP archive at osiweb.org. The patch was created in 2001 and is attributed to "Ed" (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