URL
https://opencores.org/ocsvn/raptor64/raptor64/trunk
Subversion Repositories raptor64
Compare Revisions
- This comparison shows the changes necessary to convert path
/raptor64
- from Rev 45 to Rev 46
- ↔ Reverse comparison
Rev 45 → Rev 46
/trunk/software/sample code/sieve.v
0,0 → 1,302
rommem[64] = 65'h132200285544F4F42; |
rommem[65] = 65'h00000000000000000; |
rommem[66] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[67] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[68] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[69] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[70] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[71] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[72] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[73] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[74] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[75] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[76] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[77] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[78] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[79] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[80] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[81] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[82] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[83] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[84] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[85] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[86] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[87] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[88] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[89] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[90] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[91] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[92] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[93] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[94] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[95] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[96] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[97] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[98] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[99] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[100] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[101] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[102] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[103] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[104] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[105] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[106] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[107] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[108] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[109] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[110] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[111] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[112] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[113] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[114] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[115] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[116] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[117] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[118] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[119] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[120] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[121] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[122] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[123] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[124] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[125] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[126] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[127] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[128] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[129] = 65'h0FFFFFFFFFFFFFFFF; |
rommem[130] = 65'h167ED80000FEF0018; |
rommem[131] = 65'h067EF801067EE0008; |
rommem[132] = 65'h0EE800402E6800747; |
rommem[133] = 65'h103ED80096A0D702D; |
rommem[134] = 65'h1EE800003E6835028; |
rommem[135] = 65'h00FEF003805ED7805; |
rommem[136] = 65'h067E6000867E58000; |
rommem[137] = 65'h167E7001867E68010; |
rommem[138] = 65'h067E8002867E78020; |
rommem[139] = 65'h01607FFFF67E88030; |
rommem[140] = 65'h1EEBFFFFDE688E4F0; |
rommem[141] = 65'h1023800096BBD0C2D; |
rommem[142] = 65'h0E69C0600160080AB; |
rommem[143] = 65'h16A0D0428EE800003; |
rommem[144] = 65'h0021180093020027D; |
rommem[145] = 65'h1160080AC02388009; |
rommem[146] = 65'h0EE800003E69C0600; |
rommem[147] = 65'h0160080176A0D0428; |
rommem[148] = 65'h00181CD1703E10009; |
rommem[149] = 65'h0000000140FEF0008; |
rommem[150] = 65'h0DE000000DE000000; |
rommem[151] = 65'h0DE000000DE000000; |
rommem[152] = 65'h0160080AE67E20000; |
rommem[153] = 65'h0EE800003E69C0600; |
rommem[154] = 65'h0DE0000006A0D0428; |
rommem[155] = 65'h0DE000000DE000000; |
rommem[156] = 65'h0DE000000DE000000; |
rommem[157] = 65'h0000000140FEF0010; |
rommem[158] = 65'h0DE000000DE000000; |
rommem[159] = 65'h0DE000000DE000000; |
rommem[160] = 65'h167E88008DE000000; |
rommem[161] = 65'h0DE00000000000014; |
rommem[162] = 65'h0DE000000DE000000; |
rommem[163] = 65'h0DE000000DE000000; |
rommem[164] = 65'h0EE800402E6800412; |
rommem[165] = 65'h000000014040D0C09; |
rommem[166] = 65'h0DE000000DE000000; |
rommem[167] = 65'h0DE000000DE000000; |
rommem[168] = 65'h067E18000DE000000; |
rommem[169] = 65'h0DE000000DE000000; |
rommem[170] = 65'h0DE000000DE000000; |
rommem[171] = 65'h1160080AEDE000000; |
rommem[172] = 65'h0EE800003E69C0600; |
rommem[173] = 65'h0000000286A0D0428; |
rommem[174] = 65'h10BEF0010302001D4; |
rommem[175] = 65'h10BEF000847E20000; |
rommem[176] = 65'h1160080AD02118009; |
rommem[177] = 65'h0EE800003E69C0600; |
rommem[178] = 65'h1000000406A0D0428; |
rommem[179] = 65'h0040D0C09E696E360; |
rommem[180] = 65'h11601800002370009; |
rommem[181] = 65'h1BEB700A102358009; |
rommem[182] = 65'h06B058F1308B18002; |
rommem[183] = 65'h1BE007F8A0AB58001; |
rommem[184] = 65'h10235800916018000; |
rommem[185] = 65'h06B058F03BEB701C1; |
rommem[186] = 65'h16B058F03BE378148; |
rommem[187] = 65'h00C41800206320200; |
rommem[188] = 65'h1BEC700A102360009; |
rommem[189] = 65'h06B058F036B063F13; |
rommem[190] = 65'h0BE007F8A04C1B002; |
rommem[191] = 65'h1BE007E6A0AB58001; |
rommem[192] = 65'h00236000916018000; |
rommem[193] = 65'h10235800916018000; |
rommem[194] = 65'h0E68186A0BEB701A1; |
rommem[195] = 65'h16B058F03BECD0161; |
rommem[196] = 65'h06B058F03BE3780E8; |
rommem[197] = 65'h0E6BCAFF008C60001; |
rommem[198] = 65'h16BBD102DEEBFFFFC; |
rommem[199] = 65'h10AB580016A460F13; |
rommem[200] = 65'h10FEF0010BE007E8A; |
rommem[201] = 65'h067E2800067E20008; |
rommem[202] = 65'h147E200083020027D; |
rommem[203] = 65'h00BEF001047E28000; |
rommem[204] = 65'h00236800902118009; |
rommem[205] = 65'h067E200080FEF0010; |
rommem[206] = 65'h00FEF001067E28000; |
rommem[207] = 65'h067E1800804D88C04; |
rommem[208] = 65'h0EE800402E6800412; |
rommem[209] = 65'h067E18000040D0C09; |
rommem[210] = 65'h10BEF0010302001D4; |
rommem[211] = 65'h047E2800047E20008; |
rommem[212] = 65'h1021180090BEF0010; |
rommem[213] = 65'h10235800916018000; |
rommem[214] = 65'h0BEBD02C1E68186A0; |
rommem[215] = 65'h067E200080FEF0010; |
rommem[216] = 65'h00FEF001067E28000; |
rommem[217] = 65'h1EEBFFFFCE6BCAFF0; |
rommem[218] = 65'h16A3593036BBD0C2D; |
rommem[219] = 65'h1E680041267E20008; |
rommem[220] = 65'h0040D1009EE800402; |
rommem[221] = 65'h1302001D467E20000; |
rommem[222] = 65'h047E200080BEF0010; |
rommem[223] = 65'h00BEF001047E28000; |
rommem[224] = 65'h00AB5800102120009; |
rommem[225] = 65'h116008000BE007D4A; |
rommem[226] = 65'h147E8002847E88030; |
rommem[227] = 65'h047E7001847E78020; |
rommem[228] = 65'h147E6000847E68010; |
rommem[229] = 65'h10BEF003847E58000; |
rommem[230] = 65'h047ED800003BF0009; |
rommem[231] = 65'h047EF801047EE0008; |
rommem[232] = 65'h047BF800837EF8018; |
rommem[233] = 65'h1BE007E2A67BF8010; |
rommem[234] = 65'h0E69C0600160080B0; |
rommem[235] = 65'h16A0D0428EE800003; |
rommem[236] = 65'h167ED80000FEF0018; |
rommem[237] = 65'h067EF801067EE0008; |
rommem[238] = 65'h0EE800402E6800937; |
rommem[239] = 65'h103ED80096A0D702D; |
rommem[240] = 65'h10FEF00180FEF0008; |
rommem[241] = 65'h067E6000867E58000; |
rommem[242] = 65'h147B1801867E68010; |
rommem[243] = 65'h0E680094302360009; |
rommem[244] = 65'h0040D3409EE800402; |
rommem[245] = 65'h0E69C0600160080AE; |
rommem[246] = 65'h16A0D0428EE800003; |
rommem[247] = 65'h0023580099BB18018; |
rommem[248] = 65'h1BE300A6842C18000; |
rommem[249] = 65'h1B230422542C18000; |
rommem[250] = 65'h142C180000AC60002; |
rommem[251] = 65'h00430040902318015; |
rommem[252] = 65'h1B0101163B0100525; |
rommem[253] = 65'h0B0102B73B0101E64; |
rommem[254] = 65'h10FEF0010BE00070A; |
rommem[255] = 65'h067E2800067E20008; |
rommem[256] = 65'h0160180250FEF0008; |
rommem[257] = 65'h134DF800067E18000; |
rommem[258] = 65'h047E200080BEF0008; |
rommem[259] = 65'h00BEF001047E28000; |
rommem[260] = 65'h0BE00056A02118009; |
rommem[261] = 65'h10FEF00100AB58008; |
rommem[262] = 65'h067E2800067E20008; |
rommem[263] = 65'h046B180000FEF0008; |
rommem[264] = 65'h134DF800067E18000; |
rommem[265] = 65'h047E200080BEF0008; |
rommem[266] = 65'h00BEF001047E28000; |
rommem[267] = 65'h0BE0003AA02118009; |
rommem[268] = 65'h10FEF00100AB58008; |
rommem[269] = 65'h067E2800067E20008; |
rommem[270] = 65'h046B180000FEF0008; |
rommem[271] = 65'h13020026267E18000; |
rommem[272] = 65'h047E200080BEF0008; |
rommem[273] = 65'h00BEF001047E28000; |
rommem[274] = 65'h0BE0001EA02118009; |
rommem[275] = 65'h10FEF00100AB58008; |
rommem[276] = 65'h067E2800067E20008; |
rommem[277] = 65'h046B180000FEF0008; |
rommem[278] = 65'h03020027467E18000; |
rommem[279] = 65'h047E200080BEF0008; |
rommem[280] = 65'h00BEF001047E28000; |
rommem[281] = 65'h1BE00002A02118009; |
rommem[282] = 65'h10FEF0010BE0001CA; |
rommem[283] = 65'h067E2800067E20008; |
rommem[284] = 65'h042C180000FEF0008; |
rommem[285] = 65'h067E1800002318015; |
rommem[286] = 65'h00BEF000834DF8000; |
rommem[287] = 65'h047E2800047E20008; |
rommem[288] = 65'h1021180090BEF0010; |
rommem[289] = 65'h0BE0075AA0AC60002; |
rommem[290] = 65'h147E6000847E68010; |
rommem[291] = 65'h00BEF001847E58000; |
rommem[292] = 65'h047ED800003BF0009; |
rommem[293] = 65'h047EF801047EE0008; |
rommem[294] = 65'h047BF800837EF8018; |
rommem[295] = 65'h0BE007EAA67BF8010; |
rommem[296] = 65'h167ED80000FEF0018; |
rommem[297] = 65'h1160080AF03ED8009; |
rommem[298] = 65'h0EE800003E69C0600; |
rommem[299] = 65'h01600800A6A0D0428; |
rommem[300] = 65'h01601800147B10018; |
rommem[301] = 65'h1160080B00181CD17; |
rommem[302] = 65'h0EE800003E69C0600; |
rommem[303] = 65'h103BF00096A0D0428; |
rommem[304] = 65'h037EF801847ED8000; |
rommem[305] = 65'h167ED80000FEF0018; |
rommem[306] = 65'h1160080B103ED8009; |
rommem[307] = 65'h0EE800003E69C0600; |
rommem[308] = 65'h1160080156A0D0428; |
rommem[309] = 65'h11601800547B10018; |
rommem[310] = 65'h0160080B20181CD17; |
rommem[311] = 65'h0EE800003E69C0600; |
rommem[312] = 65'h103BF00096A0D0428; |
rommem[313] = 65'h037EF801847ED8000; |
rommem[314] = 65'h167ED80000FEF0018; |
rommem[315] = 65'h11600801403ED8009; |
rommem[316] = 65'h00181CD1747B10018; |
rommem[317] = 65'h047ED800003BF0009; |
rommem[318] = 65'h00FEF001837EF8018; |
rommem[319] = 65'h103ED800967ED8000; |
rommem[320] = 65'h00181D01716008000; |
rommem[321] = 65'h047ED800003BF0009; |
rommem[322] = 65'h00FEF001837EF8018; |
rommem[323] = 65'h067EE000867ED8000; |
rommem[324] = 65'h1E6800ADF67EF8010; |
rommem[325] = 65'h16A0D702DEE800402; |
rommem[326] = 65'h1160080AA03ED8009; |
rommem[327] = 65'h0EE800003E69C0600; |
rommem[328] = 65'h0E68002086A0D0428; |
rommem[329] = 65'h16A0D7813EE800402; |
rommem[330] = 65'h0EE80041FE6BFFFF8; |
rommem[331] = 65'h016008017040D7809; |
rommem[332] = 65'h00181CD1703E10009; |
rommem[333] = 65'h1EE800402E6800A8B; |
rommem[334] = 65'h1302001046A0D702D; |
rommem[335] = 65'h1EE800402E6800208; |
rommem[336] = 65'h1BE00022A6A0D7803; |
rommem[337] = 65'h067E200080FEF0010; |
rommem[338] = 65'h00FEF000867E28000; |
rommem[339] = 65'h0EE800402E6800412; |
rommem[340] = 65'h067E18000040D0C09; |
rommem[341] = 65'h10BEF000830200274; |
rommem[342] = 65'h047E2800047E20008; |
rommem[343] = 65'h1E68002080BEF0010; |
rommem[344] = 65'h06A0D7803EE800402; |
rommem[345] = 65'h047ED800003BF0009; |
rommem[346] = 65'h047EF801047EE0008; |
rommem[347] = 65'h047BF800837EF8018; |
rommem[348] = 65'h0BE007F2A67BF8010; |
rommem[349] = 65'h00000000000000000; |
rommem[350] = 65'h10067006F00720050; |
rommem[351] = 65'h10020006D00610072; |
rommem[352] = 65'h00072006F00620061; |
rommem[353] = 65'h00020006400650074; |
rommem[354] = 65'h1006F006E00620061; |
rommem[355] = 65'h0006C0061006D0072; |
rommem[356] = 65'h00025002E0079006C; |
rommem[357] = 65'h0006C0043000A0064; |
rommem[358] = 65'h00020006B0063006F; |
rommem[359] = 65'h1006B006300690074; |
rommem[360] = 65'h00064002500200073; |
rommem[361] = 65'h100740053000A000D; |
rommem[362] = 65'h00020007400720061; |
rommem[363] = 65'h1006B006300690074; |
rommem[364] = 65'h0000D006400250020; |
rommem[365] = 65'h00000000000000000; |
/trunk/software/sample code/sieve.lis
0,0 → 1,259
1 /*#include <stdio.h>*/ |
2 |
3 #define LIMIT 1500000 /*size of integers array*/ |
4 #define PRIMES 100000 /*size of primes array*/ |
5 |
6 nocall my_org() { |
7 asm { |
8 org 0x100800200 |
9 db "BOOT" |
10 jmp crt_start |
11 .align 8 |
12 sp_save: |
13 dw 0 |
14 } |
15 } |
16 |
|
|
*** local symbol table *** |
|
|
|
|
17 int main(){ |
18 int i,j,numbers[LIMIT]; |
19 int primes[PRIMES]; |
20 int limit; |
21 int start_tick,end_tick; |
22 |
23 asm { |
24 sei |
25 lw r1,#0xAB |
26 outb r1,0xdc0600 |
27 } |
28 start_tick = get_tick(); |
29 asm { |
30 lw r1,#0xAC |
31 outb r1,0xdc0600 |
32 } |
33 printf("Start tick %d\r\n", start_tick); |
34 asm { |
35 lw r1,#0xAD |
36 outb r1,0xdc0600 |
37 cli |
38 } |
39 |
40 limit=LIMIT; |
41 |
42 /*fill the array with natural numbers*/ |
43 for (i=0;i<limit;i++){ |
44 numbers[i]=i+2; |
45 } |
46 |
47 /*sieve the non-primes*/ |
48 for (i=0;i<limit;i++){ |
49 if (numbers[i]!=-1){ |
50 for (j=2*numbers[i]-2;j<limit;j+=numbers[i]) |
51 numbers[j]=-1; |
52 } |
53 } |
54 |
55 /*transfer the primes to their own array*/ |
56 j = 0; |
57 for (i=0;i<limit&&j<PRIMES;i++) |
58 if (numbers[i]!=-1) |
59 primes[j++] = numbers[i]; |
60 |
61 end_tick = get_tick(); |
62 printf("Clock ticks %d\r\n", end_tick-start_tick); |
63 |
64 /*print*/ |
65 for (i=0;i<PRIMES;i++) |
66 printf("%d\n",primes[i]); |
67 |
68 return 0; |
69 } |
70 |
|
|
*** local symbol table *** |
|
i =fffffff8 - Auto Long |
j =fffffff0 - Auto Long |
numbers =ff48e4f0 - Auto Array of Long |
primes =ff3caff0 - Auto Array of Long |
limit =ff3cafe8 - Auto Long |
start_tick =ff3cafe0 - Auto Long |
end_tick =ff3cafd8 - Auto Long |
|
|
|
71 int printf(char *p) |
72 { |
73 int *q; |
74 asm { |
75 lw r1,#0xAE |
76 outb r1,0xdc0600 |
77 } |
78 q = &p; |
79 |
80 for (; *p; p++) { |
81 if (*p=='%') { |
82 p++; |
83 switch(*p) { |
84 case '%': |
85 putch('%'); |
86 break; |
87 case 'c': |
88 q++; |
89 putch(*q); |
90 break; |
91 case 'd': |
92 q++; |
93 putnum(*q); |
94 break; |
95 case 's': |
96 q++; |
97 putstr(*q); |
98 break; |
99 } |
100 } |
101 else |
102 putch(*p); |
103 } |
104 } |
105 |
|
|
*** local symbol table *** |
|
p =000018 - Auto Pointer to Char |
q =fffffff8 - Auto Pointer to Long |
|
|
|
106 void putch(char ch) |
107 { |
108 asm { |
109 lw r1,#0xAF |
110 outb r1,0xdc0600 |
111 } |
112 asm { |
113 lw r1,#0x0a |
114 lw r2,24[bp] |
115 lw r3,#1 |
116 syscall #410 |
117 } |
118 asm { |
119 lw r1,#0xB0 |
120 outb r1,0xdc0600 |
121 } |
122 } |
123 |
|
|
*** local symbol table *** |
|
ch =000018 - Auto Char |
|
|
|
124 void putnum(int num) |
125 { |
126 asm { |
127 lw r1,#0xB1 |
128 outb r1,0xdc0600 |
129 } |
130 asm { |
131 lw r1,#0x15 |
132 lw r2,24[bp] |
133 lw r3,#5 |
134 syscall #410 |
135 } |
136 asm { |
137 lw r1,#0xB2 |
138 outb r1,0xdc0600 |
139 } |
140 } |
141 |
|
|
*** local symbol table *** |
|
num =000018 - Auto Long |
|
|
|
142 void putstr(char *p) |
143 { |
144 asm { |
145 lw r1,#0x14 |
146 lw r2,24[bp] |
147 syscall #410 |
148 } |
149 } |
150 |
|
|
*** local symbol table *** |
|
p =000018 - Auto Pointer to Char |
|
|
|
151 int get_tick() |
152 { |
153 asm { |
154 lw r1,#0 |
155 syscall #416 |
156 } |
157 } |
158 |
|
|
*** local symbol table *** |
|
|
|
|
159 void crt_start() |
160 { |
161 asm { |
162 lw r1,#0xAA |
163 outb r1,0xdc0600 |
164 sw sp,sp_save |
165 lw sp,#0x1_07FFFFF8 |
166 lea xlr,prog_abort |
167 call main |
168 lw sp,sp_save |
169 bra retcode |
170 prog_abort: |
171 } |
172 putstr("Program aborted abnormally."); |
173 asm { |
174 lw sp,sp_save |
175 retcode: |
176 } |
177 } |
|
|
*** local symbol table *** |
|
|
|
|
|
*** global scope typedef symbol table *** |
|
putch =000000 - Global Function returning |
get_tick =000000 - Global Function returning Long |
my_org =000000 - Global Function returning |
printf =000000 - Global Function returning Long |
main =000000 - Global Function returning Long |
putnum =000000 - Global Function returning |
putstr =000000 - Global Function returning |
crt_start =000000 - Global Function returning |
|
*** structures and unions *** |
|
/trunk/software/sample code/bootrom.lst
1,7 → 1,10
; ============================================================================ |
; (C) 2012,2013 Robert Finch, Stratford |
; All Rights Reserved. |
; robfinch<remove>@opencores.org |
; __ |
; \\__/ o\ (C) 2012-2013 Robert Finch, Stratford |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; This source file is free software: you can redistribute it and/or modify |
; it under the terms of the GNU Lesser General Public License as published |
23,11 → 26,17
TAB EQU 0x09 |
CTRLC EQU 0x03 |
CTRLH EQU 0x08 |
CTRLI EQU 0x09 |
CTRLJ EQU 0x0A |
CTRLK EQU 0x0B |
CTRLM EQU 0x0D |
CTRLS EQU 0x13 |
CTRLX EQU 0x18 |
XON EQU 0x11 |
XOFF EQU 0x13 |
|
EX_IRQ EQU 449 |
|
DATA_PRESENT EQU 0x01 ; there is data preset at the serial port bc_uart3 |
XMIT_NOT_FULL EQU 0x20 |
|
90,15 → 99,19
TCBr30 EQU 0xE8 |
TCBr31 EQU 0xF0 |
|
SCREENGATE EQU 0x00 |
KEYBDGATE EQU 0x01 |
VIDEOGATE EQU 0x02 |
CARDGATE EQU 0x03 |
warmStart EQU 0x1020 |
usrJmp EQU 0x1028 |
TickIRQAddr EQU 0x1030 |
TaskBlock EQU 0x1038 |
tencount EQU 0x13F8 |
Milliseconds EQU 0x1400 |
Lastloc EQU 0x1408 |
CharColor EQU 0x1410 |
ScreenColor EQU 0x1414 |
CursorRow EQU 0x1416 |
CursorRow EQU 0x1417 |
CursorCol EQU 0x1418 |
CursorFlash EQU 0x141A |
KeybdEcho EQU 0x141C |
105,6 → 118,11
KeybdBuffer EQU 0x1440 |
KeybdHead EQU 0x1450 |
KeybdTail EQU 0x1451 |
sp_save EQU 0x1460 |
lr_save EQU 0x1468 |
r1_save EQU 0x1470 |
r2_save EQU 0x1478 |
r26_save EQU 0x1480 |
Score EQU 0x1500 |
Manpos EQU 0x1508 |
MissileActive EQU 0x1510 |
148,11 → 166,34
r2save EQU 0x20B8 |
AXCstart EQU 0x20C0 |
|
; Context startup address table |
; |
ctx0start EQU 0x20D0 |
ctx1start EQU 0x20D8 |
ctx2start EQU 0x20E0 |
ctx3start EQU 0x20E8 |
ctx4start EQU 0x20F0 |
ctx5start EQU 0x20F8 |
ctx6start EQU 0x2100 |
ctx7start EQU 0x2108 |
ctx8start EQU 0x2110 |
ctx9start EQU 0x2118 |
ctx10start EQU 0x2120 |
ctx11start EQU 0x2128 |
ctx12start EQU 0x2130 |
ctx13start EQU 0x2138 |
ctx14start EQU 0x2140 |
ctx15start EQU 0x2148 |
sp_saves EQU 0x2200 |
sp_saves_end EQU 0x2280 |
p100IRQvec EQU 0x3000 |
keybdIRQvec EQU 0x3008 |
serialIRQvec EQU 0x3010 |
rasterIRQvec EQU 0x3018 |
|
startSector EQU 0x30F8 |
BPB EQU 0x3100 |
|
TEXTSCR EQU 0xD0_0000 |
COLORSCR EQU 0xD1_0000 |
TEXTREG EQU 0xDA_0000 |
169,6 → 210,34
UART_IE EQU 0xDC_0A04 |
UART_MC EQU 0xDC_0A06 |
DATETIME EQU 0xDC_0400 |
|
SPIMASTER EQU 0xDC_0500 |
SPI_MASTER_VERSION_REG EQU 0x00 |
SPI_MASTER_CONTROL_REG EQU 0x01 |
SPI_TRANS_TYPE_REG EQU 0x02 |
SPI_TRANS_CTRL_REG EQU 0x03 |
SPI_TRANS_STATUS_REG EQU 0x04 |
SPI_TRANS_ERROR_REG EQU 0x05 |
SPI_DIRECT_ACCESS_DATA_REG EQU 0x06 |
SPI_SD_ADDR_7_0_REG EQU 0x07 |
SPI_SD_ADDR_15_8_REG EQU 0x08 |
SPI_SD_ADDR_23_16_REG EQU 0x09 |
SPI_SD_ADDR_31_24_REG EQU 0x0a |
SPI_RX_FIFO_DATA_REG EQU 0x10 |
SPI_RX_FIFO_DATA_COUNT_MSB EQU 0x12 |
SPI_RX_FIFO_DATA_COUNT_LSB EQU 0x13 |
SPI_RX_FIFO_CTRL_REG EQU 0x14 |
SPI_TX_FIFO_DATA_REG EQU 0x20 |
SPI_TX_FIFO_CTRL_REG EQU 0x24 |
SPI_INIT_SD EQU 0x01 |
SPI_TRANS_START EQU 0x01 |
SPI_TRANS_BUSY EQU 0x01 |
SPI_INIT_NO_ERROR EQU 0x00 |
SPI_READ_NO_ERROR EQU 0x00 |
RW_READ_SD_BLOCK EQU 0x02 |
RW_WRITE_SD_BLOCK EQU 0x03 |
|
|
PIC EQU 0xDC_0FF0 |
PIC_IE EQU 0xDC_0FF2 |
|
180,7 → 249,12
|
SPRRAM EQU 0xD8_0000 |
AC97 EQU 0xDC_1000 |
TMP EQU 0xDC_0300 |
LED EQU 0xDC_0600 |
ETHMAC EQU 0xDC_2000 |
CONFIGREC EQU 0xDC_FFFF |
MIIMODER EQU 0x28 |
MIIADDRESS EQU 0x30 |
GACCEL EQU 0xDA_E000 |
RASTERIRQ EQU 0xDA_0100 |
BOOT_STACK EQU 0xFFFF_FFFF_FFFE_FFF8 |
187,6 → 261,8
SPRITEREGS EQU 0xDA_D000 |
BITMAPSCR EQU 0x00000001_00200000 |
|
BOOTJMP EQU 0x100800204 |
|
txempty EQU 0x40 |
rxfull EQU 0x01 |
|
194,17 → 270,15
; Internal variables follow: |
; |
0000000100600000 bss |
0000000000001038 org 0x1038 |
0000000000001048 org 0x1048 |
0000000000000000 pos dh 0 ; text screen position |
0000000000001040 org 0x1040 |
|
1040 0000000000000000 lineLinkTbl fill.b 25,0 ; screen line link table |
1048 0000000000000000 |
1050 0000000000000000 |
1050 0000000000000000 lineLinkTbl fill.b 47,0 ; screen line link table |
1058 0000000000000000 |
0000000000001068 align 8 |
|
0000000000001080 org 0x1080 |
1060 0000000000000000 |
1068 0000000000000000 |
1070 0000000000000000 |
1078 0000000000000000 |
0000000000001088 align 8 |
0000000000001088 0000000000000001 OSSP dw 1 ; OS value of sp |
0000000000001090 0000000000000001 CURRNT dw 1 ; Current line pointer |
254,33 → 328,63
|
; jump table |
; |
FFFFFFFFFFFFB000 33FFED54 jmp SerialGetChar |
FFFFFFFFFFFFB004 33FFED0C jmp SerialPutChar |
FFFFFFFFFFFFB008 33FFEE06 jmp SetKeyboardEcho |
FFFFFFFFFFFFB00C 33FFEE1D jmp KeybdCheckForKey |
FFFFFFFFFFFFB010 33FFEE08 jmp KeybdGetChar |
FFFFFFFFFFFFB014 33FFEF47 jmp DisplayChar |
FFFFFFFFFFFFB018 33FFEFE7 jmp DisplayString |
FFFFFFFFFFFFB000 33FFEDA4 jmp SerialGetChar |
FFFFFFFFFFFFB004 33FFED5C jmp SerialPutChar |
FFFFFFFFFFFFB008 33FFEF05 jmp SetKeyboardEcho |
FFFFFFFFFFFFB00C 33FFEF1C jmp KeybdCheckForKey |
FFFFFFFFFFFFB010 33FFEF07 jmp KeybdGetChar |
FFFFFFFFFFFFB014 33FFF07F jmp DisplayChar |
FFFFFFFFFFFFB018 33FFF122 jmp DisplayString |
FFFFFFFFFFFFB01C 33FFF13F jmp DisplayNum |
FFFFFFFFFFFFB020 33FFF06F jmp CalcScreenLoc |
FFFFFFFFFFFFB024 33FFF011 jmp ClearScreen |
FFFFFFFFFFFFB028 33FFF169 jmp DisplayWord |
|
FFFFFFFFFFFFB01C start: |
FFFFFFFFFFFFB02C start: |
; lea MSGRAM,a1 |
; jsr DisplayString |
|
FFFFFFFFFFFFB01C ColdStart: |
FFFFFFFFFFFFB01C 0000000A icache_on ; turn on the ICache |
FFFFFFFFFFFFB020 0000000D dcache_off ; turn on the DCache |
FFFFFFFFFFFFB02C ColdStart: |
FFFFFFFFFFFFB02C 0000000B icache_off ; turn on the ICache |
FFFFFFFFFFFFB030 0000000D dcache_off ; turn on the DCache |
|
; Make sure semaphores are available by closing the gates. |
; We don't know what power up state is. |
|
FFFFFFFFFFFFB034 02000075 cmgi #KEYBDGATE |
FFFFFFFFFFFFB038 020000B5 cmgi #VIDEOGATE |
|
; Initialize the context startup address table with NULL |
|
FFFFFFFFFFFFB03C 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFB040 6600A0D0 sw r1,ctx0start |
FFFFFFFFFFFFB044 6600A0D8 sw r1,ctx1start |
FFFFFFFFFFFFB048 6600A0E0 sw r1,ctx2start |
FFFFFFFFFFFFB04C 6600A0E8 sw r1,ctx3start |
FFFFFFFFFFFFB050 6600A0F0 sw r1,ctx4start |
FFFFFFFFFFFFB054 6600A0F8 sw r1,ctx5start |
FFFFFFFFFFFFB058 6600A100 sw r1,ctx6start |
FFFFFFFFFFFFB05C 6600A108 sw r1,ctx7start |
FFFFFFFFFFFFB060 6600A110 sw r1,ctx8start |
FFFFFFFFFFFFB064 6600A118 sw r1,ctx9start |
FFFFFFFFFFFFB068 6600A120 sw r1,ctx10start |
FFFFFFFFFFFFB06C 6600A128 sw r1,ctx11start |
FFFFFFFFFFFFB070 6600A130 sw r1,ctx12start |
FFFFFFFFFFFFB074 6600A138 sw r1,ctx13start |
FFFFFFFFFFFFB078 6600A140 sw r1,ctx14start |
FFFFFFFFFFFFB07C 6600A148 sw r1,ctx15start |
|
; Initialize the context schedule with all contexts treated equally |
; There are only 16 contexts, but 256 schedule slots. Each context is |
; given 16 slots distributed evenly throughout the execution pattern |
; table. |
; |
FFFFFFFFFFFFB024 0410840A xor r1,r1,r1 ; r1 = 0 |
FFFFFFFFFFFFB028 ict1: |
FFFFFFFFFFFFB028 0410803A mtep r1,r1 ; only the low order four bits of r1 will move to the pattern table |
FFFFFFFFFFFFB02C 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFB030 101100FF cmpi r2,r1,#255 |
FFFFFFFFFFFFB034 BE207FA9 bne r2,r0,ict1 |
FFFFFFFFFFFFB080 0410840A xor r1,r1,r1 ; r1 = 0 |
FFFFFFFFFFFFB084 ict1: |
FFFFFFFFFFFFB084 0410803A mtep r1,r1 ; only the low order four bits of r1 will move to the pattern table |
FFFFFFFFFFFFB088 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFB08C 101100FF cmpi r2,r1,#255 |
FFFFFFFFFFFFB090 BE207FA9 bne r2,r0,ict1 |
|
; Point the interrupt return address register of the context to the |
; context startup code. The context will start up when an interrupt return |
288,133 → 392,115
; |
; We cannot use a loop for this. Fortunately there's only 16 contexts. |
; |
FFFFFFFFFFFFB038 E6BFB214 ; SETLO |
FFFFFFFFFFFFB03C 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB040 E6BEFFF8 ; SETLO |
FFFFFFFFFFFFB044 6A0D782D lea r30,STACKTOP0 |
FFFFFFFFFFFFB048 0000000F iepp |
FFFFFFFFFFFFB04C DE000000 nop |
FFFFFFFFFFFFB050 DE000000 nop |
FFFFFFFFFFFFB054 E6BFB214 ; SETLO |
FFFFFFFFFFFFB058 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB05C E6BEFBF8 ; SETLO |
FFFFFFFFFFFFB060 6A0D782D lea r30,STACKTOP1 |
FFFFFFFFFFFFB064 0000000F iepp |
FFFFFFFFFFFFB068 DE000000 nop |
FFFFFFFFFFFFB06C DE000000 nop |
FFFFFFFFFFFFB070 E6BFB214 ; SETLO |
FFFFFFFFFFFFB074 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB078 E6BEF7F8 ; SETLO |
FFFFFFFFFFFFB07C 6A0D782D lea r30,STACKTOP2 |
FFFFFFFFFFFFB080 0000000F iepp |
FFFFFFFFFFFFB084 DE000000 nop |
FFFFFFFFFFFFB088 DE000000 nop |
FFFFFFFFFFFFB08C E6BFB214 ; SETLO |
FFFFFFFFFFFFB090 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB094 E6BEF3F8 ; SETLO |
FFFFFFFFFFFFB098 6A0D782D lea r30,STACKTOP3 |
FFFFFFFFFFFFB09C 0000000F iepp |
FFFFFFFFFFFFB0A0 DE000000 nop |
FFFFFFFFFFFFB0A4 DE000000 nop |
|
FFFFFFFFFFFFB0A8 E6BFB214 ; SETLO |
FFFFFFFFFFFFB0AC 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB0B0 E6BEEFF8 ; SETLO |
FFFFFFFFFFFFB0B4 6A0D782D lea r30,STACKTOP4 |
FFFFFFFFFFFFB0B8 0000000F iepp |
FFFFFFFFFFFFB0BC DE000000 nop |
FFFFFFFFFFFFB0C0 DE000000 nop |
FFFFFFFFFFFFB0C4 E6BFB214 ; SETLO |
FFFFFFFFFFFFB094 E6BFB228 ; SETLO |
FFFFFFFFFFFFB098 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB09C 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB0A0 E6BEFFF8 ; SETLO |
FFFFFFFFFFFFB0A4 6A0D782D lea r30,STACKTOP0 |
FFFFFFFFFFFFB0A8 0000000F iepp |
FFFFFFFFFFFFB0AC E6BFB228 ; SETLO |
FFFFFFFFFFFFB0B0 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB0B4 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB0B8 E6BEFBF8 ; SETLO |
FFFFFFFFFFFFB0BC 6A0D782D lea r30,STACKTOP1 |
FFFFFFFFFFFFB0C0 0000000F iepp |
FFFFFFFFFFFFB0C4 E6BFB228 ; SETLO |
FFFFFFFFFFFFB0C8 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB0CC E6BEEBF8 ; SETLO |
FFFFFFFFFFFFB0D0 6A0D782D lea r30,STACKTOP5 |
FFFFFFFFFFFFB0D4 0000000F iepp |
FFFFFFFFFFFFB0D8 DE000000 nop |
FFFFFFFFFFFFB0DC DE000000 nop |
FFFFFFFFFFFFB0E0 E6BFB214 ; SETLO |
FFFFFFFFFFFFB0E4 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB0E8 E6BEE7F8 ; SETLO |
FFFFFFFFFFFFB0EC 6A0D782D lea r30,STACKTOP6 |
FFFFFFFFFFFFB0CC 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB0D0 E6BEF7F8 ; SETLO |
FFFFFFFFFFFFB0D4 6A0D782D lea r30,STACKTOP2 |
FFFFFFFFFFFFB0D8 0000000F iepp |
FFFFFFFFFFFFB0DC E6BFB228 ; SETLO |
FFFFFFFFFFFFB0E0 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB0E4 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB0E8 E6BEF3F8 ; SETLO |
FFFFFFFFFFFFB0EC 6A0D782D lea r30,STACKTOP3 |
FFFFFFFFFFFFB0F0 0000000F iepp |
FFFFFFFFFFFFB0F4 DE000000 nop |
FFFFFFFFFFFFB0F8 DE000000 nop |
FFFFFFFFFFFFB0FC E6BFB214 ; SETLO |
FFFFFFFFFFFFB100 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB104 E6BEE3F8 ; SETLO |
FFFFFFFFFFFFB108 6A0D782D lea r30,STACKTOP7 |
FFFFFFFFFFFFB10C 0000000F iepp |
FFFFFFFFFFFFB110 DE000000 nop |
FFFFFFFFFFFFB114 DE000000 nop |
|
FFFFFFFFFFFFB0F4 E6BFB228 ; SETLO |
FFFFFFFFFFFFB0F8 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB0FC 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB100 E6BEEFF8 ; SETLO |
FFFFFFFFFFFFB104 6A0D782D lea r30,STACKTOP4 |
FFFFFFFFFFFFB108 0000000F iepp |
FFFFFFFFFFFFB10C E6BFB228 ; SETLO |
FFFFFFFFFFFFB110 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB114 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB118 E6BEEBF8 ; SETLO |
FFFFFFFFFFFFB11C 6A0D782D lea r30,STACKTOP5 |
FFFFFFFFFFFFB120 0000000F iepp |
FFFFFFFFFFFFB124 E6BFB228 ; SETLO |
FFFFFFFFFFFFB128 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB12C 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB130 E6BEE7F8 ; SETLO |
FFFFFFFFFFFFB134 6A0D782D lea r30,STACKTOP6 |
FFFFFFFFFFFFB138 0000000F iepp |
FFFFFFFFFFFFB13C E6BFB228 ; SETLO |
FFFFFFFFFFFFB140 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB144 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB148 E6BEE3F8 ; SETLO |
FFFFFFFFFFFFB14C 6A0D782D lea r30,STACKTOP7 |
FFFFFFFFFFFFB150 0000000F iepp |
|
FFFFFFFFFFFFB118 E6BFB214 ; SETLO |
FFFFFFFFFFFFB11C 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB120 E6BEDFF8 ; SETLO |
FFFFFFFFFFFFB124 6A0D782D lea r30,STACKTOP8 |
FFFFFFFFFFFFB128 0000000F iepp |
FFFFFFFFFFFFB12C DE000000 nop |
FFFFFFFFFFFFB130 DE000000 nop |
FFFFFFFFFFFFB134 E6BFB214 ; SETLO |
FFFFFFFFFFFFB138 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB13C E6BEDBF8 ; SETLO |
FFFFFFFFFFFFB140 6A0D782D lea r30,STACKTOP9 |
FFFFFFFFFFFFB144 0000000F iepp |
FFFFFFFFFFFFB148 DE000000 nop |
FFFFFFFFFFFFB14C DE000000 nop |
FFFFFFFFFFFFB150 E6BFB214 ; SETLO |
FFFFFFFFFFFFB154 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB158 E6BED7F8 ; SETLO |
FFFFFFFFFFFFB15C 6A0D782D lea r30,STACKTOP10 |
FFFFFFFFFFFFB160 0000000F iepp |
FFFFFFFFFFFFB164 DE000000 nop |
FFFFFFFFFFFFB168 DE000000 nop |
FFFFFFFFFFFFB16C E6BFB214 ; SETLO |
FFFFFFFFFFFFB154 E6BFB228 ; SETLO |
FFFFFFFFFFFFB158 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB15C 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB160 E6BEDFF8 ; SETLO |
FFFFFFFFFFFFB164 6A0D782D lea r30,STACKTOP8 |
FFFFFFFFFFFFB168 0000000F iepp |
FFFFFFFFFFFFB16C E6BFB228 ; SETLO |
FFFFFFFFFFFFB170 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB174 E6BED3F8 ; SETLO |
FFFFFFFFFFFFB178 6A0D782D lea r30,STACKTOP11 |
FFFFFFFFFFFFB17C 0000000F iepp |
FFFFFFFFFFFFB180 DE000000 nop |
FFFFFFFFFFFFB184 DE000000 nop |
FFFFFFFFFFFFB174 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB178 E6BEDBF8 ; SETLO |
FFFFFFFFFFFFB17C 6A0D782D lea r30,STACKTOP9 |
FFFFFFFFFFFFB180 0000000F iepp |
FFFFFFFFFFFFB184 E6BFB228 ; SETLO |
FFFFFFFFFFFFB188 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB18C 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB190 E6BED7F8 ; SETLO |
FFFFFFFFFFFFB194 6A0D782D lea r30,STACKTOP10 |
FFFFFFFFFFFFB198 0000000F iepp |
FFFFFFFFFFFFB19C E6BFB228 ; SETLO |
FFFFFFFFFFFFB1A0 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1A4 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB1A8 E6BED3F8 ; SETLO |
FFFFFFFFFFFFB1AC 6A0D782D lea r30,STACKTOP11 |
FFFFFFFFFFFFB1B0 0000000F iepp |
|
FFFFFFFFFFFFB188 E6BFB214 ; SETLO |
FFFFFFFFFFFFB18C 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB190 E6BECFF8 ; SETLO |
FFFFFFFFFFFFB194 6A0D782D lea r30,STACKTOP12 |
FFFFFFFFFFFFB198 0000000F iepp |
FFFFFFFFFFFFB19C DE000000 nop |
FFFFFFFFFFFFB1A0 DE000000 nop |
FFFFFFFFFFFFB1A4 E6BFB214 ; SETLO |
FFFFFFFFFFFFB1A8 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1AC E6BECBF8 ; SETLO |
FFFFFFFFFFFFB1B0 6A0D782D lea r30,STACKTOP13 |
FFFFFFFFFFFFB1B4 0000000F iepp |
FFFFFFFFFFFFB1B8 DE000000 nop |
FFFFFFFFFFFFB1BC DE000000 nop |
FFFFFFFFFFFFB1C0 E6BFB214 ; SETLO |
FFFFFFFFFFFFB1C4 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1C8 E6BEC7F8 ; SETLO |
FFFFFFFFFFFFB1CC 6A0D782D lea r30,STACKTOP14 |
FFFFFFFFFFFFB1D0 0000000F iepp |
FFFFFFFFFFFFB1D4 DE000000 nop |
FFFFFFFFFFFFB1D8 DE000000 nop |
FFFFFFFFFFFFB1DC E6BFB214 ; SETLO |
FFFFFFFFFFFFB1E0 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1E4 E6BEC3F8 ; SETLO |
FFFFFFFFFFFFB1E8 6A0D782D lea r30,STACKTOP15 |
FFFFFFFFFFFFB1EC 0000000F iepp |
FFFFFFFFFFFFB1F0 DE000000 nop |
FFFFFFFFFFFFB1F4 DE000000 nop |
FFFFFFFFFFFFB1B4 E6BFB228 ; SETLO |
FFFFFFFFFFFFB1B8 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1BC 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB1C0 E6BECFF8 ; SETLO |
FFFFFFFFFFFFB1C4 6A0D782D lea r30,STACKTOP12 |
FFFFFFFFFFFFB1C8 0000000F iepp |
FFFFFFFFFFFFB1CC E6BFB228 ; SETLO |
FFFFFFFFFFFFB1D0 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1D4 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB1D8 E6BECBF8 ; SETLO |
FFFFFFFFFFFFB1DC 6A0D782D lea r30,STACKTOP13 |
FFFFFFFFFFFFB1E0 0000000F iepp |
FFFFFFFFFFFFB1E4 E6BFB228 ; SETLO |
FFFFFFFFFFFFB1E8 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB1EC 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB1F0 E6BEC7F8 ; SETLO |
FFFFFFFFFFFFB1F4 6A0D782D lea r30,STACKTOP14 |
FFFFFFFFFFFFB1F8 0000000F iepp |
FFFFFFFFFFFFB1FC E6BFB228 ; SETLO |
FFFFFFFFFFFFB200 6A0D642D lea r25,ctxstart |
FFFFFFFFFFFFB204 03900869 mtspr IPC,r25 |
FFFFFFFFFFFFB208 E6BEC3F8 ; SETLO |
FFFFFFFFFFFFB20C 6A0D782D lea r30,STACKTOP15 |
FFFFFFFFFFFFB210 0000000F iepp |
|
; Ensure that context zero is the active context |
; |
FFFFFFFFFFFFB1F8 ctxstart3: |
FFFFFFFFFFFFB1F8 02008568 mfspr r1,AXC |
FFFFFFFFFFFFB1FC BE1000A8 beq r1,r0,ctxstart2 |
FFFFFFFFFFFFB200 0000000F iepp |
FFFFFFFFFFFFB204 DE000000 nop |
FFFFFFFFFFFFB208 DE000000 nop |
FFFFFFFFFFFFB20C BE007F6A bra ctxstart3 |
FFFFFFFFFFFFB210 ctxstart2: |
FFFFFFFFFFFFB210 6000A0C0 sb r1,AXCstart ; save off the startup context which should be context zero |
FFFFFFFFFFFFB214 ctxstart3: |
FFFFFFFFFFFFB214 02008568 mfspr r1,AXC |
FFFFFFFFFFFFB218 BE100068 beq r1,r0,ctxstart2 |
FFFFFFFFFFFFB21C 0000000F iepp |
FFFFFFFFFFFFB220 BE007FAA bra ctxstart3 |
FFFFFFFFFFFFB224 ctxstart2: |
FFFFFFFFFFFFB224 6000A0C0 sb r1,AXCstart ; save off the startup context which should be context zero |
|
; Entry point for context startup |
; |
421,153 → 507,274
; Avoid repeating all the system initialization when a context starts up by testing whether |
; or not the context is the starting context. |
; |
FFFFFFFFFFFFB214 ctxstart: |
FFFFFFFFFFFFB214 02008568 mfspr r1,AXC |
FFFFFFFFFFFFB218 4A0120C0 lbu r2,AXCstart |
FFFFFFFFFFFFB21C BE1107E9 bne r1,r2,ctxstart1 |
FFFFFFFFFFFFB228 ctxstart: |
FFFFFFFFFFFFB228 02008568 mfspr r1,AXC |
FFFFFFFFFFFFB22C 4A0120C0 lbu r2,AXCstart |
FFFFFFFFFFFFB230 BE110E69 bne r1,r2,ctxstart1 |
|
; |
; set system vectors |
; TBA defaults to zero on reset |
; |
FFFFFFFFFFFFB220 E0C00000 setlo r3,#0 |
FFFFFFFFFFFFB224 E08001FF setlo r2,#511 |
FFFFFFFFFFFFB228 9A00EA20 lea r1,nmirout |
FFFFFFFFFFFFB22C csj5: |
FFFFFFFFFFFFB22C 66308000 sw r1,[r3] |
FFFFFFFFFFFFB230 0A318008 addui r3,r3,#8 |
FFFFFFFFFFFFB234 BE017FCF loop r2,csj5 |
FFFFFFFFFFFFB238 E6BFB768 ; SETLO |
FFFFFFFFFFFFB23C 6A0D042D lea r1,KeybdSC ; keyboard BIOS vector |
FFFFFFFFFFFFB240 66008D08 sw r1,0xD08 |
FFFFFFFFFFFFB244 9A00E950 lea r1,irqrout |
FFFFFFFFFFFFB248 66008E08 sw r1,0xE08 ; set IRQ vector |
FFFFFFFFFFFFB24C 9A00E8BC lea r1,dberr_rout |
FFFFFFFFFFFFB250 66008FE0 sw r1,0xFE0 ; set Bus error vector |
FFFFFFFFFFFFB254 9A00E8A4 lea r1,iberr_rout |
FFFFFFFFFFFFB258 66008FE8 sw r1,0xFE8 ; set Bus error vector |
FFFFFFFFFFFFB25C 9A00EA20 lea r1,nmirout |
FFFFFFFFFFFFB260 66008FF0 sw r1,0xFF0 ; set NMI vector |
|
FFFFFFFFFFFFB264 E6BFB7C4 ; SETLO |
FFFFFFFFFFFFB268 6A0D042D lea r1,KeybdIRQ |
FFFFFFFFFFFFB26C 6600B008 sw r1,keybdIRQvec |
FFFFFFFFFFFFB270 E6BFB8EC ; SETLO |
FFFFFFFFFFFFB274 6A0D042D lea r1,Pulse100 |
FFFFFFFFFFFFB278 6600B000 sw r1,p100IRQvec |
FFFFFFFFFFFFB27C E6BFB628 ; SETLO |
FFFFFFFFFFFFB280 6A0D042D lea r1,SerialIRQ |
FFFFFFFFFFFFB284 6600B010 sw r1,serialIRQvec |
FFFFFFFFFFFFB288 9A00CAC4 lea r1,RasterIRQfn |
FFFFFFFFFFFFB28C 6600B018 sw r1,rasterIRQvec |
FFFFFFFFFFFFB234 E0C00000 setlo r3,#0 |
FFFFFFFFFFFFB238 E08001FF setlo r2,#511 |
FFFFFFFFFFFFB23C 9A00FB38 lea r1,nmirout |
FFFFFFFFFFFFB240 csj5: |
FFFFFFFFFFFFB240 66308000 sw r1,[r3] |
FFFFFFFFFFFFB244 0A318008 addui r3,r3,#8 |
FFFFFFFFFFFFB248 BE017FCF loop r2,csj5 |
FFFFFFFFFFFFB24C E6BFB8A8 ; SETLO |
FFFFFFFFFFFFB250 6A0D042D lea r1,VideoSC ; Video BIOS vector |
FFFFFFFFFFFFB254 66008CD0 sw r1,0xCD0 |
FFFFFFFFFFFFB258 9A008000 lea r1,SCCARDSC ; SD Card BIOS vector |
FFFFFFFFFFFFB25C 66008CE8 sw r1,0xCE8 |
FFFFFFFFFFFFB260 E6BFBAA8 ; SETLO |
FFFFFFFFFFFFB264 6A0D042D lea r1,RTCSC ; Real time clock vector |
FFFFFFFFFFFFB268 66008D00 sw r1,0xD00 |
FFFFFFFFFFFFB26C E6BFBB14 ; SETLO |
FFFFFFFFFFFFB270 6A0D042D lea r1,KeybdSC ; keyboard BIOS vector |
FFFFFFFFFFFFB274 66008D08 sw r1,0xD08 |
FFFFFFFFFFFFB278 9A00FA5C lea r1,irqrout |
FFFFFFFFFFFFB27C 66008E08 sw r1,0xE08 ; set IRQ vector |
FFFFFFFFFFFFB280 9A00FB94 lea r1,ui_irout |
FFFFFFFFFFFFB284 66008F78 sw r1,0xF78 ; set unimplemented instruction vector |
FFFFFFFFFFFFB288 9A00F9BC lea r1,dberr_rout |
FFFFFFFFFFFFB28C 66008FE0 sw r1,0xFE0 ; set Bus error vector |
FFFFFFFFFFFFB290 9A00F9A4 lea r1,iberr_rout |
FFFFFFFFFFFFB294 66008FE8 sw r1,0xFE8 ; set Bus error vector |
FFFFFFFFFFFFB298 9A00FB38 lea r1,nmirout |
FFFFFFFFFFFFB29C 66008FF0 sw r1,0xFF0 ; set NMI vector |
|
; set system interrupt hook vectors |
|
FFFFFFFFFFFFB2A0 E6BFBBC0 ; SETLO |
FFFFFFFFFFFFB2A4 6A0D042D lea r1,KeybdIRQ |
FFFFFFFFFFFFB2A8 6600B008 sw r1,keybdIRQvec |
FFFFFFFFFFFFB2AC E6BFBDCC ; SETLO |
FFFFFFFFFFFFB2B0 6A0D042D lea r1,Pulse100 |
FFFFFFFFFFFFB2B4 6600B000 sw r1,p100IRQvec |
FFFFFFFFFFFFB2B8 E6BFB768 ; SETLO |
FFFFFFFFFFFFB2BC 6A0D042D lea r1,SerialIRQ |
FFFFFFFFFFFFB2C0 6600B010 sw r1,serialIRQvec |
FFFFFFFFFFFFB2C4 9A00D1AC lea r1,RasterIRQfn |
FFFFFFFFFFFFB2C8 6600B018 sw r1,rasterIRQvec |
|
;------------------------------- |
; Initialize I/O devices |
;------------------------------- |
FFFFFFFFFFFFB290 31FFECEC call SerialInit |
FFFFFFFFFFFFB294 31FFEDEC call KeybdInit |
FFFFFFFFFFFFB298 31FFECE4 call PICInit |
FFFFFFFFFFFFB29C 31FFF299 call SetupRasterIRQ |
FFFFFFFFFFFFB2A0 00000040 cli ; enable interrupts |
FFFFFFFFFFFFB2CC E69CFFFF ; SETLO |
FFFFFFFFFFFFB2D0 EE800003 ; SETMID |
FFFFFFFFFFFFB2D4 6A0D0424 inbu r1,CONFIGREC |
FFFFFFFFFFFFB2D8 2A108824 bfext r1,r1,#4,#4 |
FFFFFFFFFFFFB2DC BE100048 beq r1,r0,skip5 |
FFFFFFFFFFFFB2E0 31FFEF3A call tmp_init |
FFFFFFFFFFFFB2E4 skip5: |
FFFFFFFFFFFFB2E4 E69CFFFF ; SETLO |
FFFFFFFFFFFFB2E8 EE800003 ; SETMID |
FFFFFFFFFFFFB2EC 6A0D0424 inbu r1,CONFIGREC |
FFFFFFFFFFFFB2F0 2A108A2C bfext r1,r1,#5,#5 |
FFFFFFFFFFFFB2F4 BE100048 beq r1,r0,skip4 |
FFFFFFFFFFFFB2F8 31FFED3C call SerialInit |
FFFFFFFFFFFFB2FC skip4: |
FFFFFFFFFFFFB2FC 31FFEEEB call KeybdInit |
FFFFFFFFFFFFB300 31FFED34 call PICInit |
FFFFFFFFFFFFB304 31FFF453 call SetupRasterIRQ |
FFFFFFFFFFFFB308 00000040 cli ; enable interrupts |
; call HelloWorld |
FFFFFFFFFFFFB2A4 E0C000CE setlo r3,#0xCE ; blue on blue |
FFFFFFFFFFFFB2A8 62019414 sc r3,ScreenColor |
FFFFFFFFFFFFB2AC 42019414 lc r3,0x1414 |
FFFFFFFFFFFFB2B0 E0C00020 setlo r3,#32 |
FFFFFFFFFFFFB2B4 62019416 sc r3,0x1416 ; we do a store, then a load through the dcache |
FFFFFFFFFFFFB2B8 42011416 lc r2,0x1416 ; |
FFFFFFFFFFFFB2BC BE218048 beq r2,r3,dcokay |
FFFFFFFFFFFFB2C0 0000000D dcache_off ; data cache failed |
FFFFFFFFFFFFB2C4 dcokay: |
FFFFFFFFFFFFB2C4 620020A8 sc r0,NextToRunTCB |
FFFFFFFFFFFFB2C8 620020A6 sc r0,RunningTCB |
FFFFFFFFFFFFB2CC 31FFEED9 call ClearScreen |
FFFFFFFFFFFFB2D0 31FFEEC4 call ClearBmpScreen |
FFFFFFFFFFFFB2D4 31FFF1ED call RandomizeSprram |
FFFFFFFFFFFFB2D8 62001416 sc r0,CursorRow |
FFFFFFFFFFFFB2DC 62001418 sc r0,CursorCol |
FFFFFFFFFFFFB2E0 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB2E4 6000941A sb r1,CursorFlash |
FFFFFFFFFFFFB2E8 E6BFB36D ; SETLO |
FFFFFFFFFFFFB2EC 6A0D042D lea r1,MSGSTART |
FFFFFFFFFFFFB2F0 31FFEFF5 call DisplayStringCRLF |
FFFFFFFFFFFFB2F4 33FFF096 jmp Monitor |
FFFFFFFFFFFFB2F8 31FFF1F7 call SetupAC97 ; and Beep |
FFFFFFFFFFFFB2FC E0C00004 setlo r3,#4 |
FFFFFFFFFFFFB300 E69C0600 ; SETLO |
FFFFFFFFFFFFB304 EE800003 ; SETMID |
FFFFFFFFFFFFB308 6A0D0C28 outb r3,LED |
FFFFFFFFFFFFB30C 31FFF221 call Beep |
FFFFFFFFFFFFB30C E0C000CE setlo r3,#0xCE ; blue on blue |
FFFFFFFFFFFFB310 62019414 sc r3,ScreenColor |
FFFFFFFFFFFFB314 62019410 sc r3,CharColor |
FFFFFFFFFFFFB318 42019414 lc r3,0x1414 |
FFFFFFFFFFFFB31C E0C00020 setlo r3,#32 |
FFFFFFFFFFFFB320 62019416 sc r3,0x1416 ; we do a store, then a load through the dcache |
FFFFFFFFFFFFB324 42011416 lc r2,0x1416 ; |
FFFFFFFFFFFFB328 BE218048 beq r2,r3,dcokay |
FFFFFFFFFFFFB32C 0000000D dcache_off ; data cache failed |
FFFFFFFFFFFFB330 dcokay: |
FFFFFFFFFFFFB330 620020A8 sc r0,NextToRunTCB |
FFFFFFFFFFFFB334 620020A6 sc r0,RunningTCB |
FFFFFFFFFFFFB338 16008002 lw r1,#2 ; get rid of startup keyboard glitchs by trying to get a character |
FFFFFFFFFFFFB33C 0181D097 syscall #417 |
FFFFFFFFFFFFB340 16008002 lw r1,#2 ; get rid of startup keyboard glitchs by trying to get a character |
FFFFFFFFFFFFB344 0181D097 syscall #417 |
|
FFFFFFFFFFFFB310 j4: |
FFFFFFFFFFFFB310 33FFF096 jmp Monitor |
FFFFFFFFFFFFB314 BE007FEA bra j4 |
; wait for screen to be available |
FFFFFFFFFFFFB348 31FFF011 call ClearScreen |
FFFFFFFFFFFFB34C 31FFEFFC call ClearBmpScreen |
|
; for now hang the contexts |
; Test whether or not the sprite controller is present. Skip |
; Initialization if it isn't. |
|
FFFFFFFFFFFFB350 E69CFFFF ; SETLO |
FFFFFFFFFFFFB354 EE800003 ; SETMID |
FFFFFFFFFFFFB358 6A0D0420 inb r1,CONFIGREC |
FFFFFFFFFFFFB35C 2A108004 bfext r1,r1,#0,#0 |
FFFFFFFFFFFFB360 BE100048 beq r1,r0,skip1 |
FFFFFFFFFFFFB364 31FFF3A7 call RandomizeSprram |
FFFFFFFFFFFFB368 skip1: |
|
FFFFFFFFFFFFB368 60001417 sb r0,CursorRow |
FFFFFFFFFFFFB36C 60001418 sb r0,CursorCol |
FFFFFFFFFFFFB370 16008001 lw r1,#1 |
FFFFFFFFFFFFB374 6000941A sb r1,CursorFlash |
FFFFFFFFFFFFB378 E6BFB4AD ; SETLO |
FFFFFFFFFFFFB37C 6A0D042D lea r1,MSGSTART |
FFFFFFFFFFFFB380 31FFF130 call DisplayStringCRLF |
|
; Test whether or not sound generator is present |
; skip initialization and beep if not present |
|
FFFFFFFFFFFFB384 E69CFFFF ; SETLO |
FFFFFFFFFFFFB388 EE800003 ; SETMID |
FFFFFFFFFFFFB38C 6A0D0420 inb r1,CONFIGREC |
FFFFFFFFFFFFB390 2A108414 bfext r1,r1,#2,#2 |
FFFFFFFFFFFFB394 BE1000E8 beq r1,r0,skip2 |
FFFFFFFFFFFFB398 31FFF3B1 call SetupAC97 ; and Beep |
FFFFFFFFFFFFB39C 16008004 lw r1,#4 |
FFFFFFFFFFFFB3A0 E69C0600 ; SETLO |
FFFFFFFFFFFFB3A4 EE800003 ; SETMID |
FFFFFFFFFFFFB3A8 6A0D0428 outb r1,LED |
FFFFFFFFFFFFB3AC 31FFF3DB call Beep |
FFFFFFFFFFFFB3B0 skip2: |
|
FFFFFFFFFFFFB3B0 E6BFB428 ; SETLO |
FFFFFFFFFFFFB3B4 6A0D042D lea r1,context1disp ; start a display |
FFFFFFFFFFFFB3B8 6600A0D8 sw r1,ctx1start |
|
; Startup Ethernet access ? |
; |
FFFFFFFFFFFFB318 ctxstart1: |
FFFFFFFFFFFFB318 BE00000A bra ctxstart1 |
FFFFFFFFFFFFB3BC E69CFFFF ; SETLO |
FFFFFFFFFFFFB3C0 EE800003 ; SETMID |
FFFFFFFFFFFFB3C4 6A0D0420 inb r1,CONFIGREC |
FFFFFFFFFFFFB3C8 2A10820C bfext r1,r1,#1,#1 |
FFFFFFFFFFFFB3CC BE100068 beq r1,r0,skip3 |
FFFFFFFFFFFFB3D0 9A00DD3C lea r1,eth_main |
FFFFFFFFFFFFB3D4 6600A0E0 sw r1,ctx2start |
FFFFFFFFFFFFB3D8 skip3: |
|
FFFFFFFFFFFFB3D8 9A00CDD0 lea r1,RandomLines |
FFFFFFFFFFFFB3DC 6600A0E8 sw r1,ctx3start |
FFFFFFFFFFFFB3E0 31FFF54E call spi_init |
FFFFFFFFFFFFB3E4 BE100069 bne r1,r0,skip_spi_read |
FFFFFFFFFFFFB3E8 31FFF59D call spi_read_boot |
FFFFFFFFFFFFB3EC 31FFF605 call loadBootFile |
FFFFFFFFFFFFB3F0 skip_spi_read: |
FFFFFFFFFFFFB3F0 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFB3F4 j4: |
FFFFFFFFFFFFB3F4 33FFF20A jmp Monitor |
FFFFFFFFFFFFB3F8 BE007FEA bra j4 |
|
; The contexts wait for a context startup address to be placed in the |
; startup table. Once an address is in the table, a call to the context |
; code will be made. The default is a NULL pointer, which |
; causes the context to loop around back to here while waiting for a |
; code to run. |
; |
FFFFFFFFFFFFB3FC ctxstart1: |
FFFFFFFFFFFFB3FC 9A00A0D0 lea r1,ctx0start ; r1 = context start table base |
FFFFFFFFFFFFB400 02010568 mfspr r2,AXC ; r2 = index into start table |
FFFFFFFFFFFFB404 6A110703 lw r1,[r1+r2*8] ; r1 = context start address |
FFFFFFFFFFFFB408 BE100048 beq r1,r0,ctx12 |
FFFFFFFFFFFFB40C 341F8000 jal lr,[r1] ; perform a call to the context code |
|
; We might as well move to the next context, since there's nothing |
; to do. This can be accomplished by tirggering a IRQ interrupt. |
; We can't just increment the excution pattern pointer, because that |
; would only switch the register set and not the program counter. |
; An interrupt saves the program counter, and restores it from the |
; IPC context register. |
; |
FFFFFFFFFFFFB410 ctx12: |
FFFFFFFFFFFFB410 00000040 sei ; causes a priv violation. don't allow interrupts during syscall |
FFFFFFFFFFFFB414 DE000000 nop ; wait for sei to take effect |
FFFFFFFFFFFFB418 DE000000 nop |
FFFFFFFFFFFFB41C DE000000 nop |
FFFFFFFFFFFFB420 0181E097 syscall #EX_IRQ |
FFFFFFFFFFFFB424 BE007ECA bra ctxstart1 |
|
; call ramtest |
|
FFFFFFFFFFFFB428 context1disp: |
|
; once we've started, clear the start vector so that the context |
; isn't continuously restarted. |
; |
FFFFFFFFFFFFB428 660020D8 sw r0,ctx1start |
FFFFFFFFFFFFB42C E6900000 ; SETLO |
FFFFFFFFFFFFB430 EE800003 ; SETMID |
FFFFFFFFFFFFB434 6A0D0C2D lea r3,TEXTSCR |
FFFFFFFFFFFFB438 16008056 lw r1,#'V' |
FFFFFFFFFFFFB43C 1601014A lw r2,#330 |
FFFFFFFFFFFFB440 1602002F lw r4,#47 |
FFFFFFFFFFFFB444 31FFF063 call AsciiToScreen |
FFFFFFFFFFFFB448 ctx11: |
FFFFFFFFFFFFB448 6A310421 inch r1,[r3+r2] |
FFFFFFFFFFFFB44C 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFB450 6A310429 outc r1,[r3+r2] |
FFFFFFFFFFFFB454 0A2100A8 addui r2,r2,#168 |
FFFFFFFFFFFFB458 BE027F8F loop r4,ctx11 |
FFFFFFFFFFFFB45C BE007E6A bra context1disp |
|
;----------------------------------------- |
; Hello World! |
;----------------------------------------- |
FFFFFFFFFFFFB31C HelloWorld: |
FFFFFFFFFFFFB31C 0FEF0018 subui r30,r30,#24 |
FFFFFFFFFFFFB320 67E08000 sw r1,[sp] |
FFFFFFFFFFFFB324 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFB328 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFB32C E6BFB360 ; SETLO |
FFFFFFFFFFFFB330 6A0D082D lea r2,MSG |
FFFFFFFFFFFFB334 j3: |
FFFFFFFFFFFFB334 40208000 lb r1,[r2] |
FFFFFFFFFFFFB338 BE100088 beq r1,r0,j2 |
FFFFFFFFFFFFB33C 31FFED0C call SerialPutChar |
FFFFFFFFFFFFB340 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFB344 BE007F8A bra j3 |
FFFFFFFFFFFFB348 j2: |
FFFFFFFFFFFFB348 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFB34C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFB350 67E08000 sw r1,[sp] |
FFFFFFFFFFFFB354 37EF8018 ret #24 |
FFFFFFFFFFFFB460 HelloWorld: |
FFFFFFFFFFFFB460 0FEF0018 subui r30,r30,#24 |
FFFFFFFFFFFFB464 67E08000 sw r1,[sp] |
FFFFFFFFFFFFB468 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFB46C 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFB470 E6BFB4A0 ; SETLO |
FFFFFFFFFFFFB474 6A0D082D lea r2,MSG |
FFFFFFFFFFFFB478 j3: |
FFFFFFFFFFFFB478 40208000 lb r1,[r2] |
FFFFFFFFFFFFB47C BE100088 beq r1,r0,j2 |
FFFFFFFFFFFFB480 31FFED5C call SerialPutChar |
FFFFFFFFFFFFB484 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFB488 BE007F8A bra j3 |
FFFFFFFFFFFFB48C j2: |
FFFFFFFFFFFFB48C 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFB490 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFB494 67E08000 sw r1,[sp] |
FFFFFFFFFFFFB498 37EF8018 ret #24 |
|
|
FFFFFFFFFFFFB358 0000000000000000 align 16 |
FFFFFFFFFFFFB360 align 16 |
FFFFFFFFFFFFB360 MSG: |
FFFFFFFFFFFFB360 6F57206F6C6C6548 db "Hello World!",0 |
FFFFFFFFFFFFB36D MSGSTART: |
FFFFFFFFFFFFB368 7061520021646C72 db "Raptor64 system starting....",0 |
FFFFFFFFFFFFB370 7973203436726F74 |
FFFFFFFFFFFFB378 617473206D657473 |
FFFFFFFFFFFFB380 2E2E2E676E697472 |
FFFFFFFFFFFFB498 0000000037EF8018 align 16 |
FFFFFFFFFFFFB4A0 align 16 |
FFFFFFFFFFFFB4A0 MSG: |
FFFFFFFFFFFFB4A0 6F57206F6C6C6548 db "Hello World!",0 |
FFFFFFFFFFFFB4AD MSGSTART: |
FFFFFFFFFFFFB4A8 7061520021646C72 db "Raptor64 system starting....",0 |
FFFFFFFFFFFFB4B0 7973203436726F74 |
FFFFFFFFFFFFB4B8 617473206D657473 |
FFFFFFFFFFFFB4C0 2E2E2E676E697472 |
|
FFFFFFFFFFFFB388 000000000000002E align 16 |
FFFFFFFFFFFFB390 align 16 |
FFFFFFFFFFFFB4C8 000000000000002E align 16 |
FFFFFFFFFFFFB4D0 align 16 |
|
;---------------------------------------------------------- |
; Initialize programmable interrupt controller (PIC) |
; 0 = nmi |
; 0 = nmi (parity error) |
; 1 = keyboard reset |
; 2 = 1000Hz pulse (context switcher) |
; 3 = 100Hz pulse (cursor flash) |
; 4 = ethmac |
; 8 = uart |
; 13 = raster interrupt |
; 15 = keyboard char |
;---------------------------------------------------------- |
FFFFFFFFFFFFB390 PICInit: |
FFFFFFFFFFFFB390 E6BFB3AC ; SETLO |
FFFFFFFFFFFFB394 6A0D042D lea r1,PICret |
FFFFFFFFFFFFB398 66009030 sw r1,TickIRQAddr |
FFFFFFFFFFFFB4D0 PICInit: |
FFFFFFFFFFFFB4D0 E6BFB4EC ; SETLO |
FFFFFFFFFFFFB4D4 6A0D042D lea r1,PICret |
FFFFFFFFFFFFB4D8 66009030 sw r1,TickIRQAddr |
; enable: raster irq, |
FFFFFFFFFFFFB39C E07FA00F setlo r1,#0xA00F ; enable nmi,kbd_rst,and kbd_irq |
FFFFFFFFFFFFB4DC E07F800F setlo r1,#0x800F ; enable nmi,kbd_rst,and kbd_irq |
; A10F enable serial IRQ |
FFFFFFFFFFFFB3A0 E69C0FF2 ; SETLO |
FFFFFFFFFFFFB3A4 EE800003 ; SETMID |
FFFFFFFFFFFFB3A8 6A0D0429 outc r1,PIC_IE |
FFFFFFFFFFFFB3AC PICret: |
FFFFFFFFFFFFB3AC 37EF8000 ret |
FFFFFFFFFFFFB4E0 E69C0FF2 ; SETLO |
FFFFFFFFFFFFB4E4 EE800003 ; SETMID |
FFFFFFFFFFFFB4E8 6A0D0429 outc r1,PIC_IE |
FFFFFFFFFFFFB4EC PICret: |
FFFFFFFFFFFFB4EC 37EF8000 ret |
|
;============================================================================== |
; Serial port |
576,40 → 783,40
; Initialize the serial port |
;----------------------------------------- |
; |
FFFFFFFFFFFFB3B0 SerialInit: |
FFFFFFFFFFFFB3B0 62001800 sc r0,Uart_rxhead ; reset buffer indexes |
FFFFFFFFFFFFB3B4 62001802 sc r0,Uart_rxtail |
FFFFFFFFFFFFB3B8 E04001F0 setlo r1,#0x1f0 |
FFFFFFFFFFFFB3BC 62009810 sc r1,Uart_foff ; set threshold for XOFF |
FFFFFFFFFFFFB3C0 E0400010 setlo r1,#0x010 |
FFFFFFFFFFFFB3C4 6200980E sc r1,Uart_fon ; set threshold for XON |
FFFFFFFFFFFFB3C8 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB3CC E69C0A04 ; SETLO |
FFFFFFFFFFFFB3D0 EE800003 ; SETMID |
FFFFFFFFFFFFB3D4 6A0D0428 outb r1,UART_IE ; enable receive interrupt only |
FFFFFFFFFFFFB3D8 60001809 sb r0,Uart_rxrts ; no RTS/CTS signals available |
FFFFFFFFFFFFB3DC 60001812 sb r0,Uart_txrts ; no RTS/CTS signals available |
FFFFFFFFFFFFB3E0 60001813 sb r0,Uart_txdtr ; no DTR signals available |
FFFFFFFFFFFFB3E4 6000180A sb r0,Uart_rxdtr ; no DTR signals available |
FFFFFFFFFFFFB3E8 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB3EC 60009814 sb r1,Uart_txxon ; for now |
FFFFFFFFFFFFB3F0 37EF8000 ret |
FFFFFFFFFFFFB4F0 SerialInit: |
FFFFFFFFFFFFB4F0 62001800 sc r0,Uart_rxhead ; reset buffer indexes |
FFFFFFFFFFFFB4F4 62001802 sc r0,Uart_rxtail |
FFFFFFFFFFFFB4F8 E04001F0 setlo r1,#0x1f0 |
FFFFFFFFFFFFB4FC 62009810 sc r1,Uart_foff ; set threshold for XOFF |
FFFFFFFFFFFFB500 E0400010 setlo r1,#0x010 |
FFFFFFFFFFFFB504 6200980E sc r1,Uart_fon ; set threshold for XON |
FFFFFFFFFFFFB508 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB50C E69C0A04 ; SETLO |
FFFFFFFFFFFFB510 EE800003 ; SETMID |
FFFFFFFFFFFFB514 6A0D0428 outb r1,UART_IE ; enable receive interrupt only |
FFFFFFFFFFFFB518 60001809 sb r0,Uart_rxrts ; no RTS/CTS signals available |
FFFFFFFFFFFFB51C 60001812 sb r0,Uart_txrts ; no RTS/CTS signals available |
FFFFFFFFFFFFB520 60001813 sb r0,Uart_txdtr ; no DTR signals available |
FFFFFFFFFFFFB524 6000180A sb r0,Uart_rxdtr ; no DTR signals available |
FFFFFFFFFFFFB528 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB52C 60009814 sb r1,Uart_txxon ; for now |
FFFFFFFFFFFFB530 37EF8000 ret |
|
;--------------------------------------------------------------------------------- |
; Get character directly from serial port. Blocks until a character is available. |
;--------------------------------------------------------------------------------- |
; |
FFFFFFFFFFFFB3F4 SerialGetCharDirect: |
FFFFFFFFFFFFB3F4 sgc1: |
FFFFFFFFFFFFB3F4 E69C0A01 ; SETLO |
FFFFFFFFFFFFB3F8 EE800003 ; SETMID |
FFFFFFFFFFFFB3FC 6A0D0420 inb r1,UART_LS ; uart status |
FFFFFFFFFFFFB400 14108001 andi r1,r1,#rxfull ; is there a char available ? |
FFFFFFFFFFFFB404 BE107F88 beq r1,r0,sgc1 |
FFFFFFFFFFFFB408 E69C0A00 ; SETLO |
FFFFFFFFFFFFB40C EE800003 ; SETMID |
FFFFFFFFFFFFB410 6A0D0420 inb r1,UART |
FFFFFFFFFFFFB414 37EF8000 ret |
FFFFFFFFFFFFB534 SerialGetCharDirect: |
FFFFFFFFFFFFB534 sgc1: |
FFFFFFFFFFFFB534 E69C0A01 ; SETLO |
FFFFFFFFFFFFB538 EE800003 ; SETMID |
FFFFFFFFFFFFB53C 6A0D0420 inb r1,UART_LS ; uart status |
FFFFFFFFFFFFB540 14108001 andi r1,r1,#rxfull ; is there a char available ? |
FFFFFFFFFFFFB544 BE107F88 beq r1,r0,sgc1 |
FFFFFFFFFFFFB548 E69C0A00 ; SETLO |
FFFFFFFFFFFFB54C EE800003 ; SETMID |
FFFFFFFFFFFFB550 6A0D0420 inb r1,UART |
FFFFFFFFFFFFB554 37EF8000 ret |
|
;------------------------------------------------ |
; Check for a character at the serial port |
616,13 → 823,13
; returns r1 = 1 if char available, 0 otherwise |
;------------------------------------------------ |
; |
FFFFFFFFFFFFB418 SerialCheckForCharDirect: |
FFFFFFFFFFFFB418 E69C0A01 ; SETLO |
FFFFFFFFFFFFB41C EE800003 ; SETMID |
FFFFFFFFFFFFB420 6A0D0420 inb r1,UART_LS ; uart status |
FFFFFFFFFFFFB424 14108001 andi r1,r1,#rxfull ; is there a char available ? |
FFFFFFFFFFFFB428 04100439 sne r1,r1,r0 |
FFFFFFFFFFFFB42C 37EF8000 ret |
FFFFFFFFFFFFB558 SerialCheckForCharDirect: |
FFFFFFFFFFFFB558 E69C0A01 ; SETLO |
FFFFFFFFFFFFB55C EE800003 ; SETMID |
FFFFFFFFFFFFB560 6A0D0420 inb r1,UART_LS ; uart status |
FFFFFFFFFFFFB564 14108001 andi r1,r1,#rxfull ; is there a char available ? |
FFFFFFFFFFFFB568 04100439 sne r1,r1,r0 |
FFFFFFFFFFFFB56C 37EF8000 ret |
|
;----------------------------------------- |
; Put character to serial port |
629,95 → 836,95
; r1 = char to put |
;----------------------------------------- |
; |
FFFFFFFFFFFFB430 SerialPutChar: |
FFFFFFFFFFFFB430 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFB434 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB438 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFB43C 67E20010 sw r4,16[sp] |
FFFFFFFFFFFFB440 67E28018 sw r5,24[sp] |
FFFFFFFFFFFFB444 E69C0A06 ; SETLO |
FFFFFFFFFFFFB448 EE800003 ; SETMID |
FFFFFFFFFFFFB44C 6A0D0820 inb r2,UART_MC |
FFFFFFFFFFFFB450 16210003 ori r2,r2,#3 ; assert DTR / RTS |
FFFFFFFFFFFFB454 E69C0A06 ; SETLO |
FFFFFFFFFFFFB458 EE800003 ; SETMID |
FFFFFFFFFFFFB45C 6A0D0828 outb r2,UART_MC |
FFFFFFFFFFFFB460 40011812 lb r2,Uart_txrts |
FFFFFFFFFFFFB464 BE200168 beq r2,r0,spcb1 |
FFFFFFFFFFFFB468 46021400 lw r4,Milliseconds |
FFFFFFFFFFFFB46C E0C00064 setlo r3,#100 ; delay count (1 s) |
FFFFFFFFFFFFB470 spcb3: |
FFFFFFFFFFFFB470 80011808 inb r2,UART_MS |
FFFFFFFFFFFFB474 1421000A andi r2,r2,#10 ; is CTS asserted ? |
FFFFFFFFFFFFB478 BE2000C9 bne r2,r0,spcb1 |
FFFFFFFFFFFFB47C 46029400 lw r5,Milliseconds |
FFFFFFFFFFFFB480 BE42FF88 beq r4,r5,spcb3 |
FFFFFFFFFFFFB484 02520009 mov r4,r5 |
FFFFFFFFFFFFB488 BE01FF4F loop r3,spcb3 |
FFFFFFFFFFFFB48C BE00046A bra spcabort |
FFFFFFFFFFFFB490 spcb1: |
FFFFFFFFFFFFB490 40011813 lb r2,Uart_txdtr |
FFFFFFFFFFFFB494 BE200168 beq r2,r0,spcb2 |
FFFFFFFFFFFFB498 46021400 lw r4,Milliseconds |
FFFFFFFFFFFFB49C E0C00064 setlo r3,#100 ; delay count |
FFFFFFFFFFFFB4A0 spcb4: |
FFFFFFFFFFFFB4A0 80011808 inb r2,UART_MS |
FFFFFFFFFFFFB4A4 14210014 andi r2,r2,#20 ; is DSR asserted ? |
FFFFFFFFFFFFB4A8 BE2000C9 bne r2,r0,spcb2 |
FFFFFFFFFFFFB4AC 46029400 lw r5,Milliseconds |
FFFFFFFFFFFFB4B0 BE42FF88 beq r4,r5,spcb4 |
FFFFFFFFFFFFB4B4 02520009 mov r4,r5 |
FFFFFFFFFFFFB4B8 BE01FF4F loop r3,spcb4 |
FFFFFFFFFFFFB4BC BE0002EA bra spcabort |
FFFFFFFFFFFFB4C0 spcb2: |
FFFFFFFFFFFFB4C0 40011814 lb r2,Uart_txxon |
FFFFFFFFFFFFB4C4 BE2000C8 beq r2,r0,spcb5 |
FFFFFFFFFFFFB4C8 spcb6: |
FFFFFFFFFFFFB4C8 40011815 lb r2,Uart_txxonoff |
FFFFFFFFFFFFB4CC BE200088 beq r2,r0,spcb5 |
FFFFFFFFFFFFB4D0 80021808 inb r4,UART_MS |
FFFFFFFFFFFFB4D4 14420080 andi r4,r4,#0x80 ; DCD ? |
FFFFFFFFFFFFB4D8 BE407F89 bne r4,r0,spcb6 |
FFFFFFFFFFFFB4DC spcb5: |
FFFFFFFFFFFFB4DC 46021400 lw r4,Milliseconds |
FFFFFFFFFFFFB4E0 E0C00064 setlo r3,#100 ; wait up to 1s |
FFFFFFFFFFFFB4E4 spcb8: |
FFFFFFFFFFFFB4E4 E69C0A01 ; SETLO |
FFFFFFFFFFFFB4E8 EE800003 ; SETMID |
FFFFFFFFFFFFB4EC 6A0D0820 inb r2,UART_LS |
FFFFFFFFFFFFB4F0 14210020 andi r2,r2,#0x20 ; tx not full ? |
FFFFFFFFFFFFB4F4 BE2000C9 bne r2,r0,spcb7 |
FFFFFFFFFFFFB4F8 46029400 lw r5,Milliseconds |
FFFFFFFFFFFFB4FC BE42FF48 beq r4,r5,spcb8 |
FFFFFFFFFFFFB500 02520009 mov r4,r5 |
FFFFFFFFFFFFB504 BE01FF0F loop r3,spcb8 |
FFFFFFFFFFFFB508 BE00008A bra spcabort |
FFFFFFFFFFFFB50C spcb7: |
FFFFFFFFFFFFB50C E69C0A00 ; SETLO |
FFFFFFFFFFFFB510 EE800003 ; SETMID |
FFFFFFFFFFFFB514 6A0D0428 outb r1,UART |
FFFFFFFFFFFFB518 spcabort: |
FFFFFFFFFFFFB518 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB51C 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFB520 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFB524 47E28018 lw r5,24[sp] |
FFFFFFFFFFFFB528 37EF8020 ret #32 |
FFFFFFFFFFFFB570 SerialPutChar: |
FFFFFFFFFFFFB570 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFB574 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB578 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFB57C 67E20010 sw r4,16[sp] |
FFFFFFFFFFFFB580 67E28018 sw r5,24[sp] |
FFFFFFFFFFFFB584 E69C0A06 ; SETLO |
FFFFFFFFFFFFB588 EE800003 ; SETMID |
FFFFFFFFFFFFB58C 6A0D0820 inb r2,UART_MC |
FFFFFFFFFFFFB590 16210003 ori r2,r2,#3 ; assert DTR / RTS |
FFFFFFFFFFFFB594 E69C0A06 ; SETLO |
FFFFFFFFFFFFB598 EE800003 ; SETMID |
FFFFFFFFFFFFB59C 6A0D0828 outb r2,UART_MC |
FFFFFFFFFFFFB5A0 40011812 lb r2,Uart_txrts |
FFFFFFFFFFFFB5A4 BE200168 beq r2,r0,spcb1 |
FFFFFFFFFFFFB5A8 46021400 lw r4,Milliseconds |
FFFFFFFFFFFFB5AC E0C00064 setlo r3,#100 ; delay count (1 s) |
FFFFFFFFFFFFB5B0 spcb3: |
FFFFFFFFFFFFB5B0 80011808 inb r2,UART_MS |
FFFFFFFFFFFFB5B4 1421000A andi r2,r2,#10 ; is CTS asserted ? |
FFFFFFFFFFFFB5B8 BE2000C9 bne r2,r0,spcb1 |
FFFFFFFFFFFFB5BC 46029400 lw r5,Milliseconds |
FFFFFFFFFFFFB5C0 BE42FF88 beq r4,r5,spcb3 |
FFFFFFFFFFFFB5C4 02520009 mov r4,r5 |
FFFFFFFFFFFFB5C8 BE01FF4F loop r3,spcb3 |
FFFFFFFFFFFFB5CC BE00046A bra spcabort |
FFFFFFFFFFFFB5D0 spcb1: |
FFFFFFFFFFFFB5D0 40011813 lb r2,Uart_txdtr |
FFFFFFFFFFFFB5D4 BE200168 beq r2,r0,spcb2 |
FFFFFFFFFFFFB5D8 46021400 lw r4,Milliseconds |
FFFFFFFFFFFFB5DC E0C00064 setlo r3,#100 ; delay count |
FFFFFFFFFFFFB5E0 spcb4: |
FFFFFFFFFFFFB5E0 80011808 inb r2,UART_MS |
FFFFFFFFFFFFB5E4 14210014 andi r2,r2,#20 ; is DSR asserted ? |
FFFFFFFFFFFFB5E8 BE2000C9 bne r2,r0,spcb2 |
FFFFFFFFFFFFB5EC 46029400 lw r5,Milliseconds |
FFFFFFFFFFFFB5F0 BE42FF88 beq r4,r5,spcb4 |
FFFFFFFFFFFFB5F4 02520009 mov r4,r5 |
FFFFFFFFFFFFB5F8 BE01FF4F loop r3,spcb4 |
FFFFFFFFFFFFB5FC BE0002EA bra spcabort |
FFFFFFFFFFFFB600 spcb2: |
FFFFFFFFFFFFB600 40011814 lb r2,Uart_txxon |
FFFFFFFFFFFFB604 BE2000C8 beq r2,r0,spcb5 |
FFFFFFFFFFFFB608 spcb6: |
FFFFFFFFFFFFB608 40011815 lb r2,Uart_txxonoff |
FFFFFFFFFFFFB60C BE200088 beq r2,r0,spcb5 |
FFFFFFFFFFFFB610 80021808 inb r4,UART_MS |
FFFFFFFFFFFFB614 14420080 andi r4,r4,#0x80 ; DCD ? |
FFFFFFFFFFFFB618 BE407F89 bne r4,r0,spcb6 |
FFFFFFFFFFFFB61C spcb5: |
FFFFFFFFFFFFB61C 46021400 lw r4,Milliseconds |
FFFFFFFFFFFFB620 E0C00064 setlo r3,#100 ; wait up to 1s |
FFFFFFFFFFFFB624 spcb8: |
FFFFFFFFFFFFB624 E69C0A01 ; SETLO |
FFFFFFFFFFFFB628 EE800003 ; SETMID |
FFFFFFFFFFFFB62C 6A0D0820 inb r2,UART_LS |
FFFFFFFFFFFFB630 14210020 andi r2,r2,#0x20 ; tx not full ? |
FFFFFFFFFFFFB634 BE2000C9 bne r2,r0,spcb7 |
FFFFFFFFFFFFB638 46029400 lw r5,Milliseconds |
FFFFFFFFFFFFB63C BE42FF48 beq r4,r5,spcb8 |
FFFFFFFFFFFFB640 02520009 mov r4,r5 |
FFFFFFFFFFFFB644 BE01FF0F loop r3,spcb8 |
FFFFFFFFFFFFB648 BE00008A bra spcabort |
FFFFFFFFFFFFB64C spcb7: |
FFFFFFFFFFFFB64C E69C0A00 ; SETLO |
FFFFFFFFFFFFB650 EE800003 ; SETMID |
FFFFFFFFFFFFB654 6A0D0428 outb r1,UART |
FFFFFFFFFFFFB658 spcabort: |
FFFFFFFFFFFFB658 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB65C 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFB660 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFB664 47E28018 lw r5,24[sp] |
FFFFFFFFFFFFB668 37EF8020 ret #32 |
|
;------------------------------------------------- |
; Compute number of characters in recieve buffer. |
; r4 = number of chars |
;------------------------------------------------- |
FFFFFFFFFFFFB52C CharsInRxBuf: |
FFFFFFFFFFFFB52C 42021800 lc r4,Uart_rxhead |
FFFFFFFFFFFFB530 42011802 lc r2,Uart_rxtail |
FFFFFFFFFFFFB534 04411005 subu r4,r4,r2 |
FFFFFFFFFFFFB538 BE4000A3 bgt r4,r0,cirxb1 |
FFFFFFFFFFFFB53C E1000200 setlo r4,#0x200 |
FFFFFFFFFFFFB540 04411003 addu r4,r4,r2 |
FFFFFFFFFFFFB544 42011800 lc r2,Uart_rxhead |
FFFFFFFFFFFFB548 04411005 subu r4,r4,r2 |
FFFFFFFFFFFFB54C cirxb1: |
FFFFFFFFFFFFB54C 37EF8000 ret |
FFFFFFFFFFFFB66C CharsInRxBuf: |
FFFFFFFFFFFFB66C 42021800 lc r4,Uart_rxhead |
FFFFFFFFFFFFB670 42011802 lc r2,Uart_rxtail |
FFFFFFFFFFFFB674 04411005 subu r4,r4,r2 |
FFFFFFFFFFFFB678 BE4000A3 bgt r4,r0,cirxb1 |
FFFFFFFFFFFFB67C E1000200 setlo r4,#0x200 |
FFFFFFFFFFFFB680 04411003 addu r4,r4,r2 |
FFFFFFFFFFFFB684 42011800 lc r2,Uart_rxhead |
FFFFFFFFFFFFB688 04411005 subu r4,r4,r2 |
FFFFFFFFFFFFB68C cirxb1: |
FFFFFFFFFFFFB68C 37EF8000 ret |
|
;---------------------------------------------- |
; Get character from rx fifo |
724,214 → 931,477
; If the fifo is empty enough then send an XON |
;---------------------------------------------- |
; |
FFFFFFFFFFFFB550 SerialGetChar: |
FFFFFFFFFFFFB550 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFB554 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB558 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFB55C 67E20010 sw r4,16[sp] |
FFFFFFFFFFFFB560 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFB564 42019800 lc r3,Uart_rxhead |
FFFFFFFFFFFFB568 42011802 lc r2,Uart_rxtail |
FFFFFFFFFFFFB56C BE218528 beq r2,r3,sgcfifo1 ; is there a char available ? |
FFFFFFFFFFFFB570 9A019600 lea r3,Uart_rxfifo |
FFFFFFFFFFFFB574 6A218400 lb r1,[r2+r3] ; get the char from the fifo into r1 |
FFFFFFFFFFFFB578 0A210001 addui r2,r2,#1 ; increment the fifo pointer |
FFFFFFFFFFFFB57C 142101FF andi r2,r2,#0x1ff |
FFFFFFFFFFFFB580 62011802 sc r2,Uart_rxtail |
FFFFFFFFFFFFB584 4001180C lb r2,Uart_rxflow ; using flow control ? |
FFFFFFFFFFFFB588 BE2003A8 beq r2,r0,sgcfifo2 |
FFFFFFFFFFFFB58C 4201980E lc r3,Uart_fon ; enough space in Rx buffer ? |
FFFFFFFFFFFFB590 31FFED4B call CharsInRxBuf |
FFFFFFFFFFFFB594 BE418343 bgt r4,r3,sgcfifo2 |
FFFFFFFFFFFFB598 6000180C sb r0,Uart_rxflow ; flow off |
FFFFFFFFFFFFB59C 40021809 lb r4,Uart_rxrts |
FFFFFFFFFFFFB5A0 BE400108 beq r4,r0,sgcfifo3 |
FFFFFFFFFFFFB5A4 E69C0A06 ; SETLO |
FFFFFFFFFFFFB5A8 EE800003 ; SETMID |
FFFFFFFFFFFFB5AC 6A0D1020 inb r4,UART_MC ; set rts bit in MC |
FFFFFFFFFFFFB5B0 16420002 ori r4,r4,#2 |
FFFFFFFFFFFFB5B4 E69C0A06 ; SETLO |
FFFFFFFFFFFFB5B8 EE800003 ; SETMID |
FFFFFFFFFFFFB5BC 6A0D1028 outb r4,UART_MC |
FFFFFFFFFFFFB5C0 sgcfifo3: |
FFFFFFFFFFFFB5C0 4002180A lb r4,Uart_rxdtr |
FFFFFFFFFFFFB5C4 BE400108 beq r4,r0,sgcfifo4 |
FFFFFFFFFFFFB5C8 E69C0A06 ; SETLO |
FFFFFFFFFFFFB5CC EE800003 ; SETMID |
FFFFFFFFFFFFB5D0 6A0D1020 inb r4,UART_MC ; set DTR |
FFFFFFFFFFFFB5D4 16420001 ori r4,r4,#1 |
FFFFFFFFFFFFB5D8 E69C0A06 ; SETLO |
FFFFFFFFFFFFB5DC EE800003 ; SETMID |
FFFFFFFFFFFFB5E0 6A0D1028 outb r4,UART_MC |
FFFFFFFFFFFFB5E4 sgcfifo4: |
FFFFFFFFFFFFB5E4 4002180B lb r4,Uart_rxxon |
FFFFFFFFFFFFB5E8 BE4000A8 beq r4,r0,sgcfifo5 |
FFFFFFFFFFFFB5EC E1000011 setlo r4,#XON |
FFFFFFFFFFFFB5F0 E69C0A00 ; SETLO |
FFFFFFFFFFFFB5F4 EE800003 ; SETMID |
FFFFFFFFFFFFB5F8 6A0D1028 outb r4,UART |
FFFFFFFFFFFFB5FC sgcfifo5: |
FFFFFFFFFFFFB5FC sgcfifo2: ; return with char in r1 |
FFFFFFFFFFFFB5FC 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB600 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFB604 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFB608 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFB60C 37EF8020 ret #32 |
FFFFFFFFFFFFB610 sgcfifo1: |
FFFFFFFFFFFFB610 E07FFFFF setlo r1,#-1 ; no char available |
FFFFFFFFFFFFB614 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB618 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFB61C 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFB620 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFB624 37EF8020 ret #32 |
FFFFFFFFFFFFB690 SerialGetChar: |
FFFFFFFFFFFFB690 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFB694 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB698 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFB69C 67E20010 sw r4,16[sp] |
FFFFFFFFFFFFB6A0 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFB6A4 42019800 lc r3,Uart_rxhead |
FFFFFFFFFFFFB6A8 42011802 lc r2,Uart_rxtail |
FFFFFFFFFFFFB6AC BE218528 beq r2,r3,sgcfifo1 ; is there a char available ? |
FFFFFFFFFFFFB6B0 9A019600 lea r3,Uart_rxfifo |
FFFFFFFFFFFFB6B4 6A218400 lb r1,[r2+r3] ; get the char from the fifo into r1 |
FFFFFFFFFFFFB6B8 0A210001 addui r2,r2,#1 ; increment the fifo pointer |
FFFFFFFFFFFFB6BC 142101FF andi r2,r2,#0x1ff |
FFFFFFFFFFFFB6C0 62011802 sc r2,Uart_rxtail |
FFFFFFFFFFFFB6C4 4001180C lb r2,Uart_rxflow ; using flow control ? |
FFFFFFFFFFFFB6C8 BE2003A8 beq r2,r0,sgcfifo2 |
FFFFFFFFFFFFB6CC 4201980E lc r3,Uart_fon ; enough space in Rx buffer ? |
FFFFFFFFFFFFB6D0 31FFED9B call CharsInRxBuf |
FFFFFFFFFFFFB6D4 BE418343 bgt r4,r3,sgcfifo2 |
FFFFFFFFFFFFB6D8 6000180C sb r0,Uart_rxflow ; flow off |
FFFFFFFFFFFFB6DC 40021809 lb r4,Uart_rxrts |
FFFFFFFFFFFFB6E0 BE400108 beq r4,r0,sgcfifo3 |
FFFFFFFFFFFFB6E4 E69C0A06 ; SETLO |
FFFFFFFFFFFFB6E8 EE800003 ; SETMID |
FFFFFFFFFFFFB6EC 6A0D1020 inb r4,UART_MC ; set rts bit in MC |
FFFFFFFFFFFFB6F0 16420002 ori r4,r4,#2 |
FFFFFFFFFFFFB6F4 E69C0A06 ; SETLO |
FFFFFFFFFFFFB6F8 EE800003 ; SETMID |
FFFFFFFFFFFFB6FC 6A0D1028 outb r4,UART_MC |
FFFFFFFFFFFFB700 sgcfifo3: |
FFFFFFFFFFFFB700 4002180A lb r4,Uart_rxdtr |
FFFFFFFFFFFFB704 BE400108 beq r4,r0,sgcfifo4 |
FFFFFFFFFFFFB708 E69C0A06 ; SETLO |
FFFFFFFFFFFFB70C EE800003 ; SETMID |
FFFFFFFFFFFFB710 6A0D1020 inb r4,UART_MC ; set DTR |
FFFFFFFFFFFFB714 16420001 ori r4,r4,#1 |
FFFFFFFFFFFFB718 E69C0A06 ; SETLO |
FFFFFFFFFFFFB71C EE800003 ; SETMID |
FFFFFFFFFFFFB720 6A0D1028 outb r4,UART_MC |
FFFFFFFFFFFFB724 sgcfifo4: |
FFFFFFFFFFFFB724 4002180B lb r4,Uart_rxxon |
FFFFFFFFFFFFB728 BE4000A8 beq r4,r0,sgcfifo5 |
FFFFFFFFFFFFB72C E1000011 setlo r4,#XON |
FFFFFFFFFFFFB730 E69C0A00 ; SETLO |
FFFFFFFFFFFFB734 EE800003 ; SETMID |
FFFFFFFFFFFFB738 6A0D1028 outb r4,UART |
FFFFFFFFFFFFB73C sgcfifo5: |
FFFFFFFFFFFFB73C sgcfifo2: ; return with char in r1 |
FFFFFFFFFFFFB73C 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB740 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFB744 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFB748 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFB74C 37EF8020 ret #32 |
FFFFFFFFFFFFB750 sgcfifo1: |
FFFFFFFFFFFFB750 E07FFFFF setlo r1,#-1 ; no char available |
FFFFFFFFFFFFB754 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB758 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFB75C 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFB760 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFB764 37EF8020 ret #32 |
|
;----------------------------------------- |
; Serial port IRQ |
;----------------------------------------- |
; |
FFFFFFFFFFFFB628 SerialIRQ: |
FFFFFFFFFFFFB628 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFB62C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFB630 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFB634 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFB638 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFB63C 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFB640 E69C0A03 ; SETLO |
FFFFFFFFFFFFB644 EE800003 ; SETMID |
FFFFFFFFFFFFB648 6A0D0420 inb r1,UART_IS ; get interrupt status |
FFFFFFFFFFFFB64C BE1000A1 bge r1,r0,sirq1 |
FFFFFFFFFFFFB650 1410807F andi r1,r1,#0x7f ; switch on interrupt type |
FFFFFFFFFFFFB654 B0100D04 beqi r1,#4,srxirq |
FFFFFFFFFFFFB658 B0100B0C beqi r1,#0xC,stxirq |
FFFFFFFFFFFFB65C B0100710 beqi r1,#0x10,smsirq |
FFFFFFFFFFFFB660 sirq1: |
FFFFFFFFFFFFB660 47E08000 lw r1,[sp] |
FFFFFFFFFFFFB664 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFB668 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFB66C 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFB670 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFB674 37EF8028 ret #40 |
FFFFFFFFFFFFB768 SerialIRQ: |
FFFFFFFFFFFFB768 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFB76C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFB770 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFB774 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFB778 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFB77C 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFB780 E69C0A03 ; SETLO |
FFFFFFFFFFFFB784 EE800003 ; SETMID |
FFFFFFFFFFFFB788 6A0D0420 inb r1,UART_IS ; get interrupt status |
FFFFFFFFFFFFB78C BE1000A1 bge r1,r0,sirq1 |
FFFFFFFFFFFFB790 1410807F andi r1,r1,#0x7f ; switch on interrupt type |
FFFFFFFFFFFFB794 B0100D04 beqi r1,#4,srxirq |
FFFFFFFFFFFFB798 B0100B0C beqi r1,#0xC,stxirq |
FFFFFFFFFFFFB79C B0100710 beqi r1,#0x10,smsirq |
FFFFFFFFFFFFB7A0 sirq1: |
FFFFFFFFFFFFB7A0 47E08000 lw r1,[sp] |
FFFFFFFFFFFFB7A4 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFB7A8 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFB7AC 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFB7B0 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFB7B4 37EF8028 ret #40 |
|
; Get the modem status and record it |
FFFFFFFFFFFFB678 smsirq: |
FFFFFFFFFFFFB678 80009808 inb r1,UART_MS |
FFFFFFFFFFFFB67C 60009808 sb r1,Uart_ms |
FFFFFFFFFFFFB680 BE007F0A bra sirq1 |
FFFFFFFFFFFFB7B8 smsirq: |
FFFFFFFFFFFFB7B8 80009808 inb r1,UART_MS |
FFFFFFFFFFFFB7BC 60009808 sb r1,Uart_ms |
FFFFFFFFFFFFB7C0 BE007F0A bra sirq1 |
|
FFFFFFFFFFFFB684 stxirq: |
FFFFFFFFFFFFB684 BE007EEA bra sirq1 |
FFFFFFFFFFFFB7C4 stxirq: |
FFFFFFFFFFFFB7C4 BE007EEA bra sirq1 |
|
; Get a character from the uart and store it in the rx fifo |
FFFFFFFFFFFFB688 srxirq: |
FFFFFFFFFFFFB688 srxirq1: |
FFFFFFFFFFFFB688 E69C0A00 ; SETLO |
FFFFFFFFFFFFB68C EE800003 ; SETMID |
FFFFFFFFFFFFB690 6A0D0420 inb r1,UART ; get the char (clears interrupt) |
FFFFFFFFFFFFB694 40011814 lb r2,Uart_txxon |
FFFFFFFFFFFFB698 BE200108 beq r2,r0,srxirq3 |
FFFFFFFFFFFFB69C B2100413 bnei r1,#XOFF,srxirq2 |
FFFFFFFFFFFFB6A0 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB6A4 60009815 sb r1,Uart_txxonoff |
FFFFFFFFFFFFB6A8 BE00016A bra srxirq5 |
FFFFFFFFFFFFB6AC srxirq2: |
FFFFFFFFFFFFB6AC B2100311 bnei r1,#XON,srxirq3 |
FFFFFFFFFFFFB6B0 60001815 sb r0,Uart_txxonoff |
FFFFFFFFFFFFB6B4 BE00010A bra srxirq5 |
FFFFFFFFFFFFB6B8 srxirq3: |
FFFFFFFFFFFFB6B8 60001815 sb r0,Uart_txxonoff |
FFFFFFFFFFFFB6BC 42011800 lc r2,Uart_rxhead |
FFFFFFFFFFFFB6C0 9A019600 lea r3,Uart_rxfifo |
FFFFFFFFFFFFB6C4 6A310410 sb r1,[r3+r2] ; store in buffer |
FFFFFFFFFFFFB6C8 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFB6CC 142101FF andi r2,r2,#0x1ff |
FFFFFFFFFFFFB6D0 62011800 sc r2,Uart_rxhead |
FFFFFFFFFFFFB6D4 srxirq5: |
FFFFFFFFFFFFB6D4 E69C0A01 ; SETLO |
FFFFFFFFFFFFB6D8 EE800003 ; SETMID |
FFFFFFFFFFFFB6DC 6A0D0420 inb r1,UART_LS ; check for another ready character |
FFFFFFFFFFFFB6E0 14108001 andi r1,r1,#rxfull |
FFFFFFFFFFFFB6E4 BE107D29 bne r1,r0,srxirq1 |
FFFFFFFFFFFFB6E8 4000980C lb r1,Uart_rxflow ; are we using flow controls? |
FFFFFFFFFFFFB6EC BE1003C9 bne r1,r0,srxirq8 |
FFFFFFFFFFFFB6F0 31FFED4B call CharsInRxBuf |
FFFFFFFFFFFFB6F4 42009810 lc r1,Uart_foff |
FFFFFFFFFFFFB6F8 BE408360 blt r4,r1,srxirq8 |
FFFFFFFFFFFFB6FC E0400001 setlo r1,#1 |
FFFFFFFFFFFFB700 6000980C sb r1,Uart_rxflow |
FFFFFFFFFFFFB704 40009809 lb r1,Uart_rxrts |
FFFFFFFFFFFFB708 BE100108 beq r1,r0,srxirq6 |
FFFFFFFFFFFFB70C E69C0A06 ; SETLO |
FFFFFFFFFFFFB710 EE800003 ; SETMID |
FFFFFFFFFFFFB714 6A0D0420 inb r1,UART_MC |
FFFFFFFFFFFFB718 141080FD andi r1,r1,#0xFD ; turn off RTS |
FFFFFFFFFFFFB71C E69C0A06 ; SETLO |
FFFFFFFFFFFFB720 EE800003 ; SETMID |
FFFFFFFFFFFFB724 6A0D0428 outb r1,UART_MC |
FFFFFFFFFFFFB728 srxirq6: |
FFFFFFFFFFFFB728 4000980A lb r1,Uart_rxdtr |
FFFFFFFFFFFFB72C BE100108 beq r1,r0,srxirq7 |
FFFFFFFFFFFFB730 E69C0A06 ; SETLO |
FFFFFFFFFFFFB734 EE800003 ; SETMID |
FFFFFFFFFFFFB738 6A0D0420 inb r1,UART_MC |
FFFFFFFFFFFFB73C 141080FE andi r1,r1,#0xFE ; turn off DTR |
FFFFFFFFFFFFB740 E69C0A06 ; SETLO |
FFFFFFFFFFFFB744 EE800003 ; SETMID |
FFFFFFFFFFFFB748 6A0D0428 outb r1,UART_MC |
FFFFFFFFFFFFB74C srxirq7: |
FFFFFFFFFFFFB74C 4000980B lb r1,Uart_rxxon |
FFFFFFFFFFFFB750 BE1000A8 beq r1,r0,srxirq8 |
FFFFFFFFFFFFB754 E0400013 setlo r1,#XOFF |
FFFFFFFFFFFFB758 E69C0A00 ; SETLO |
FFFFFFFFFFFFB75C EE800003 ; SETMID |
FFFFFFFFFFFFB760 6A0D0428 outb r1,UART |
FFFFFFFFFFFFB764 srxirq8: |
FFFFFFFFFFFFB764 BE0077EA bra sirq1 |
FFFFFFFFFFFFB7C8 srxirq: |
FFFFFFFFFFFFB7C8 srxirq1: |
FFFFFFFFFFFFB7C8 E69C0A00 ; SETLO |
FFFFFFFFFFFFB7CC EE800003 ; SETMID |
FFFFFFFFFFFFB7D0 6A0D0420 inb r1,UART ; get the char (clears interrupt) |
FFFFFFFFFFFFB7D4 40011814 lb r2,Uart_txxon |
FFFFFFFFFFFFB7D8 BE200108 beq r2,r0,srxirq3 |
FFFFFFFFFFFFB7DC B2100413 bnei r1,#XOFF,srxirq2 |
FFFFFFFFFFFFB7E0 E0400001 setlo r1,#1 |
FFFFFFFFFFFFB7E4 60009815 sb r1,Uart_txxonoff |
FFFFFFFFFFFFB7E8 BE00016A bra srxirq5 |
FFFFFFFFFFFFB7EC srxirq2: |
FFFFFFFFFFFFB7EC B2100311 bnei r1,#XON,srxirq3 |
FFFFFFFFFFFFB7F0 60001815 sb r0,Uart_txxonoff |
FFFFFFFFFFFFB7F4 BE00010A bra srxirq5 |
FFFFFFFFFFFFB7F8 srxirq3: |
FFFFFFFFFFFFB7F8 60001815 sb r0,Uart_txxonoff |
FFFFFFFFFFFFB7FC 42011800 lc r2,Uart_rxhead |
FFFFFFFFFFFFB800 9A019600 lea r3,Uart_rxfifo |
FFFFFFFFFFFFB804 6A310410 sb r1,[r3+r2] ; store in buffer |
FFFFFFFFFFFFB808 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFB80C 142101FF andi r2,r2,#0x1ff |
FFFFFFFFFFFFB810 62011800 sc r2,Uart_rxhead |
FFFFFFFFFFFFB814 srxirq5: |
FFFFFFFFFFFFB814 E69C0A01 ; SETLO |
FFFFFFFFFFFFB818 EE800003 ; SETMID |
FFFFFFFFFFFFB81C 6A0D0420 inb r1,UART_LS ; check for another ready character |
FFFFFFFFFFFFB820 14108001 andi r1,r1,#rxfull |
FFFFFFFFFFFFB824 BE107D29 bne r1,r0,srxirq1 |
FFFFFFFFFFFFB828 4000980C lb r1,Uart_rxflow ; are we using flow controls? |
FFFFFFFFFFFFB82C BE1003C9 bne r1,r0,srxirq8 |
FFFFFFFFFFFFB830 31FFED9B call CharsInRxBuf |
FFFFFFFFFFFFB834 42009810 lc r1,Uart_foff |
FFFFFFFFFFFFB838 BE408360 blt r4,r1,srxirq8 |
FFFFFFFFFFFFB83C E0400001 setlo r1,#1 |
FFFFFFFFFFFFB840 6000980C sb r1,Uart_rxflow |
FFFFFFFFFFFFB844 40009809 lb r1,Uart_rxrts |
FFFFFFFFFFFFB848 BE100108 beq r1,r0,srxirq6 |
FFFFFFFFFFFFB84C E69C0A06 ; SETLO |
FFFFFFFFFFFFB850 EE800003 ; SETMID |
FFFFFFFFFFFFB854 6A0D0420 inb r1,UART_MC |
FFFFFFFFFFFFB858 141080FD andi r1,r1,#0xFD ; turn off RTS |
FFFFFFFFFFFFB85C E69C0A06 ; SETLO |
FFFFFFFFFFFFB860 EE800003 ; SETMID |
FFFFFFFFFFFFB864 6A0D0428 outb r1,UART_MC |
FFFFFFFFFFFFB868 srxirq6: |
FFFFFFFFFFFFB868 4000980A lb r1,Uart_rxdtr |
FFFFFFFFFFFFB86C BE100108 beq r1,r0,srxirq7 |
FFFFFFFFFFFFB870 E69C0A06 ; SETLO |
FFFFFFFFFFFFB874 EE800003 ; SETMID |
FFFFFFFFFFFFB878 6A0D0420 inb r1,UART_MC |
FFFFFFFFFFFFB87C 141080FE andi r1,r1,#0xFE ; turn off DTR |
FFFFFFFFFFFFB880 E69C0A06 ; SETLO |
FFFFFFFFFFFFB884 EE800003 ; SETMID |
FFFFFFFFFFFFB888 6A0D0428 outb r1,UART_MC |
FFFFFFFFFFFFB88C srxirq7: |
FFFFFFFFFFFFB88C 4000980B lb r1,Uart_rxxon |
FFFFFFFFFFFFB890 BE1000A8 beq r1,r0,srxirq8 |
FFFFFFFFFFFFB894 E0400013 setlo r1,#XOFF |
FFFFFFFFFFFFB898 E69C0A00 ; SETLO |
FFFFFFFFFFFFB89C EE800003 ; SETMID |
FFFFFFFFFFFFB8A0 6A0D0428 outb r1,UART |
FFFFFFFFFFFFB8A4 srxirq8: |
FFFFFFFFFFFFB8A4 BE0077EA bra sirq1 |
|
;============================================================================== |
; Video BIOS |
; Video interrupt #410 |
; |
; Function in R1 |
; 0x02 = Set Cursor Position r2 = row, r3 = col |
; 0x03 = Get Cursor position returns r1 = row, r2 = col |
; 0x06 = Scroll screen up |
; 0x09 = Display character+attribute, r2=char, r3=attrib, r4=#times |
; 0x0A = Display character, r2 = char, r3 = # times |
; 0x0C = Display Pixel r2 = x, r3 = y, r4 = color |
; 0x0D = Get pixel r2 = x, r3 = y |
; 0x14 = Display String r2 = pointer to string |
; 0x15 = Display number r2 = number, r3 = # digits |
; 0x16 = Display String + CRLF r2 = pointer to string |
; 0x17 = Display Word r2 as hex = word |
; 0x18 = Display Half word as hex r2 = half word |
; 0x19 = Display Charr char in hex r2 = char |
; 0x1A = Display Byte in hex r2 = byte |
;============================================================================== |
; |
FFFFFFFFFFFFB8A8 VideoSC: |
FFFFFFFFFFFFB8A8 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFB8AC 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFB8B0 67AF2200 sw sp,sp_saves[r26] ; save sp in save area |
FFFFFFFFFFFFB8B4 07AD1006 shlui r26,r26,#8 ; 2k for stack |
FFFFFFFFFFFFB8B8 03AF0009 mov sp,r26 |
FFFFFFFFFFFFB8BC E6808000 ; SETLO |
FFFFFFFFFFFFB8C0 EE800400 ; SETMID |
FFFFFFFFFFFFB8C4 05ED7803 addui sp,sp,#0x100008000 ; base stacks address |
FFFFFFFFFFFFB8C8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFB8CC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFB8D0 Video1: |
FFFFFFFFFFFFB8D0 020F80B4 omgi lr,#VIDEOGATE |
FFFFFFFFFFFFB8D4 BFF07FE9 bne lr,r0,Video1 |
FFFFFFFFFFFFB8D8 B0100D02 beqi r1,#0x02,Video_x02 |
FFFFFFFFFFFFB8DC B0101003 beqi r1,#0x03,Video_x03 |
FFFFFFFFFFFFB8E0 B0101206 beqi r1,#0x06,Video_x06 |
FFFFFFFFFFFFB8E4 B0101309 beqi r1,#0x09,Video_x09 |
FFFFFFFFFFFFB8E8 B010170A beqi r1,#0x0A,Video_x0A |
FFFFFFFFFFFFB8EC B0101A0C beqi r1,#0x0C,Video_x0C |
FFFFFFFFFFFFB8F0 B010270C beqi r1,#0x0C,Video_x0D |
FFFFFFFFFFFFB8F4 B0103B14 beqi r1,#0x14,Video_x14 |
FFFFFFFFFFFFB8F8 B0103D15 beqi r1,#0x15,Video_x15 |
FFFFFFFFFFFFB8FC B0104016 beqi r1,#0x16,Video_x16 |
FFFFFFFFFFFFB900 B0104217 beqi r1,#0x17,Video_x17 |
FFFFFFFFFFFFB904 B010441A beqi r1,#0x1A,Video_x1A |
FFFFFFFFFFFFB908 BE0008CA bra VideoRet |
|
FFFFFFFFFFFFB90C Video_x02: |
FFFFFFFFFFFFB90C 60011417 sb r2,CursorRow |
FFFFFFFFFFFFB910 60019418 sb r3,CursorCol |
FFFFFFFFFFFFB914 31FFF06F call CalcScreenLoc |
FFFFFFFFFFFFB918 BE00084A bra VideoRet |
|
FFFFFFFFFFFFB91C Video_x03: |
FFFFFFFFFFFFB91C 4A009417 lbu r1,CursorRow |
FFFFFFFFFFFFB920 4A011418 lbu r2,CursorCol |
FFFFFFFFFFFFB924 BE0007EA bra VideoRet |
|
FFFFFFFFFFFFB928 Video_x06: |
FFFFFFFFFFFFB928 31FFF02E call ScrollUp |
FFFFFFFFFFFFB92C BE0007AA bra VideoRet |
|
FFFFFFFFFFFFB930 Video_x09: |
FFFFFFFFFFFFB930 62019410 sc r3,CharColor |
FFFFFFFFFFFFB934 02208009 mov r1,r2 |
FFFFFFFFFFFFB938 Video_x09a: |
FFFFFFFFFFFFB938 31FFF07F call DisplayChar |
FFFFFFFFFFFFB93C BE027FEF loop r4,Video_x09a |
FFFFFFFFFFFFB940 BE00070A bra VideoRet |
|
FFFFFFFFFFFFB944 Video_x0A: |
FFFFFFFFFFFFB944 02208009 mov r1,r2 |
FFFFFFFFFFFFB948 Video_x0Aa: |
FFFFFFFFFFFFB948 31FFF07F call DisplayChar |
FFFFFFFFFFFFB94C BE01FFEF loop r3,Video_x0Aa |
FFFFFFFFFFFFB950 BE00068A bra VideoRet |
|
FFFFFFFFFFFFB954 Video_x0C: |
FFFFFFFFFFFFB954 E69AE008 ; SETLO |
FFFFFFFFFFFFB958 EE800003 ; SETMID |
FFFFFFFFFFFFB95C 6A0D0812 sh r2,GACCEL+8 ; x0 |
FFFFFFFFFFFFB960 E69AE00C ; SETLO |
FFFFFFFFFFFFB964 EE800003 ; SETMID |
FFFFFFFFFFFFB968 6A0D0C12 sh r3,GACCEL+12 ; y0 |
FFFFFFFFFFFFB96C E69AE000 ; SETLO |
FFFFFFFFFFFFB970 EE800003 ; SETMID |
FFFFFFFFFFFFB974 6A0D1012 sh r4,GACCEL+0 ; color |
FFFFFFFFFFFFB978 16008001 lw r1,#1 |
FFFFFFFFFFFFB97C E69AE03C ; SETLO |
FFFFFFFFFFFFB980 EE800003 ; SETMID |
FFFFFFFFFFFFB984 6A0D0412 sh r1,GACCEL+60 ; DRAW PIXEL command |
FFFFFFFFFFFFB988 BE0004CA bra VideoRet |
|
FFFFFFFFFFFFB98C Video_x0D: |
FFFFFFFFFFFFB98C E69AE008 ; SETLO |
FFFFFFFFFFFFB990 EE800003 ; SETMID |
FFFFFFFFFFFFB994 6A0D0812 sh r2,GACCEL+8 ; x0 |
FFFFFFFFFFFFB998 E69AE00C ; SETLO |
FFFFFFFFFFFFB99C EE800003 ; SETMID |
FFFFFFFFFFFFB9A0 6A0D0C12 sh r3,GACCEL+12 ; y0 |
FFFFFFFFFFFFB9A4 16008008 lw r1,#8 |
FFFFFFFFFFFFB9A8 E69AE03C ; SETLO |
FFFFFFFFFFFFB9AC EE800003 ; SETMID |
FFFFFFFFFFFFB9B0 6A0D0412 sh r1,GACCEL+60 ; GET PIXEL command |
FFFFFFFFFFFFB9B4 DE000000 nop ; let command start |
FFFFFFFFFFFFB9B8 DE000000 nop |
FFFFFFFFFFFFB9BC DE000000 nop |
FFFFFFFFFFFFB9C0 vxd1: |
FFFFFFFFFFFFB9C0 E69AE038 ; SETLO |
FFFFFFFFFFFFB9C4 EE800003 ; SETMID |
FFFFFFFFFFFFB9C8 6A0D0407 lhu r1,GACCEL+56 ; wait for state = IDLE |
FFFFFFFFFFFFB9CC BE107FA9 bne r1,r0,vxd1 |
FFFFFFFFFFFFB9D0 E69AE034 ; SETLO |
FFFFFFFFFFFFB9D4 EE800003 ; SETMID |
FFFFFFFFFFFFB9D8 6A0D0407 lhu r1,GACCEL+52 |
FFFFFFFFFFFFB9DC BE00022A bra VideoRet |
|
FFFFFFFFFFFFB9E0 Video_x14: |
FFFFFFFFFFFFB9E0 02208009 mov r1,r2 |
FFFFFFFFFFFFB9E4 31FFF122 call DisplayString |
FFFFFFFFFFFFB9E8 BE0001CA bra VideoRet |
|
FFFFFFFFFFFFB9EC Video_x15: |
FFFFFFFFFFFFB9EC 02208009 mov r1,r2 |
FFFFFFFFFFFFB9F0 02310009 mov r2,r3 |
FFFFFFFFFFFFB9F4 31FFF13F call DisplayNum |
FFFFFFFFFFFFB9F8 BE00014A bra VideoRet |
|
FFFFFFFFFFFFB9FC Video_x16: |
FFFFFFFFFFFFB9FC 02208009 mov r1,r2 |
FFFFFFFFFFFFBA00 31FFF130 call DisplayStringCRLF |
FFFFFFFFFFFFBA04 BE0000EA bra VideoRet |
|
FFFFFFFFFFFFBA08 Video_x17: |
FFFFFFFFFFFFBA08 02208009 mov r1,r2 |
FFFFFFFFFFFFBA0C 31FFF169 call DisplayWord |
FFFFFFFFFFFFBA10 BE00008A bra VideoRet |
|
FFFFFFFFFFFFBA14 Video_x1A: |
FFFFFFFFFFFFBA14 02208009 mov r1,r2 |
FFFFFFFFFFFFBA18 31FFF14B call DisplayByte |
FFFFFFFFFFFFBA1C BE00002A bra VideoRet |
|
FFFFFFFFFFFFBA20 VideoRet: |
FFFFFFFFFFFFBA20 020000B5 cmgi #VIDEOGATE |
FFFFFFFFFFFFBA24 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFBA28 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBA2C 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBA30 47AF2200 lw sp,sp_saves[r26] ; get back the stack |
FFFFFFFFFFFFBA34 01800021 eret |
|
;============================================================================== |
; BIOS interrupt #413 |
; 0x00 initialize |
; 0x01 read sector r2 = sector #, r3 = pointer to buffer |
; 0x02 write sector |
;============================================================================== |
; |
FFFFFFFFFFFFBA38 SDCARDSC: |
FFFFFFFFFFFFBA38 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBA3C 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBA40 67AF2200 sw sp,sp_saves[r26] ; save sp in save area |
FFFFFFFFFFFFBA44 07AD1006 shlui r26,r26,#8 ; 2k for stack |
FFFFFFFFFFFFBA48 03AF0009 mov sp,r26 |
FFFFFFFFFFFFBA4C E6808000 ; SETLO |
FFFFFFFFFFFFBA50 EE800400 ; SETMID |
FFFFFFFFFFFFBA54 05ED7803 addui sp,sp,#0x100008000 ; base stacks address |
FFFFFFFFFFFFBA58 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFBA5C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFBA60 SDC_1: |
FFFFFFFFFFFFBA60 020F80F4 omgi lr,#CARDGATE |
FFFFFFFFFFFFBA64 BFF07FE9 bne lr,r0,SDC_1 |
FFFFFFFFFFFFBA68 B0100400 beqi r1,#0,SDC_x00 |
FFFFFFFFFFFFBA6C B0100501 beqi r1,#1,SDC_x01 |
FFFFFFFFFFFFBA70 B0100802 beqi r1,#2,SDC_x02 |
FFFFFFFFFFFFBA74 BE0000EA bra SDCRet |
FFFFFFFFFFFFBA78 SDC_x00: |
FFFFFFFFFFFFBA78 31FFF54E call spi_init |
FFFFFFFFFFFFBA7C BE0000AA bra SDCRet |
FFFFFFFFFFFFBA80 SDC_x01: |
FFFFFFFFFFFFBA80 02208009 mov r1,r2 |
FFFFFFFFFFFFBA84 02310009 mov r2,r3 |
FFFFFFFFFFFFBA88 31FFF56D call spi_read_sector |
FFFFFFFFFFFFBA8C BE00002A bra SDCRet |
FFFFFFFFFFFFBA90 SDC_x02: |
FFFFFFFFFFFFBA90 SDCRet: |
FFFFFFFFFFFFBA90 020000F5 cmgi #CARDGATE |
FFFFFFFFFFFFBA94 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFBA98 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBA9C 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBAA0 47AF2200 lw sp,sp_saves[r26] ; get back the stack |
FFFFFFFFFFFFBAA4 01800021 eret |
|
;============================================================================== |
; Real time clock BIOS |
; BIOS interrupt #416 |
; |
; Function |
; 0x00 = get system tick |
; 0x01 = get date/time |
; 0x02 = set date/time |
;============================================================================== |
; |
FFFFFFFFFFFFBAA8 RTCSC: |
FFFFFFFFFFFFBAA8 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBAAC 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBAB0 67AF2200 sw sp,sp_saves[r26] ; save sp in save area |
FFFFFFFFFFFFBAB4 07AD1006 shlui r26,r26,#8 ; 2k for stack |
FFFFFFFFFFFFBAB8 03AF0009 mov sp,r26 |
FFFFFFFFFFFFBABC E6808000 ; SETLO |
FFFFFFFFFFFFBAC0 EE800400 ; SETMID |
FFFFFFFFFFFFBAC4 05ED7803 addui sp,sp,#0x100008000 ; base stacks address |
FFFFFFFFFFFFBAC8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFBACC 67EF8000 sw lr,[sp] |
; |
FFFFFFFFFFFFBAD0 B0100200 beqi r1,#0x00,RTC_x00 |
FFFFFFFFFFFFBAD4 B0100301 beqi r1,#0x01,RTC_x01 |
FFFFFFFFFFFFBAD8 RTC_x00: |
FFFFFFFFFFFFBAD8 020085A8 mfspr r1,TICK |
FFFFFFFFFFFFBADC BE00012A bra RTCRet |
FFFFFFFFFFFFBAE0 RTC_x01: |
FFFFFFFFFFFFBAE0 E69C0418 ; SETLO |
FFFFFFFFFFFFBAE4 EE800003 ; SETMID |
FFFFFFFFFFFFBAE8 6A0D002B outw r0,DATETIME+24 ; trigger a snapshot |
FFFFFFFFFFFFBAEC DE000000 nop |
FFFFFFFFFFFFBAF0 E69C0400 ; SETLO |
FFFFFFFFFFFFBAF4 EE800003 ; SETMID |
FFFFFFFFFFFFBAF8 6A0D0423 inw r1,DATETIME ; get the snapshotted date and time |
FFFFFFFFFFFFBAFC BE00002A bra RTCRet |
FFFFFFFFFFFFBB00 RTCRet: |
FFFFFFFFFFFFBB00 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFBB04 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBB08 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBB0C 47AF2200 lw sp,sp_saves[r26] ; get back the stack |
FFFFFFFFFFFFBB10 01800021 eret |
|
;============================================================================== |
; Keyboard BIOS |
; BIOS interrupt #417 |
; |
; Function in R1 |
; 0 = initialize keyboard |
; 1 = set keyboard echo |
; 2 = get keyboard character |
; 3 = check for key available |
; 0x00 = initialize keyboard |
; 0x01 = set keyboard echo |
; 0x02 = get keyboard character from buffer |
; 0x03 = check for key available in buffer |
; 0x04 = check for key directly at keyboard port |
; 0x05 = get keyboard character directly from keyboard port (blocks) |
;============================================================================== |
; |
FFFFFFFFFFFFB768 KeybdSC: |
FFFFFFFFFFFFB768 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFB76C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFB770 B2100300 bnei r1,#0,kbdsc1 |
FFFFFFFFFFFFB774 31FFEDEC call KeybdInit |
FFFFFFFFFFFFB778 BE00016A bra kbdscRet |
FFFFFFFFFFFFB77C kbdsc1: |
FFFFFFFFFFFFB77C B2100401 bnei r1,#1,kbdsc2 |
FFFFFFFFFFFFB780 02208009 mov r1,r2 |
FFFFFFFFFFFFB784 31FFEE06 call SetKeyboardEcho |
FFFFFFFFFFFFB788 BE0000EA bra kbdscRet |
FFFFFFFFFFFFB78C kbdsc2: |
FFFFFFFFFFFFB78C B2100302 bnei r1,#2,kbdsc3 |
FFFFFFFFFFFFB790 31FFEE08 call KeybdGetChar |
FFFFFFFFFFFFB794 BE00008A bra kbdscRet |
FFFFFFFFFFFFB798 kbdsc3: |
FFFFFFFFFFFFB798 B2100303 bnei r1,#3,kbdsc4 |
FFFFFFFFFFFFB79C 31FFEE1D call KeybdCheckForKey |
FFFFFFFFFFFFB7A0 BE00002A bra kbdscRet |
FFFFFFFFFFFFB7A4 kbdsc4: |
FFFFFFFFFFFFB7A4 kbdscRet: |
FFFFFFFFFFFFB7A4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFB7A8 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFB7AC 01800021 eret |
FFFFFFFFFFFFBB14 KeybdSC: |
FFFFFFFFFFFFBB14 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBB18 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBB1C 67AF2200 sw sp,sp_saves[r26] ; save sp in save area |
FFFFFFFFFFFFBB20 07AD1006 shlui r26,r26,#8 ; 2k for stack |
FFFFFFFFFFFFBB24 03AF0009 mov sp,r26 |
FFFFFFFFFFFFBB28 E6808000 ; SETLO |
FFFFFFFFFFFFBB2C EE800400 ; SETMID |
FFFFFFFFFFFFBB30 05ED7803 addui sp,sp,#0x100008000 ; base stacks address |
FFFFFFFFFFFFBB34 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFBB38 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFBB3C kbdsc5: |
FFFFFFFFFFFFBB3C 020F8074 omgi lr,#KEYBDGATE |
FFFFFFFFFFFFBB40 BFF07FE9 bne lr,r0,kbdsc5 |
FFFFFFFFFFFFBB44 B0100700 beqi r1,#0,kbd_x00 |
FFFFFFFFFFFFBB48 B0100801 beqi r1,#1,kbd_x01 |
FFFFFFFFFFFFBB4C B0100A02 beqi r1,#2,kbd_x02 |
FFFFFFFFFFFFBB50 B0100B03 beqi r1,#3,kbd_x03 |
FFFFFFFFFFFFBB54 B0100C04 beqi r1,#4,kbd_x04 |
FFFFFFFFFFFFBB58 B0100D05 beqi r1,#5,kbd_x05 |
FFFFFFFFFFFFBB5C BE0001CA bra kbdscRet |
FFFFFFFFFFFFBB60 kbd_x00: |
FFFFFFFFFFFFBB60 31FFEEEB call KeybdInit |
FFFFFFFFFFFFBB64 BE00018A bra kbdscRet |
FFFFFFFFFFFFBB68 kbd_x01: |
FFFFFFFFFFFFBB68 02208009 mov r1,r2 |
FFFFFFFFFFFFBB6C 31FFEF05 call SetKeyboardEcho |
FFFFFFFFFFFFBB70 BE00012A bra kbdscRet |
FFFFFFFFFFFFBB74 kbd_x02: |
FFFFFFFFFFFFBB74 31FFEF07 call KeybdGetChar |
FFFFFFFFFFFFBB78 BE0000EA bra kbdscRet |
FFFFFFFFFFFFBB7C kbd_x03: |
FFFFFFFFFFFFBB7C 31FFEF1C call KeybdCheckForKey |
FFFFFFFFFFFFBB80 BE0000AA bra kbdscRet |
FFFFFFFFFFFFBB84 kbd_x04: |
FFFFFFFFFFFFBB84 31FFEF20 call KeybdCheckForKeyDirect |
FFFFFFFFFFFFBB88 BE00006A bra kbdscRet |
FFFFFFFFFFFFBB8C kbd_x05: |
FFFFFFFFFFFFBB8C 31FFEF25 call KeybdGetCharDirect |
FFFFFFFFFFFFBB90 BE00002A bra kbdscRet |
FFFFFFFFFFFFBB94 kbdscRet: |
FFFFFFFFFFFFBB94 02000075 cmgi #KEYBDGATE |
FFFFFFFFFFFFBB98 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFBB9C 020D0568 mfspr r26,AXC ; get context |
FFFFFFFFFFFFBBA0 07AD0606 shlui r26,r26,#3 ; *8 |
FFFFFFFFFFFFBBA4 47AF2200 lw sp,sp_saves[r26] ; get back the stack |
FFFFFFFFFFFFBBA8 01800021 eret |
|
;------------------------------------------------------------------------------ |
; Initialize keyboard |
;------------------------------------------------------------------------------ |
FFFFFFFFFFFFB7B0 KeybdInit: |
FFFFFFFFFFFFB7B0 60001450 sb r0,KeybdHead |
FFFFFFFFFFFFB7B4 60001451 sb r0,KeybdTail |
FFFFFFFFFFFFB7B8 E0400001 setlo r1,#1 ; turn on keyboard echo |
FFFFFFFFFFFFB7BC 6000941C sb r1,KeybdEcho |
FFFFFFFFFFFFB7C0 37EF8000 ret |
FFFFFFFFFFFFBBAC KeybdInit: |
FFFFFFFFFFFFBBAC 60001450 sb r0,KeybdHead |
FFFFFFFFFFFFBBB0 60001451 sb r0,KeybdTail |
FFFFFFFFFFFFBBB4 E0400001 setlo r1,#1 ; turn on keyboard echo |
FFFFFFFFFFFFBBB8 6000941C sb r1,KeybdEcho |
FFFFFFFFFFFFBBBC 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Normal keyboard interrupt, the lowest priority interrupt in the system. |
938,77 → 1408,77
; Grab the character from the keyboard device and store it in a buffer. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFB7C4 KeybdIRQ: |
FFFFFFFFFFFFB7C4 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFB7C8 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB7CC 4A009450 lbu r1,KeybdHead |
FFFFFFFFFFFFB7D0 1410800F andi r1,r1,#0x0f ; r1 = index into buffer |
FFFFFFFFFFFFB7D4 KeybdIRQa: |
FFFFFFFFFFFFB7D4 E69C0000 ; SETLO |
FFFFFFFFFFFFB7D8 EE800003 ; SETMID |
FFFFFFFFFFFFB7DC 6A0D0821 inch r2,KEYBD ; get keyboard character |
FFFFFFFFFFFFB7E0 E69C0002 ; SETLO |
FFFFFFFFFFFFB7E4 EE800003 ; SETMID |
FFFFFFFFFFFFB7E8 6A0D0029 outc r0,KEYBD+2 ; clear keyboard strobe (turns off the IRQ) |
FFFFFFFFFFFFB7EC 60111440 sb r2,KeybdBuffer[r1] ; store character in buffer |
FFFFFFFFFFFFB7F0 0A108001 addui r1,r1,#1 ; increment head index |
FFFFFFFFFFFFB7F4 1410800F andi r1,r1,#0x0f |
FFFFFFFFFFFFB7F8 60009450 sb r1,KeybdHead |
FFFFFFFFFFFFB7FC KeybdIRQb: |
FFFFFFFFFFFFB7FC 4A011451 lbu r2,KeybdTail ; check to see if we've collided |
FFFFFFFFFFFFB800 BE110089 bne r1,r2,KeybdIRQc ; with the tail |
FFFFFFFFFFFFB804 0A210001 addui r2,r2,#1 ; if so, increment the tail index |
FFFFFFFFFFFFB808 1421000F andi r2,r2,#0x0f ; the oldest character will be lost |
FFFFFFFFFFFFB80C 60011451 sb r2,KeybdTail |
FFFFFFFFFFFFB810 KeybdIRQc: |
FFFFFFFFFFFFB810 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB814 37EF8008 ret #8 |
FFFFFFFFFFFFBBC0 KeybdIRQ: |
FFFFFFFFFFFFBBC0 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFBBC4 67E10000 sw r2,[sp] |
FFFFFFFFFFFFBBC8 4A009450 lbu r1,KeybdHead |
FFFFFFFFFFFFBBCC 1410800F andi r1,r1,#0x0f ; r1 = index into buffer |
FFFFFFFFFFFFBBD0 KeybdIRQa: |
FFFFFFFFFFFFBBD0 E69C0000 ; SETLO |
FFFFFFFFFFFFBBD4 EE800003 ; SETMID |
FFFFFFFFFFFFBBD8 6A0D0821 inch r2,KEYBD ; get keyboard character |
FFFFFFFFFFFFBBDC E69C0002 ; SETLO |
FFFFFFFFFFFFBBE0 EE800003 ; SETMID |
FFFFFFFFFFFFBBE4 6A0D0029 outc r0,KEYBD+2 ; clear keyboard strobe (turns off the IRQ) |
FFFFFFFFFFFFBBE8 60111440 sb r2,KeybdBuffer[r1] ; store character in buffer |
FFFFFFFFFFFFBBEC 0A108001 addui r1,r1,#1 ; increment head index |
FFFFFFFFFFFFBBF0 1410800F andi r1,r1,#0x0f |
FFFFFFFFFFFFBBF4 60009450 sb r1,KeybdHead |
FFFFFFFFFFFFBBF8 KeybdIRQb: |
FFFFFFFFFFFFBBF8 4A011451 lbu r2,KeybdTail ; check to see if we've collided |
FFFFFFFFFFFFBBFC BE110089 bne r1,r2,KeybdIRQc ; with the tail |
FFFFFFFFFFFFBC00 0A210001 addui r2,r2,#1 ; if so, increment the tail index |
FFFFFFFFFFFFBC04 1421000F andi r2,r2,#0x0f ; the oldest character will be lost |
FFFFFFFFFFFFBC08 60011451 sb r2,KeybdTail |
FFFFFFFFFFFFBC0C KeybdIRQc: |
FFFFFFFFFFFFBC0C 47E10000 lw r2,[sp] |
FFFFFFFFFFFFBC10 37EF8008 ret #8 |
|
;------------------------------------------------------------------------------ |
; r1 0=echo off, non-zero = echo on |
;------------------------------------------------------------------------------ |
FFFFFFFFFFFFB818 SetKeyboardEcho: |
FFFFFFFFFFFFB818 6000941C sb r1,KeybdEcho |
FFFFFFFFFFFFB81C 37EF8000 ret |
FFFFFFFFFFFFBC14 SetKeyboardEcho: |
FFFFFFFFFFFFBC14 6000941C sb r1,KeybdEcho |
FFFFFFFFFFFFBC18 37EF8000 ret |
|
;----------------------------------------- |
; Get character from keyboard buffer |
;----------------------------------------- |
FFFFFFFFFFFFB820 KeybdGetChar: |
FFFFFFFFFFFFB820 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFB824 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB828 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFB82C 4A011451 lbu r2,KeybdTail |
FFFFFFFFFFFFB830 4A009450 lbu r1,KeybdHead |
FFFFFFFFFFFFB834 BE110188 beq r1,r2,nochar |
FFFFFFFFFFFFB838 4A209440 lbu r1,KeybdBuffer[r2] |
FFFFFFFFFFFFB83C 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFB840 1421000F andi r2,r2,#0x0f |
FFFFFFFFFFFFB844 60011451 sb r2,KeybdTail |
FFFFFFFFFFFFB848 4001141C lb r2,KeybdEcho |
FFFFFFFFFFFFB84C BE2000E8 beq r2,r0,kgc3 |
FFFFFFFFFFFFB850 B210030D bnei r1,#CR,kgc2 |
FFFFFFFFFFFFB854 31FFF93F call CRLF ; convert CR keystroke into CRLF |
FFFFFFFFFFFFB858 BE00008A bra kgc3 |
FFFFFFFFFFFFB85C kgc2: |
FFFFFFFFFFFFB85C 31FFEF47 call DisplayChar |
FFFFFFFFFFFFB860 BE00004A bra kgc3 |
FFFFFFFFFFFFB864 nochar: |
FFFFFFFFFFFFB864 E07FFFFF setlo r1,#-1 |
FFFFFFFFFFFFB868 kgc3: |
FFFFFFFFFFFFB868 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFB86C 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB870 37EF8010 ret #16 |
FFFFFFFFFFFFBC1C KeybdGetChar: |
FFFFFFFFFFFFBC1C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFBC20 67E10000 sw r2,[sp] |
FFFFFFFFFFFFBC24 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFBC28 4A011451 lbu r2,KeybdTail |
FFFFFFFFFFFFBC2C 4A009450 lbu r1,KeybdHead |
FFFFFFFFFFFFBC30 BE110188 beq r1,r2,nochar |
FFFFFFFFFFFFBC34 4A209440 lbu r1,KeybdBuffer[r2] |
FFFFFFFFFFFFBC38 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFBC3C 1421000F andi r2,r2,#0x0f |
FFFFFFFFFFFFBC40 60011451 sb r2,KeybdTail |
FFFFFFFFFFFFBC44 4001141C lb r2,KeybdEcho |
FFFFFFFFFFFFBC48 BE2000E8 beq r2,r0,kgc3 |
FFFFFFFFFFFFBC4C B210030D bnei r1,#CR,kgc2 |
FFFFFFFFFFFFBC50 31FFFD80 call CRLF ; convert CR keystroke into CRLF |
FFFFFFFFFFFFBC54 BE00008A bra kgc3 |
FFFFFFFFFFFFBC58 kgc2: |
FFFFFFFFFFFFBC58 31FFF07F call DisplayChar |
FFFFFFFFFFFFBC5C BE00004A bra kgc3 |
FFFFFFFFFFFFBC60 nochar: |
FFFFFFFFFFFFBC60 E07FFFFF setlo r1,#-1 |
FFFFFFFFFFFFBC64 kgc3: |
FFFFFFFFFFFFBC64 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFBC68 47E10000 lw r2,[sp] |
FFFFFFFFFFFFBC6C 37EF8010 ret #16 |
|
;------------------------------------------------------------------------------ |
; Check if there is a keyboard character available in the keyboard buffer. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFB874 KeybdCheckForKey: |
FFFFFFFFFFFFB874 4A009451 lbu r1,KeybdTail |
FFFFFFFFFFFFB878 4A011450 lbu r2,KeybdHead |
FFFFFFFFFFFFB87C 04110439 sne r1,r1,r2 |
FFFFFFFFFFFFB880 37EF8000 ret |
FFFFFFFFFFFFBC70 KeybdCheckForKey: |
FFFFFFFFFFFFBC70 4A009451 lbu r1,KeybdTail |
FFFFFFFFFFFFBC74 4A011450 lbu r2,KeybdHead |
FFFFFFFFFFFFBC78 04110439 sne r1,r1,r2 |
FFFFFFFFFFFFBC7C 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Check if there is a keyboard character available. If so return true (1) |
1015,12 → 1485,12
; otherwise return false (0) in r1. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFB884 KeybdCheckForKeyDirect: |
FFFFFFFFFFFFB884 E69C0000 ; SETLO |
FFFFFFFFFFFFB888 EE800003 ; SETMID |
FFFFFFFFFFFFB88C 6A0D0421 inch r1,KEYBD |
FFFFFFFFFFFFB890 04100430 slt r1,r1,r0 |
FFFFFFFFFFFFB894 37EF8000 ret |
FFFFFFFFFFFFBC80 KeybdCheckForKeyDirect: |
FFFFFFFFFFFFBC80 E69C0000 ; SETLO |
FFFFFFFFFFFFBC84 EE800003 ; SETMID |
FFFFFFFFFFFFBC88 6A0D0421 inch r1,KEYBD |
FFFFFFFFFFFFBC8C 04100430 slt r1,r1,r0 |
FFFFFFFFFFFFBC90 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Get character directly from keyboard. This routine blocks until a key is |
1027,53 → 1497,137
; available. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFB898 KeybdGetCharDirect: |
FFFFFFFFFFFFB898 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFB89C 67E10000 sw r2,[sp] |
FFFFFFFFFFFFB8A0 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFB8A4 E09C0000 setlo r2,KEYBD |
FFFFFFFFFFFFB8A8 kgc1: |
FFFFFFFFFFFFB8A8 E69C0000 ; SETLO |
FFFFFFFFFFFFB8AC EE800003 ; SETMID |
FFFFFFFFFFFFB8B0 6A0D0421 inch r1,KEYBD |
FFFFFFFFFFFFB8B4 BE107FA1 bge r1,r0,kgc1 |
FFFFFFFFFFFFB8B8 E69C0002 ; SETLO |
FFFFFFFFFFFFB8BC EE800003 ; SETMID |
FFFFFFFFFFFFB8C0 6A0D0029 outc r0,KEYBD+2 ; clear keyboard strobe |
FFFFFFFFFFFFB8C4 141080FF andi r1,r1,#0xff ; remove strobe bit |
FFFFFFFFFFFFB8C8 4001141C lb r2,KeybdEcho ; is keyboard echo on ? |
FFFFFFFFFFFFB8CC BE2000A8 beq r2,r0,gk1 |
FFFFFFFFFFFFB8D0 B210030D bnei r1,#'\r',gk2 ; convert CR keystroke into CRLF |
FFFFFFFFFFFFB8D4 31FFF93F call CRLF |
FFFFFFFFFFFFB8D8 BE00004A bra gk1 |
FFFFFFFFFFFFB8DC gk2: |
FFFFFFFFFFFFB8DC 31FFEF47 call DisplayChar |
FFFFFFFFFFFFB8E0 gk1: |
FFFFFFFFFFFFB8E0 47E10000 lw r2,[sp] |
FFFFFFFFFFFFB8E4 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFB8E8 37EF8010 ret #16 |
FFFFFFFFFFFFBC94 KeybdGetCharDirect: |
FFFFFFFFFFFFBC94 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFBC98 67E10000 sw r2,[sp] |
FFFFFFFFFFFFBC9C 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFBCA0 E09C0000 setlo r2,KEYBD |
FFFFFFFFFFFFBCA4 kgc1: |
FFFFFFFFFFFFBCA4 E69C0000 ; SETLO |
FFFFFFFFFFFFBCA8 EE800003 ; SETMID |
FFFFFFFFFFFFBCAC 6A0D0421 inch r1,KEYBD |
FFFFFFFFFFFFBCB0 BE107FA1 bge r1,r0,kgc1 |
FFFFFFFFFFFFBCB4 E69C0002 ; SETLO |
FFFFFFFFFFFFBCB8 EE800003 ; SETMID |
FFFFFFFFFFFFBCBC 6A0D0029 outc r0,KEYBD+2 ; clear keyboard strobe |
FFFFFFFFFFFFBCC0 141080FF andi r1,r1,#0xff ; remove strobe bit |
FFFFFFFFFFFFBCC4 4001141C lb r2,KeybdEcho ; is keyboard echo on ? |
FFFFFFFFFFFFBCC8 BE2000A8 beq r2,r0,gk1 |
FFFFFFFFFFFFBCCC B210030D bnei r1,#'\r',gk2 ; convert CR keystroke into CRLF |
FFFFFFFFFFFFBCD0 31FFFD80 call CRLF |
FFFFFFFFFFFFBCD4 BE00004A bra gk1 |
FFFFFFFFFFFFBCD8 gk2: |
FFFFFFFFFFFFBCD8 31FFF07F call DisplayChar |
FFFFFFFFFFFFBCDC gk1: |
FFFFFFFFFFFFBCDC 47E10000 lw r2,[sp] |
FFFFFFFFFFFFBCE0 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFBCE4 37EF8010 ret #16 |
|
;============================================================================== |
;============================================================================== |
FFFFFFFFFFFFBCE8 tmp_init: |
; wait for the rst1626 to go low |
FFFFFFFFFFFFBCE8 E6989680 ; SETLO |
FFFFFFFFFFFFBCEC EE800002 ; SETMID |
FFFFFFFFFFFFBCF0 040D0809 lw r2,#10000000 ; retry for up to several seconds |
FFFFFFFFFFFFBCF4 tmp_init4: |
FFFFFFFFFFFFBCF4 BE2000C8 beq r2,r0,tmp_init5 |
FFFFFFFFFFFFBCF8 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFBCFC E69C0302 ; SETLO |
FFFFFFFFFFFFBD00 EE800003 ; SETMID |
FFFFFFFFFFFFBD04 6A0D0421 inch r1,TMP+2 ; read the status reg |
FFFFFFFFFFFFBD08 BE107F60 blt r1,r0,tmp_init4 |
FFFFFFFFFFFFBD0C tmp_init5: |
|
FFFFFFFFFFFFBD0C 16008051 lw r1,#0x51 ; Start temperature conversion |
FFFFFFFFFFFFBD10 E69C0300 ; SETLO |
FFFFFFFFFFFFBD14 EE800003 ; SETMID |
FFFFFFFFFFFFBD18 6A0D0429 outc r1,TMP |
|
; wait a bit for the trigger to take effect |
FFFFFFFFFFFFBD1C 160089C4 lw r1,#2500 |
FFFFFFFFFFFFBD20 tmp_init1: |
FFFFFFFFFFFFBD20 BE00800F loop r1,tmp_init1 |
|
; wait for the rst1626 to go low |
FFFFFFFFFFFFBD24 E6989680 ; SETLO |
FFFFFFFFFFFFBD28 EE800002 ; SETMID |
FFFFFFFFFFFFBD2C 040D0809 lw r2,#10000000 ; retry for up to several seconds |
FFFFFFFFFFFFBD30 tmp_init2: |
FFFFFFFFFFFFBD30 BE2000C8 beq r2,r0,tmp_init3 |
FFFFFFFFFFFFBD34 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFBD38 E69C0302 ; SETLO |
FFFFFFFFFFFFBD3C EE800003 ; SETMID |
FFFFFFFFFFFFBD40 6A0D0421 inch r1,TMP+2 ; read the status reg |
FFFFFFFFFFFFBD44 BE107F60 blt r1,r0,tmp_init2 |
FFFFFFFFFFFFBD48 tmp_init3: |
FFFFFFFFFFFFBD48 37EF8000 ret |
|
FFFFFFFFFFFFBD4C tmp_read: |
FFFFFFFFFFFFBD4C 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFBD50 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFBD54 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFBD58 67E10010 sw r2,16[sp] |
|
FFFFFFFFFFFFBD5C E6BD7840 ; SETLO |
FFFFFFFFFFFFBD60 EE800005 ; SETMID |
FFFFFFFFFFFFBD64 040D0409 lw r1,#25000000 ; wait about 1 second or so |
FFFFFFFFFFFFBD68 tmp_read1: |
FFFFFFFFFFFFBD68 BE00800F loop r1,tmp_read1 |
FFFFFFFFFFFFBD6C 160080AC lw r1,#0xAC ; issue read temperature conversion |
FFFFFFFFFFFFBD70 E69C0300 ; SETLO |
FFFFFFFFFFFFBD74 EE800003 ; SETMID |
FFFFFFFFFFFFBD78 6A0D0429 outc r1,TMP |
|
; wait a bit for the trigger to take effect |
FFFFFFFFFFFFBD7C 160089C4 lw r1,#2500 |
FFFFFFFFFFFFBD80 tmp_read3: |
FFFFFFFFFFFFBD80 BE00800F loop r1,tmp_read3 |
|
; wait for the rst1626 to go low |
FFFFFFFFFFFFBD84 E6989680 ; SETLO |
FFFFFFFFFFFFBD88 EE800002 ; SETMID |
FFFFFFFFFFFFBD8C 040D0809 lw r2,#10000000 |
FFFFFFFFFFFFBD90 tmp_read2: |
FFFFFFFFFFFFBD90 E69C0302 ; SETLO |
FFFFFFFFFFFFBD94 EE800003 ; SETMID |
FFFFFFFFFFFFBD98 6A0D0421 inch r1,TMP+2 ; read the status reg |
FFFFFFFFFFFFBD9C BE200068 beq r2,r0,tmp_read4 |
FFFFFFFFFFFFBDA0 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFBDA4 BE107F60 blt r1,r0,tmp_read2 |
FFFFFFFFFFFFBDA8 tmp_read4: |
FFFFFFFFFFFFBDA8 E69C0302 ; SETLO |
FFFFFFFFFFFFBDAC EE800003 ; SETMID |
FFFFFFFFFFFFBDB0 6A0D0421 inch r1,TMP+2 ; read the temperature |
FFFFFFFFFFFFBDB4 16010005 lw r2,#5 ; five digits |
FFFFFFFFFFFFBDB8 31FFF13F call DisplayNum |
FFFFFFFFFFFFBDBC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFBDC0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFBDC4 47E10010 lw r2,16[sp] |
FFFFFFFFFFFFBDC8 37EF8018 ret #24 |
|
;============================================================================== |
;============================================================================== |
;------------------------------------------------------------------------------ |
; 100 Hz interrupt |
; - takes care of "flashing" the cursor |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFB8EC Pulse100: |
FFFFFFFFFFFFB8EC 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFB8F0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFB8F4 E6900000 ; SETLO |
FFFFFFFFFFFFB8F8 EE800003 ; SETMID |
FFFFFFFFFFFFB8FC 6A0D082D lea r2,TEXTSCR |
FFFFFFFFFFFFB900 8220814E inch r1,334[r2] |
FFFFFFFFFFFFB904 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFB908 9220814E outc r1,334[r2] |
FFFFFFFFFFFFB90C 31FFF2D8 call DisplayDatetime |
FFFFFFFFFFFFB910 31FFEE4A call SelectNextToRunTCB |
FFFFFFFFFFFFB914 31FFEE4C call SwitchTask |
FFFFFFFFFFFFB918 E6BF0010 ; SETLO |
FFFFFFFFFFFFB91C 6A0D0010 sb r0,0xFFFF_FFFF_FFFF_0010 ; clear interrupt |
FFFFFFFFFFFFBDCC Pulse100: |
FFFFFFFFFFFFBDCC 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFBDD0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFBDD4 E6900000 ; SETLO |
FFFFFFFFFFFFBDD8 EE800003 ; SETMID |
FFFFFFFFFFFFBDDC 6A0D082D lea r2,TEXTSCR |
FFFFFFFFFFFFBDE0 8220814E inch r1,334[r2] |
FFFFFFFFFFFFBDE4 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFBDE8 9220814E outc r1,334[r2] |
; call DisplayDatetime |
FFFFFFFFFFFFBDEC 31FFEF82 call SelectNextToRunTCB |
FFFFFFFFFFFFBDF0 31FFEF84 call SwitchTask |
FFFFFFFFFFFFBDF4 E69CFFFC ; SETLO |
FFFFFFFFFFFFBDF8 EE800003 ; SETMID |
FFFFFFFFFFFFBDFC 6A0D0028 outb r0,0xDCFFFC ; clear interrupt |
; lw r1,TickIRQAddr |
; jal r31,[r1] |
; lw r1,Milliseconds |
1080,183 → 1634,183
; andi r1,r1,#0x0f |
; bnei r1,#5,p1001 |
; call FlashCursor |
FFFFFFFFFFFFB920 p1001: |
FFFFFFFFFFFFB920 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFB924 37EF8008 ret #8 |
FFFFFFFFFFFFBE00 p1001: |
FFFFFFFFFFFFBE00 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFBE04 37EF8008 ret #8 |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
FFFFFFFFFFFFB928 SelectNextToRunTCB: |
FFFFFFFFFFFFB928 620020A8 sc r0,NextToRunTCB |
FFFFFFFFFFFFB92C 37EF8000 ret |
FFFFFFFFFFFFBE08 SelectNextToRunTCB: |
FFFFFFFFFFFFBE08 620020A8 sc r0,NextToRunTCB |
FFFFFFFFFFFFBE0C 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Switch from the RunningTCB to the NextToRunTCB |
;------------------------------------------------------------------------------ |
FFFFFFFFFFFFB930 SwitchTask: |
FFFFFFFFFFFFB930 6600A0B0 sw r1,r1save |
FFFFFFFFFFFFB934 660120B8 sw r2,r2save |
FFFFFFFFFFFFB938 4C00A0A8 lcu r1,NextToRunTCB |
FFFFFFFFFFFFB93C 4C0120A6 lcu r2,RunningTCB |
FFFFFFFFFFFFB940 BE110089 bne r1,r2,swtsk1 ; are we already running this TCB ? |
FFFFFFFFFFFFB944 4600A0B0 lw r1,r1save |
FFFFFFFFFFFFB948 460120B8 lw r2,r2save |
FFFFFFFFFFFFB94C 37EF8000 ret |
FFFFFFFFFFFFB950 swtsk1: |
FFFFFFFFFFFFB950 142101FF andi r2,r2,#0x1ff ; max 512 TCB's |
FFFFFFFFFFFFB954 1A210200 mului r2,r2,#TCBSize |
FFFFFFFFFFFFB958 E6800000 ; SETLO |
FFFFFFFFFFFFB95C EE800400 ; SETMID |
FFFFFFFFFFFFB960 042D0803 addui r2,r2,#TCBBase |
FFFFFFFFFFFFB964 4600A0B0 lw r1,r1save ; get back r1 |
FFFFFFFFFFFFB968 66208000 sw r1,TCBr1[r2] |
FFFFFFFFFFFFB96C 4600A0B8 lw r1,r2save ; get back r2 |
FFFFFFFFFFFFB970 66208008 sw r1,TCBr2[r2] |
FFFFFFFFFFFFB974 66218010 sw r3,TCBr3[r2] |
FFFFFFFFFFFFB978 66220018 sw r4,TCBr4[r2] |
FFFFFFFFFFFFB97C 66228020 sw r5,TCBr5[r2] |
FFFFFFFFFFFFB980 66230028 sw r6,TCBr6[r2] |
FFFFFFFFFFFFB984 66238030 sw r7,TCBr7[r2] |
FFFFFFFFFFFFB988 66240038 sw r8,TCBr8[r2] |
FFFFFFFFFFFFB98C 66248040 sw r9,TCBr9[r2] |
FFFFFFFFFFFFB990 66250048 sw r10,TCBr10[r2] |
FFFFFFFFFFFFB994 66258050 sw r11,TCBr11[r2] |
FFFFFFFFFFFFB998 66260058 sw r12,TCBr12[r2] |
FFFFFFFFFFFFB99C 66268060 sw r13,TCBr13[r2] |
FFFFFFFFFFFFB9A0 66270068 sw r14,TCBr14[r2] |
FFFFFFFFFFFFB9A4 66278070 sw r15,TCBr15[r2] |
FFFFFFFFFFFFB9A8 66280078 sw r16,TCBr16[r2] |
FFFFFFFFFFFFB9AC 66288080 sw r17,TCBr17[r2] |
FFFFFFFFFFFFB9B0 66290088 sw r18,TCBr18[r2] |
FFFFFFFFFFFFB9B4 66298090 sw r19,TCBr19[r2] |
FFFFFFFFFFFFB9B8 662A0098 sw r20,TCBr20[r2] |
FFFFFFFFFFFFB9BC 662A80A0 sw r21,TCBr21[r2] |
FFFFFFFFFFFFB9C0 662B00A8 sw r22,TCBr22[r2] |
FFFFFFFFFFFFB9C4 662B80B0 sw r23,TCBr23[r2] |
FFFFFFFFFFFFB9C8 662C00B8 sw r24,TCBr24[r2] |
FFFFFFFFFFFFB9CC 662C80C0 sw r25,TCBr25[r2] |
FFFFFFFFFFFFB9D0 662D00C8 sw r26,TCBr26[r2] |
FFFFFFFFFFFFB9D4 662D80D0 sw r27,TCBr27[r2] |
FFFFFFFFFFFFB9D8 662E00D8 sw r28,TCBr28[r2] |
FFFFFFFFFFFFB9DC 662E80E0 sw r29,TCBr29[r2] |
FFFFFFFFFFFFB9E0 662F00E8 sw r30,TCBr30[r2] |
FFFFFFFFFFFFB9E4 662F80F0 sw r31,TCBr31[r2] |
FFFFFFFFFFFFBE10 SwitchTask: |
FFFFFFFFFFFFBE10 6600A0B0 sw r1,r1save |
FFFFFFFFFFFFBE14 660120B8 sw r2,r2save |
FFFFFFFFFFFFBE18 4C00A0A8 lcu r1,NextToRunTCB |
FFFFFFFFFFFFBE1C 4C0120A6 lcu r2,RunningTCB |
FFFFFFFFFFFFBE20 BE110089 bne r1,r2,swtsk1 ; are we already running this TCB ? |
FFFFFFFFFFFFBE24 4600A0B0 lw r1,r1save |
FFFFFFFFFFFFBE28 460120B8 lw r2,r2save |
FFFFFFFFFFFFBE2C 37EF8000 ret |
FFFFFFFFFFFFBE30 swtsk1: |
FFFFFFFFFFFFBE30 142101FF andi r2,r2,#0x1ff ; max 512 TCB's |
FFFFFFFFFFFFBE34 1A210200 mului r2,r2,#TCBSize |
FFFFFFFFFFFFBE38 E6800000 ; SETLO |
FFFFFFFFFFFFBE3C EE800400 ; SETMID |
FFFFFFFFFFFFBE40 042D0803 addui r2,r2,#TCBBase |
FFFFFFFFFFFFBE44 4600A0B0 lw r1,r1save ; get back r1 |
FFFFFFFFFFFFBE48 66208000 sw r1,TCBr1[r2] |
FFFFFFFFFFFFBE4C 4600A0B8 lw r1,r2save ; get back r2 |
FFFFFFFFFFFFBE50 66208008 sw r1,TCBr2[r2] |
FFFFFFFFFFFFBE54 66218010 sw r3,TCBr3[r2] |
FFFFFFFFFFFFBE58 66220018 sw r4,TCBr4[r2] |
FFFFFFFFFFFFBE5C 66228020 sw r5,TCBr5[r2] |
FFFFFFFFFFFFBE60 66230028 sw r6,TCBr6[r2] |
FFFFFFFFFFFFBE64 66238030 sw r7,TCBr7[r2] |
FFFFFFFFFFFFBE68 66240038 sw r8,TCBr8[r2] |
FFFFFFFFFFFFBE6C 66248040 sw r9,TCBr9[r2] |
FFFFFFFFFFFFBE70 66250048 sw r10,TCBr10[r2] |
FFFFFFFFFFFFBE74 66258050 sw r11,TCBr11[r2] |
FFFFFFFFFFFFBE78 66260058 sw r12,TCBr12[r2] |
FFFFFFFFFFFFBE7C 66268060 sw r13,TCBr13[r2] |
FFFFFFFFFFFFBE80 66270068 sw r14,TCBr14[r2] |
FFFFFFFFFFFFBE84 66278070 sw r15,TCBr15[r2] |
FFFFFFFFFFFFBE88 66280078 sw r16,TCBr16[r2] |
FFFFFFFFFFFFBE8C 66288080 sw r17,TCBr17[r2] |
FFFFFFFFFFFFBE90 66290088 sw r18,TCBr18[r2] |
FFFFFFFFFFFFBE94 66298090 sw r19,TCBr19[r2] |
FFFFFFFFFFFFBE98 662A0098 sw r20,TCBr20[r2] |
FFFFFFFFFFFFBE9C 662A80A0 sw r21,TCBr21[r2] |
FFFFFFFFFFFFBEA0 662B00A8 sw r22,TCBr22[r2] |
FFFFFFFFFFFFBEA4 662B80B0 sw r23,TCBr23[r2] |
FFFFFFFFFFFFBEA8 662C00B8 sw r24,TCBr24[r2] |
FFFFFFFFFFFFBEAC 662C80C0 sw r25,TCBr25[r2] |
FFFFFFFFFFFFBEB0 662D00C8 sw r26,TCBr26[r2] |
FFFFFFFFFFFFBEB4 662D80D0 sw r27,TCBr27[r2] |
FFFFFFFFFFFFBEB8 662E00D8 sw r28,TCBr28[r2] |
FFFFFFFFFFFFBEBC 662E80E0 sw r29,TCBr29[r2] |
FFFFFFFFFFFFBEC0 662F00E8 sw r30,TCBr30[r2] |
FFFFFFFFFFFFBEC4 662F80F0 sw r31,TCBr31[r2] |
|
FFFFFFFFFFFFB9E8 4C0120A8 lcu r2,NextToRunTCB |
FFFFFFFFFFFFB9EC 620120A6 sc r2,RunningTCB |
FFFFFFFFFFFFB9F0 1A210200 mului r2,r2,#TCBSize |
FFFFFFFFFFFFB9F4 E6800000 ; SETLO |
FFFFFFFFFFFFB9F8 EE800400 ; SETMID |
FFFFFFFFFFFFB9FC 042D0803 addui r2,r2,#TCBBase |
FFFFFFFFFFFFBEC8 4C0120A8 lcu r2,NextToRunTCB |
FFFFFFFFFFFFBECC 620120A6 sc r2,RunningTCB |
FFFFFFFFFFFFBED0 1A210200 mului r2,r2,#TCBSize |
FFFFFFFFFFFFBED4 E6800000 ; SETLO |
FFFFFFFFFFFFBED8 EE800400 ; SETMID |
FFFFFFFFFFFFBEDC 042D0803 addui r2,r2,#TCBBase |
|
FFFFFFFFFFFFBA00 46208000 lw r1,TCBr1[r2] |
FFFFFFFFFFFFBA04 46218010 lw r3,TCBr3[r2] |
FFFFFFFFFFFFBA08 46220018 lw r4,TCBr4[r2] |
FFFFFFFFFFFFBA0C 46228020 lw r5,TCBr5[r2] |
FFFFFFFFFFFFBA10 46230028 lw r6,TCBr6[r2] |
FFFFFFFFFFFFBA14 46238030 lw r7,TCBr7[r2] |
FFFFFFFFFFFFBA18 46240038 lw r8,TCBr8[r2] |
FFFFFFFFFFFFBA1C 46248040 lw r9,TCBr9[r2] |
FFFFFFFFFFFFBA20 46250048 lw r10,TCBr10[r2] |
FFFFFFFFFFFFBA24 46258050 lw r11,TCBr11[r2] |
FFFFFFFFFFFFBA28 46260058 lw r12,TCBr12[r2] |
FFFFFFFFFFFFBA2C 46268060 lw r13,TCBr13[r2] |
FFFFFFFFFFFFBA30 46270068 lw r14,TCBr14[r2] |
FFFFFFFFFFFFBA34 46278070 lw r15,TCBr15[r2] |
FFFFFFFFFFFFBA38 46280078 lw r16,TCBr16[r2] |
FFFFFFFFFFFFBA3C 46288080 lw r17,TCBr17[r2] |
FFFFFFFFFFFFBA40 46290088 lw r18,TCBr18[r2] |
FFFFFFFFFFFFBA44 46298090 lw r19,TCBr19[r2] |
FFFFFFFFFFFFBA48 462A0098 lw r20,TCBr20[r2] |
FFFFFFFFFFFFBA4C 462A80A0 lw r21,TCBr21[r2] |
FFFFFFFFFFFFBA50 462B00A8 lw r22,TCBr22[r2] |
FFFFFFFFFFFFBA54 462B80B0 lw r23,TCBr23[r2] |
FFFFFFFFFFFFBA58 462C00B8 lw r24,TCBr24[r2] |
FFFFFFFFFFFFBA5C 462C80C0 lw r25,TCBr25[r2] |
FFFFFFFFFFFFBA60 462D00C8 lw r26,TCBr26[r2] |
FFFFFFFFFFFFBA64 462D80D0 lw r27,TCBr27[r2] |
FFFFFFFFFFFFBA68 462E00D8 lw r28,TCBr28[r2] |
FFFFFFFFFFFFBA6C 462E80E0 lw r29,TCBr29[r2] |
FFFFFFFFFFFFBA70 462F00E8 lw r30,TCBr30[r2] |
FFFFFFFFFFFFBA74 462F80F0 lw r31,TCBr31[r2] |
FFFFFFFFFFFFBA78 46210008 lw r2,TCBr2[r2] |
FFFFFFFFFFFFBA7C 37EF8000 ret |
FFFFFFFFFFFFBEE0 46208000 lw r1,TCBr1[r2] |
FFFFFFFFFFFFBEE4 46218010 lw r3,TCBr3[r2] |
FFFFFFFFFFFFBEE8 46220018 lw r4,TCBr4[r2] |
FFFFFFFFFFFFBEEC 46228020 lw r5,TCBr5[r2] |
FFFFFFFFFFFFBEF0 46230028 lw r6,TCBr6[r2] |
FFFFFFFFFFFFBEF4 46238030 lw r7,TCBr7[r2] |
FFFFFFFFFFFFBEF8 46240038 lw r8,TCBr8[r2] |
FFFFFFFFFFFFBEFC 46248040 lw r9,TCBr9[r2] |
FFFFFFFFFFFFBF00 46250048 lw r10,TCBr10[r2] |
FFFFFFFFFFFFBF04 46258050 lw r11,TCBr11[r2] |
FFFFFFFFFFFFBF08 46260058 lw r12,TCBr12[r2] |
FFFFFFFFFFFFBF0C 46268060 lw r13,TCBr13[r2] |
FFFFFFFFFFFFBF10 46270068 lw r14,TCBr14[r2] |
FFFFFFFFFFFFBF14 46278070 lw r15,TCBr15[r2] |
FFFFFFFFFFFFBF18 46280078 lw r16,TCBr16[r2] |
FFFFFFFFFFFFBF1C 46288080 lw r17,TCBr17[r2] |
FFFFFFFFFFFFBF20 46290088 lw r18,TCBr18[r2] |
FFFFFFFFFFFFBF24 46298090 lw r19,TCBr19[r2] |
FFFFFFFFFFFFBF28 462A0098 lw r20,TCBr20[r2] |
FFFFFFFFFFFFBF2C 462A80A0 lw r21,TCBr21[r2] |
FFFFFFFFFFFFBF30 462B00A8 lw r22,TCBr22[r2] |
FFFFFFFFFFFFBF34 462B80B0 lw r23,TCBr23[r2] |
FFFFFFFFFFFFBF38 462C00B8 lw r24,TCBr24[r2] |
FFFFFFFFFFFFBF3C 462C80C0 lw r25,TCBr25[r2] |
FFFFFFFFFFFFBF40 462D00C8 lw r26,TCBr26[r2] |
FFFFFFFFFFFFBF44 462D80D0 lw r27,TCBr27[r2] |
FFFFFFFFFFFFBF48 462E00D8 lw r28,TCBr28[r2] |
FFFFFFFFFFFFBF4C 462E80E0 lw r29,TCBr29[r2] |
FFFFFFFFFFFFBF50 462F00E8 lw r30,TCBr30[r2] |
FFFFFFFFFFFFBF54 462F80F0 lw r31,TCBr31[r2] |
FFFFFFFFFFFFBF58 46210008 lw r2,TCBr2[r2] |
FFFFFFFFFFFFBF5C 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Flash Cursor |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBA80 FlashCursor: |
FFFFFFFFFFFFBA80 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBA84 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBA88 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBA8C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBA90 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBA94 31FFEF37 call CalcScreenLoc |
FFFFFFFFFFFFBA98 E6810000 ; SETLO |
FFFFFFFFFFFFBA9C 041D0403 addui r1,r1,#0x10000 |
FFFFFFFFFFFFBAA0 4001141A lb r2,CursorFlash |
FFFFFFFFFFFFBAA4 BE2001C8 beq r2,r0,flshcrsr2 |
FFFFFFFFFFFFBF60 FlashCursor: |
FFFFFFFFFFFFBF60 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBF64 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBF68 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBF6C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBF70 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBF74 31FFF06F call CalcScreenLoc |
FFFFFFFFFFFFBF78 E6810000 ; SETLO |
FFFFFFFFFFFFBF7C 041D0403 addui r1,r1,#0x10000 |
FFFFFFFFFFFFBF80 4001141A lb r2,CursorFlash |
FFFFFFFFFFFFBF84 BE2001C8 beq r2,r0,flshcrsr2 |
; causes screen colors to flip around |
FFFFFFFFFFFFBAA8 82110000 inch r2,[r1] |
FFFFFFFFFFFFBAAC 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFBAB0 92110000 outc r2,[r1] |
FFFFFFFFFFFFBAB4 flshcrsr3: |
FFFFFFFFFFFFBAB4 46011408 lw r2,Lastloc |
FFFFFFFFFFFFBAB8 BE110088 beq r1,r2,flshcrsr1 |
FFFFFFFFFFFFBF88 82110000 inch r2,[r1] |
FFFFFFFFFFFFBF8C 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFBF90 92110000 outc r2,[r1] |
FFFFFFFFFFFFBF94 flshcrsr3: |
FFFFFFFFFFFFBF94 46011408 lw r2,Lastloc |
FFFFFFFFFFFFBF98 BE110088 beq r1,r2,flshcrsr1 |
; restore the screen colors of the previous cursor location |
FFFFFFFFFFFFBABC 42019414 lc r3,ScreenColor |
FFFFFFFFFFFFBAC0 92218000 outc r3,[r2] |
FFFFFFFFFFFFBAC4 66009408 sw r1,Lastloc |
FFFFFFFFFFFFBAC8 flshcrsr1: |
FFFFFFFFFFFFBAC8 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBACC 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBAD0 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBAD4 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFBAD8 37EF8020 ret #32 |
FFFFFFFFFFFFBADC flshcrsr2: |
FFFFFFFFFFFFBADC 42019414 lc r3,ScreenColor |
FFFFFFFFFFFFBAE0 92118000 outc r3,[r1] |
FFFFFFFFFFFFBAE4 BE007E8A bra flshcrsr3 |
FFFFFFFFFFFFBF9C 42019414 lc r3,ScreenColor |
FFFFFFFFFFFFBFA0 92218000 outc r3,[r2] |
FFFFFFFFFFFFBFA4 66009408 sw r1,Lastloc |
FFFFFFFFFFFFBFA8 flshcrsr1: |
FFFFFFFFFFFFBFA8 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBFAC 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBFB0 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBFB4 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFBFB8 37EF8020 ret #32 |
FFFFFFFFFFFFBFBC flshcrsr2: |
FFFFFFFFFFFFBFBC 42019414 lc r3,ScreenColor |
FFFFFFFFFFFFBFC0 92118000 outc r3,[r1] |
FFFFFFFFFFFFBFC4 BE007E8A bra flshcrsr3 |
|
FFFFFFFFFFFFBAE8 CursorOff: |
FFFFFFFFFFFFBAE8 160080A0 lw r1,#0xA0 |
FFFFFFFFFFFFBAEC E69A0010 ; SETLO |
FFFFFFFFFFFFBAF0 EE800003 ; SETMID |
FFFFFFFFFFFFBAF4 6A0D0429 outc r1,TEXTREG+16 ; turn off cursor |
FFFFFFFFFFFFBAF8 37EF8000 ret |
FFFFFFFFFFFFBAFC CursorOn: |
FFFFFFFFFFFFBAFC 160080E0 lw r1,#0xE0 |
FFFFFFFFFFFFBB00 E69A0010 ; SETLO |
FFFFFFFFFFFFBB04 EE800003 ; SETMID |
FFFFFFFFFFFFBB08 6A0D0429 outc r1,TEXTREG+16 ; turn on cursor |
FFFFFFFFFFFFBB0C 37EF8000 ret |
FFFFFFFFFFFFBFC8 CursorOff: |
FFFFFFFFFFFFBFC8 160080A0 lw r1,#0xA0 |
FFFFFFFFFFFFBFCC E69A0010 ; SETLO |
FFFFFFFFFFFFBFD0 EE800003 ; SETMID |
FFFFFFFFFFFFBFD4 6A0D0429 outc r1,TEXTREG+16 ; turn off cursor |
FFFFFFFFFFFFBFD8 37EF8000 ret |
FFFFFFFFFFFFBFDC CursorOn: |
FFFFFFFFFFFFBFDC 160080E0 lw r1,#0xE0 |
FFFFFFFFFFFFBFE0 E69A0010 ; SETLO |
FFFFFFFFFFFFBFE4 EE800003 ; SETMID |
FFFFFFFFFFFFBFE8 6A0D0429 outc r1,TEXTREG+16 ; turn on cursor |
FFFFFFFFFFFFBFEC 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
FFFFFFFFFFFFBB10 ClearBmpScreen: |
FFFFFFFFFFFFBB10 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFBB14 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBB18 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBB1C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBB20 E68FFC00 ; SETLO |
FFFFFFFFFFFFBB24 040D0809 lw r2,#1364*768 |
FFFFFFFFFFFFBB28 06210601 shrui r2,r2,#3 ; r2 = # words to clear |
FFFFFFFFFFFFBB2C E6A92929 ; SETLO |
FFFFFFFFFFFFBB30 EEA4A4A4 ; SETMID |
FFFFFFFFFFFFBB34 F6829292 ; SETHI |
FFFFFFFFFFFFBB38 6A0D042D lea r1,0x2929292929292929 ; r1 = color for eight pixels |
FFFFFFFFFFFFBB3C E6A00000 ; SETLO |
FFFFFFFFFFFFBB40 EE800400 ; SETMID |
FFFFFFFFFFFFBB44 6A0D0C2D lea r3,BITMAPSCR ; r3 = screen address |
FFFFFFFFFFFFBB48 csj4: |
FFFFFFFFFFFFBB48 66308000 sw r1,[r3] ; store pixel data |
FFFFFFFFFFFFBB4C 0A318008 addui r3,r3,#8 ; advance screen address by eight |
FFFFFFFFFFFFBB50 BE017FCF loop r2,csj4 ; decrement pixel count and loop back |
FFFFFFFFFFFFBB54 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBB58 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBB5C 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBB60 37EF8018 ret #24 |
FFFFFFFFFFFFBFF0 ClearBmpScreen: |
FFFFFFFFFFFFBFF0 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFBFF4 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBFF8 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBFFC 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC000 E68FFC00 ; SETLO |
FFFFFFFFFFFFC004 040D0809 lw r2,#1364*768 |
FFFFFFFFFFFFC008 06210601 shrui r2,r2,#3 ; r2 = # words to clear |
FFFFFFFFFFFFC00C E6A92929 ; SETLO |
FFFFFFFFFFFFC010 EEA4A4A4 ; SETMID |
FFFFFFFFFFFFC014 F6829292 ; SETHI |
FFFFFFFFFFFFC018 6A0D042D lea r1,0x2929292929292929 ; r1 = color for eight pixels |
FFFFFFFFFFFFC01C E6A00000 ; SETLO |
FFFFFFFFFFFFC020 EE800400 ; SETMID |
FFFFFFFFFFFFC024 6A0D0C2D lea r3,BITMAPSCR ; r3 = screen address |
FFFFFFFFFFFFC028 csj4: |
FFFFFFFFFFFFC028 66308000 sw r1,[r3] ; store pixel data |
FFFFFFFFFFFFC02C 0A318008 addui r3,r3,#8 ; advance screen address by eight |
FFFFFFFFFFFFC030 BE017FCF loop r2,csj4 ; decrement pixel count and loop back |
FFFFFFFFFFFFC034 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC038 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC03C 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC040 37EF8018 ret #24 |
|
;------------------------------------------------------------------------------ |
; Clear the screen and the screen color memory |
1264,77 → 1818,77
; is working at all. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBB64 ClearScreen: |
FFFFFFFFFFFFBB64 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFBB68 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBB6C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBB70 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBB74 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFBB78 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFBB7C E69A0000 ; SETLO |
FFFFFFFFFFFFBB80 EE800003 ; SETMID |
FFFFFFFFFFFFBB84 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFBB88 82308000 inch r1,TEXT_COLS[r3] ; calc number to clear |
FFFFFFFFFFFFBB8C 82310002 inch r2,TEXT_ROWS[r3] |
FFFFFFFFFFFFBB90 04110818 mulu r2,r1,r2 ; r2 = # chars to clear |
FFFFFFFFFFFFBB94 E0400020 setlo r1,#32 ; space char |
FFFFFFFFFFFFBB98 42021414 lc r4,ScreenColor |
FFFFFFFFFFFFBB9C 31FFEF2B call AsciiToScreen |
FFFFFFFFFFFFBBA0 E6900000 ; SETLO |
FFFFFFFFFFFFBBA4 EE800003 ; SETMID |
FFFFFFFFFFFFBBA8 6A0D0C2D lea r3,TEXTSCR ; text screen address |
FFFFFFFFFFFFBBAC csj4: |
FFFFFFFFFFFFBBAC 92308000 outc r1,[r3] |
FFFFFFFFFFFFBBB0 E6810000 ; SETLO |
FFFFFFFFFFFFBBB4 6A3D1029 outc r4,0x10000[r3] ; color screen is 0x10000 higher |
FFFFFFFFFFFFBBB8 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFBBBC BE017F8F loop r2,csj4 |
FFFFFFFFFFFFBBC0 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFBBC4 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFBBC8 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBBCC 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBBD0 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBBD4 37EF8028 ret #40 |
FFFFFFFFFFFFC044 ClearScreen: |
FFFFFFFFFFFFC044 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFC048 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC04C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC050 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC054 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFC058 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFC05C E69A0000 ; SETLO |
FFFFFFFFFFFFC060 EE800003 ; SETMID |
FFFFFFFFFFFFC064 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFC068 82308000 inch r1,TEXT_COLS[r3] ; calc number to clear |
FFFFFFFFFFFFC06C 82310002 inch r2,TEXT_ROWS[r3] |
FFFFFFFFFFFFC070 04110818 mulu r2,r1,r2 ; r2 = # chars to clear |
FFFFFFFFFFFFC074 E0400020 setlo r1,#32 ; space char |
FFFFFFFFFFFFC078 42021414 lc r4,ScreenColor |
FFFFFFFFFFFFC07C 31FFF063 call AsciiToScreen |
FFFFFFFFFFFFC080 E6900000 ; SETLO |
FFFFFFFFFFFFC084 EE800003 ; SETMID |
FFFFFFFFFFFFC088 6A0D0C2D lea r3,TEXTSCR ; text screen address |
FFFFFFFFFFFFC08C csj4: |
FFFFFFFFFFFFC08C 92308000 outc r1,[r3] |
FFFFFFFFFFFFC090 E6810000 ; SETLO |
FFFFFFFFFFFFC094 6A3D1029 outc r4,0x10000[r3] ; color screen is 0x10000 higher |
FFFFFFFFFFFFC098 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC09C BE017F8F loop r2,csj4 |
FFFFFFFFFFFFC0A0 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFC0A4 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFC0A8 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC0AC 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC0B0 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC0B4 37EF8028 ret #40 |
|
;------------------------------------------------------------------------------ |
; Scroll text on the screen upwards |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBBD8 ScrollUp: |
FFFFFFFFFFFFBBD8 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFBBDC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBBE0 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBBE4 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBBE8 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFBBEC 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFBBF0 E69A0000 ; SETLO |
FFFFFFFFFFFFBBF4 EE800003 ; SETMID |
FFFFFFFFFFFFBBF8 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFBBFC 82308000 inch r1,TEXT_COLS[r3] ; r1 = # text columns |
FFFFFFFFFFFFBC00 82310002 inch r2,TEXT_ROWS[r3] |
FFFFFFFFFFFFBC04 04110818 mulu r2,r1,r2 ; calc number of chars to scroll |
FFFFFFFFFFFFBC08 04208805 subu r2,r2,r1 ; one less row |
FFFFFFFFFFFFBC0C E6900000 ; SETLO |
FFFFFFFFFFFFBC10 EE800003 ; SETMID |
FFFFFFFFFFFFBC14 6A0D0C2D lea r3,TEXTSCR |
FFFFFFFFFFFFBC18 scrup1: |
FFFFFFFFFFFFBC18 6A309021 inch r4,[r3+r1] ; indexed addressing example |
FFFFFFFFFFFFBC1C 92320000 outc r4,[r3] |
FFFFFFFFFFFFBC20 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFBC24 BE017FAF loop r2,scrup1 |
FFFFFFFFFFFFC0B8 ScrollUp: |
FFFFFFFFFFFFC0B8 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFC0BC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC0C0 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC0C4 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC0C8 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFC0CC 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFC0D0 E69A0000 ; SETLO |
FFFFFFFFFFFFC0D4 EE800003 ; SETMID |
FFFFFFFFFFFFC0D8 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFC0DC 82308000 inch r1,TEXT_COLS[r3] ; r1 = # text columns |
FFFFFFFFFFFFC0E0 82310002 inch r2,TEXT_ROWS[r3] |
FFFFFFFFFFFFC0E4 04110818 mulu r2,r1,r2 ; calc number of chars to scroll |
FFFFFFFFFFFFC0E8 04208805 subu r2,r2,r1 ; one less row |
FFFFFFFFFFFFC0EC E6900000 ; SETLO |
FFFFFFFFFFFFC0F0 EE800003 ; SETMID |
FFFFFFFFFFFFC0F4 6A0D0C2D lea r3,TEXTSCR |
FFFFFFFFFFFFC0F8 scrup1: |
FFFFFFFFFFFFC0F8 6A309121 inch r4,[r3+r1*2] ; indexed addressing example |
FFFFFFFFFFFFC0FC 92320000 outc r4,[r3] |
FFFFFFFFFFFFC100 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC104 BE017FAF loop r2,scrup1 |
|
FFFFFFFFFFFFBC28 E69A0000 ; SETLO |
FFFFFFFFFFFFBC2C EE800003 ; SETMID |
FFFFFFFFFFFFBC30 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFBC34 82308002 inch r1,TEXT_ROWS[r3] |
FFFFFFFFFFFFBC38 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFBC3C 31FFEF16 call BlankLine |
FFFFFFFFFFFFBC40 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBC44 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBC48 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBC4C 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFBC50 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFBC54 37EF8028 ret #40 |
FFFFFFFFFFFFC108 E69A0000 ; SETLO |
FFFFFFFFFFFFC10C EE800003 ; SETMID |
FFFFFFFFFFFFC110 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFC114 82308002 inch r1,TEXT_ROWS[r3] |
FFFFFFFFFFFFC118 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFC11C 31FFF04E call BlankLine |
FFFFFFFFFFFFC120 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC124 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC128 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC12C 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFC130 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFC134 37EF8028 ret #40 |
|
;------------------------------------------------------------------------------ |
; Blank out a line on the display |
1341,55 → 1895,55
; line number to blank is in r1 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBC58 BlankLine: |
FFFFFFFFFFFFBC58 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFBC5C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBC60 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBC64 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBC68 E69A0000 ; SETLO |
FFFFFFFFFFFFBC6C EE800003 ; SETMID |
FFFFFFFFFFFFBC70 6A0D0C2D lea r3,TEXTREG ; r3 = text register address |
FFFFFFFFFFFFBC74 82310000 inch r2,TEXT_COLS[r3] ; r2 = # chars to blank out |
FFFFFFFFFFFFBC78 04208C18 mulu r3,r2,r1 |
FFFFFFFFFFFFBC7C 06318200 shli r3,r3,#1 |
FFFFFFFFFFFFBC80 E6900000 ; SETLO |
FFFFFFFFFFFFBC84 EE800003 ; SETMID |
FFFFFFFFFFFFBC88 043D0C03 addui r3,r3,#TEXTSCR ; r3 = screen address |
FFFFFFFFFFFFBC8C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFBC90 blnkln1: |
FFFFFFFFFFFFBC90 92308000 outc r1,[r3] |
FFFFFFFFFFFFBC94 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFBC98 BE017FCF loop r2,blnkln1 |
FFFFFFFFFFFFBC9C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBCA0 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBCA4 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBCA8 37EF8018 ret #24 |
FFFFFFFFFFFFC138 BlankLine: |
FFFFFFFFFFFFC138 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC13C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC140 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC144 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC148 E69A0000 ; SETLO |
FFFFFFFFFFFFC14C EE800003 ; SETMID |
FFFFFFFFFFFFC150 6A0D0C2D lea r3,TEXTREG ; r3 = text register address |
FFFFFFFFFFFFC154 82310000 inch r2,TEXT_COLS[r3] ; r2 = # chars to blank out |
FFFFFFFFFFFFC158 04208C18 mulu r3,r2,r1 |
FFFFFFFFFFFFC15C 06318200 shli r3,r3,#1 |
FFFFFFFFFFFFC160 E6900000 ; SETLO |
FFFFFFFFFFFFC164 EE800003 ; SETMID |
FFFFFFFFFFFFC168 043D0C03 addui r3,r3,#TEXTSCR ; r3 = screen address |
FFFFFFFFFFFFC16C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFC170 blnkln1: |
FFFFFFFFFFFFC170 92308000 outc r1,[r3] |
FFFFFFFFFFFFC174 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC178 BE017FCF loop r2,blnkln1 |
FFFFFFFFFFFFC17C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC180 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC184 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC188 37EF8018 ret #24 |
|
;------------------------------------------------------------------------------ |
; Convert ASCII character to screen display character. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBCAC AsciiToScreen: |
FFFFFFFFFFFFBCAC 141080FF andi r1,r1,#0x00ff |
FFFFFFFFFFFFBCB0 A8100541 bltui r1,#'A',atoscr1 |
FFFFFFFFFFFFBCB4 AC10045A bleui r1,#'Z',atoscr1 |
FFFFFFFFFFFFBCB8 AE10037A bgtui r1,#'z',atoscr1 |
FFFFFFFFFFFFBCBC A8100261 bltui r1,#'a',atoscr1 |
FFFFFFFFFFFFBCC0 0C108060 subi r1,r1,#0x60 |
FFFFFFFFFFFFBCC4 atoscr1: |
FFFFFFFFFFFFBCC4 16108100 ori r1,r1,#0x100 |
FFFFFFFFFFFFBCC8 37EF8000 ret |
FFFFFFFFFFFFC18C AsciiToScreen: |
FFFFFFFFFFFFC18C 141080FF andi r1,r1,#0x00ff |
FFFFFFFFFFFFC190 A8100541 bltui r1,#'A',atoscr1 |
FFFFFFFFFFFFC194 AC10045A bleui r1,#'Z',atoscr1 |
FFFFFFFFFFFFC198 AE10037A bgtui r1,#'z',atoscr1 |
FFFFFFFFFFFFC19C A8100261 bltui r1,#'a',atoscr1 |
FFFFFFFFFFFFC1A0 0E108060 subui r1,r1,#0x60 |
FFFFFFFFFFFFC1A4 atoscr1: |
FFFFFFFFFFFFC1A4 16108100 ori r1,r1,#0x100 |
FFFFFFFFFFFFC1A8 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Convert screen character to ascii character |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBCCC ScreenToAscii: |
FFFFFFFFFFFFBCCC 141080FF andi r1,r1,#0xff |
FFFFFFFFFFFFBCD0 AE10021A bgtui r1,#26,stasc1 |
FFFFFFFFFFFFBCD4 0A10803C addui r1,r1,#60 |
FFFFFFFFFFFFBCD8 stasc1: |
FFFFFFFFFFFFBCD8 37EF8000 ret |
FFFFFFFFFFFFC1AC ScreenToAscii: |
FFFFFFFFFFFFC1AC 141080FF andi r1,r1,#0xff |
FFFFFFFFFFFFC1B0 AE10021A bgtui r1,#26,stasc1 |
FFFFFFFFFFFFC1B4 0A10803C addui r1,r1,#60 |
FFFFFFFFFFFFC1B8 stasc1: |
FFFFFFFFFFFFC1B8 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Calculate screen memory location from CursorRow,CursorCol. |
1398,23 → 1952,23
; r1 = screen location |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBCDC CalcScreenLoc: |
FFFFFFFFFFFFBCDC 42009416 lc r1,CursorRow |
FFFFFFFFFFFFBCE0 1410807F andi r1,r1,#0x7f |
FFFFFFFFFFFFBCE4 E69A0000 ; SETLO |
FFFFFFFFFFFFBCE8 EE800003 ; SETMID |
FFFFFFFFFFFFBCEC 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFBCF0 82310000 inch r2,TEXT_COLS[r3] |
FFFFFFFFFFFFBCF4 04208818 mulu r2,r2,r1 |
FFFFFFFFFFFFBCF8 42009418 lc r1,CursorCol |
FFFFFFFFFFFFBCFC 1410807F andi r1,r1,#0x7f |
FFFFFFFFFFFFBD00 04208803 addu r2,r2,r1 |
FFFFFFFFFFFFBD04 92310016 outc r2,TEXT_CURPOS[r3] |
FFFFFFFFFFFFBD08 06210200 shli r2,r2,#1 |
FFFFFFFFFFFFBD0C E6900000 ; SETLO |
FFFFFFFFFFFFBD10 EE800003 ; SETMID |
FFFFFFFFFFFFBD14 042D0403 addui r1,r2,#TEXTSCR ; r1 = screen location |
FFFFFFFFFFFFBD18 37EF8000 ret |
FFFFFFFFFFFFC1BC CalcScreenLoc: |
FFFFFFFFFFFFC1BC 4A009417 lbu r1,CursorRow |
FFFFFFFFFFFFC1C0 1410807F andi r1,r1,#0x7f |
FFFFFFFFFFFFC1C4 E69A0000 ; SETLO |
FFFFFFFFFFFFC1C8 EE800003 ; SETMID |
FFFFFFFFFFFFC1CC 6A0D0C2D lea r3,TEXTREG |
FFFFFFFFFFFFC1D0 82310000 inch r2,TEXT_COLS[r3] |
FFFFFFFFFFFFC1D4 04208818 mulu r2,r2,r1 |
FFFFFFFFFFFFC1D8 4A009418 lbu r1,CursorCol |
FFFFFFFFFFFFC1DC 1410807F andi r1,r1,#0x7f |
FFFFFFFFFFFFC1E0 04208803 addu r2,r2,r1 |
FFFFFFFFFFFFC1E4 92310016 outc r2,TEXT_CURPOS[r3] |
FFFFFFFFFFFFC1E8 06210206 shlui r2,r2,#1 |
FFFFFFFFFFFFC1EC E6900000 ; SETLO |
FFFFFFFFFFFFC1F0 EE800003 ; SETMID |
FFFFFFFFFFFFC1F4 042D0403 addui r1,r2,#TEXTSCR ; r1 = screen location |
FFFFFFFFFFFFC1F8 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Display a character on the screen |
1421,145 → 1975,156
; d1.b = char to display |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBD1C DisplayChar: |
FFFFFFFFFFFFBD1C B210080D bnei r1,#'\r',dccr ; carriage return ? |
FFFFFFFFFFFFBD20 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBD24 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBD28 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBD2C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBD30 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBD34 62001418 sc r0,CursorCol ; just set cursor column to zero on a CR |
FFFFFFFFFFFFBD38 BE00018A bra dcx7 |
FFFFFFFFFFFFBD3C dccr: |
FFFFFFFFFFFFBD3C E6800091 ; SETLO |
FFFFFFFFFFFFBD40 BE1D0209 bnei r1,#0x91,dcx6 ; cursor right ? |
FFFFFFFFFFFFBD44 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBD48 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBD4C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBD50 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBD54 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBD58 42011418 lc r2,CursorCol |
FFFFFFFFFFFFBD5C B0200338 beqi r2,#56,dcx7 |
FFFFFFFFFFFFBD60 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFBD64 62011418 sc r2,CursorCol |
FFFFFFFFFFFFBD68 dcx7: |
FFFFFFFFFFFFBD68 31FFEF37 call CalcScreenLoc |
FFFFFFFFFFFFBD6C 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFBD70 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBD74 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBD78 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBD7C 37EF8020 ret #32 |
FFFFFFFFFFFFBD80 dcx6: |
FFFFFFFFFFFFBD80 E6800090 ; SETLO |
FFFFFFFFFFFFBD84 BE1D0169 bnei r1,#0x90,dcx8 ; cursor up ? |
FFFFFFFFFFFFBD88 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBD8C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBD90 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBD94 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBD98 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBD9C 42011416 lc r2,CursorRow |
FFFFFFFFFFFFBDA0 B02FF200 beqi r2,#0,dcx7 |
FFFFFFFFFFFFBDA4 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFBDA8 62011416 sc r2,CursorRow |
FFFFFFFFFFFFBDAC BE007DEA bra dcx7 |
FFFFFFFFFFFFBDB0 dcx8: |
FFFFFFFFFFFFBDB0 E6800093 ; SETLO |
FFFFFFFFFFFFBDB4 BE1D0169 bnei r1,#0x93,dcx9 ; cursor left ? |
FFFFFFFFFFFFBDB8 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBDBC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBDC0 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBDC4 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBDC8 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBDCC 42011418 lc r2,CursorCol |
FFFFFFFFFFFFBDD0 B02FE600 beqi r2,#0,dcx7 |
FFFFFFFFFFFFBDD4 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFBDD8 62011418 sc r2,CursorCol |
FFFFFFFFFFFFBDDC BE007C6A bra dcx7 |
FFFFFFFFFFFFBDE0 dcx9: |
FFFFFFFFFFFFBDE0 E6800092 ; SETLO |
FFFFFFFFFFFFBDE4 BE1D0169 bnei r1,#0x92,dcx10 ; cursor down ? |
FFFFFFFFFFFFBDE8 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBDEC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBDF0 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBDF4 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBDF8 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBDFC 42011416 lc r2,CursorRow |
FFFFFFFFFFFFBE00 B02FDA1E beqi r2,#30,dcx7 |
FFFFFFFFFFFFBE04 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFBE08 62011416 sc r2,CursorRow |
FFFFFFFFFFFFBE0C BE007AEA bra dcx7 |
FFFFFFFFFFFFBE10 dcx10: |
FFFFFFFFFFFFBE10 E6800094 ; SETLO |
FFFFFFFFFFFFBE14 BE1D0189 bnei r1,#0x94,dcx11 ; cursor home ? |
FFFFFFFFFFFFBE18 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBE1C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBE20 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBE24 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBE28 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBE2C 42011418 lc r2,CursorCol |
FFFFFFFFFFFFBE30 BE200068 beq r2,r0,dcx12 |
FFFFFFFFFFFFBE34 62001418 sc r0,CursorCol |
FFFFFFFFFFFFBE38 BE00798A bra dcx7 |
FFFFFFFFFFFFBE3C dcx12: |
FFFFFFFFFFFFBE3C 62001416 sc r0,CursorRow |
FFFFFFFFFFFFBE40 BE00794A bra dcx7 |
FFFFFFFFFFFFBE44 dcx11: |
FFFFFFFFFFFFBE44 0FEF0030 subui sp,sp,#48 |
FFFFFFFFFFFFBE48 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBE4C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBE50 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBE54 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFBE58 67E28020 sw r5,32[sp] |
FFFFFFFFFFFFBE5C 67EF8028 sw lr,40[sp] |
FFFFFFFFFFFFBE60 E6800099 ; SETLO |
FFFFFFFFFFFFBE64 BE1D00A9 bnei r1,#0x99,dcx13 ; delete ? |
FFFFFFFFFFFFBE68 31FFEF37 call CalcScreenLoc |
FFFFFFFFFFFFBE6C 04008C09 or r3,r0,r1 ; r3 = screen location |
FFFFFFFFFFFFBE70 42009418 lc r1,CursorCol ; r1 = cursor column |
FFFFFFFFFFFFBE74 BE00012A bra dcx5 |
FFFFFFFFFFFFBE78 dcx13: |
FFFFFFFFFFFFBE78 B2101508 bnei r1,#CTRLH,dcx3 ; backspace ? |
FFFFFFFFFFFFBE7C 42011418 lc r2,CursorCol |
FFFFFFFFFFFFBE80 BE2003A8 beq r2,r0,dcx4 |
FFFFFFFFFFFFBE84 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFBE88 62011418 sc r2,CursorCol |
FFFFFFFFFFFFBE8C 31FFEF37 call CalcScreenLoc ; a0 = screen location |
FFFFFFFFFFFFBE90 04008C09 or r3,r0,r1 ; r3 = screen location |
FFFFFFFFFFFFBE94 42009418 lc r1,CursorCol |
FFFFFFFFFFFFBE98 dcx5: |
FFFFFFFFFFFFBE98 82310002 inch r2,2[r3] |
FFFFFFFFFFFFBE9C 92310000 outc r2,[r3] |
FFFFFFFFFFFFBEA0 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFBEA4 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFBEA8 E69A0000 ; SETLO |
FFFFFFFFFFFFBEAC EE800003 ; SETMID |
FFFFFFFFFFFFBEB0 6A0D102D lea r4,TEXTREG |
FFFFFFFFFFFFBEB4 82428000 inch r5,TEXT_COLS[r4] |
FFFFFFFFFFFFBEB8 BE12FF04 bltu r1,r5,dcx5 |
FFFFFFFFFFFFBEBC E0400020 setlo r1,#' ' |
FFFFFFFFFFFFBEC0 31FFEF2B call AsciiToScreen |
FFFFFFFFFFFFBEC4 9230FFFE outc r1,-2[r3] |
FFFFFFFFFFFFBEC8 BE00016A bra dcx4 |
FFFFFFFFFFFFBECC dcx3: |
FFFFFFFFFFFFBECC B010090A beqi r1,#'\n',dclf ; linefeed ? |
FFFFFFFFFFFFBED0 04009009 or r4,r0,r1 ; save r1 in r4 |
FFFFFFFFFFFFBED4 31FFEF37 call CalcScreenLoc ; r1 = screen location |
FFFFFFFFFFFFBED8 04008C09 or r3,r0,r1 ; r3 = screen location |
FFFFFFFFFFFFBEDC 04020409 or r1,r0,r4 ; restore r1 |
FFFFFFFFFFFFBEE0 31FFEF2B call AsciiToScreen ; convert ascii char to screen char |
FFFFFFFFFFFFBEE4 92308000 outc r1,[r3] |
FFFFFFFFFFFFBEE8 31FFEFC4 call IncCursorPos |
FFFFFFFFFFFFBEEC BE00004A bra dcx4 |
FFFFFFFFFFFFBEF0 dclf: |
FFFFFFFFFFFFBEF0 31FFEFD2 call IncCursorRow |
FFFFFFFFFFFFBEF4 dcx4: |
FFFFFFFFFFFFBEF4 47EF8028 lw lr,40[sp] |
FFFFFFFFFFFFBEF8 47E28020 lw r5,32[sp] |
FFFFFFFFFFFFBEFC 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFBF00 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBF04 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBF08 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBF0C 37EF8030 ret #48 |
FFFFFFFFFFFFC1FC DisplayChar: |
FFFFFFFFFFFFC1FC B210080D bnei r1,#'\r',dccr ; carriage return ? |
FFFFFFFFFFFFC200 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC204 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC208 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC20C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC210 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC214 60001418 sb r0,CursorCol ; just set cursor column to zero on a CR |
FFFFFFFFFFFFC218 BE00018A bra dcx7 |
FFFFFFFFFFFFC21C dccr: |
; beqi r1,#CTRLK,dccr1 |
FFFFFFFFFFFFC21C E6800091 ; SETLO |
FFFFFFFFFFFFC220 BE1D0209 bnei r1,#0x91,dcx6 ; cursor right ? |
FFFFFFFFFFFFC224 dccr1: |
FFFFFFFFFFFFC224 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC228 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC22C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC230 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC234 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC238 4A011418 lbu r2,CursorCol |
FFFFFFFFFFFFC23C B0200338 beqi r2,#56,dcx7 |
FFFFFFFFFFFFC240 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFC244 60011418 sb r2,CursorCol |
FFFFFFFFFFFFC248 dcx7: |
FFFFFFFFFFFFC248 31FFF06F call CalcScreenLoc |
FFFFFFFFFFFFC24C 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFC250 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC254 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC258 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC25C 37EF8020 ret #32 |
FFFFFFFFFFFFC260 dcx6: |
; beqi r1,#CTRLI,dccu1 |
FFFFFFFFFFFFC260 E6800090 ; SETLO |
FFFFFFFFFFFFC264 BE1D0169 bnei r1,#0x90,dcx8 ; cursor up ? |
FFFFFFFFFFFFC268 dccu1: |
FFFFFFFFFFFFC268 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC26C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC270 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC274 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC278 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC27C 4A011417 lbu r2,CursorRow |
FFFFFFFFFFFFC280 B02FF200 beqi r2,#0,dcx7 |
FFFFFFFFFFFFC284 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFC288 60011417 sb r2,CursorRow |
FFFFFFFFFFFFC28C BE007DEA bra dcx7 |
FFFFFFFFFFFFC290 dcx8: |
; beqi r1,#CTRLJ,dccl1 |
FFFFFFFFFFFFC290 E6800093 ; SETLO |
FFFFFFFFFFFFC294 BE1D0169 bnei r1,#0x93,dcx9 ; cursor left ? |
FFFFFFFFFFFFC298 dccl1: |
FFFFFFFFFFFFC298 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC29C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC2A0 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC2A4 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC2A8 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC2AC 4A011418 lbu r2,CursorCol |
FFFFFFFFFFFFC2B0 B02FE600 beqi r2,#0,dcx7 |
FFFFFFFFFFFFC2B4 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFC2B8 60011418 sb r2,CursorCol |
FFFFFFFFFFFFC2BC BE007C6A bra dcx7 |
FFFFFFFFFFFFC2C0 dcx9: |
; beqi r1,#CTRLM,dccd1 |
FFFFFFFFFFFFC2C0 E6800092 ; SETLO |
FFFFFFFFFFFFC2C4 BE1D0169 bnei r1,#0x92,dcx10 ; cursor down ? |
FFFFFFFFFFFFC2C8 dccd1: |
FFFFFFFFFFFFC2C8 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC2CC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC2D0 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC2D4 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC2D8 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC2DC 4A011417 lbu r2,CursorRow |
FFFFFFFFFFFFC2E0 B02FDA1E beqi r2,#30,dcx7 |
FFFFFFFFFFFFC2E4 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFC2E8 60011417 sb r2,CursorRow |
FFFFFFFFFFFFC2EC BE007AEA bra dcx7 |
FFFFFFFFFFFFC2F0 dcx10: |
FFFFFFFFFFFFC2F0 E6800094 ; SETLO |
FFFFFFFFFFFFC2F4 BE1D0189 bnei r1,#0x94,dcx11 ; cursor home ? |
FFFFFFFFFFFFC2F8 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC2FC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC300 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC304 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC308 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC30C 4A011418 lbu r2,CursorCol |
FFFFFFFFFFFFC310 BE200068 beq r2,r0,dcx12 |
FFFFFFFFFFFFC314 60001418 sb r0,CursorCol |
FFFFFFFFFFFFC318 BE00798A bra dcx7 |
FFFFFFFFFFFFC31C dcx12: |
FFFFFFFFFFFFC31C 60001417 sb r0,CursorRow |
FFFFFFFFFFFFC320 BE00794A bra dcx7 |
FFFFFFFFFFFFC324 dcx11: |
FFFFFFFFFFFFC324 0FEF0030 subui sp,sp,#48 |
FFFFFFFFFFFFC328 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC32C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC330 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC334 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFC338 67E28020 sw r5,32[sp] |
FFFFFFFFFFFFC33C 67EF8028 sw lr,40[sp] |
FFFFFFFFFFFFC340 E6800099 ; SETLO |
FFFFFFFFFFFFC344 BE1D00A9 bnei r1,#0x99,dcx13 ; delete ? |
FFFFFFFFFFFFC348 31FFF06F call CalcScreenLoc |
FFFFFFFFFFFFC34C 02118009 mov r3,r1 ; r3 = screen location |
FFFFFFFFFFFFC350 4A009418 lbu r1,CursorCol ; r1 = cursor column |
FFFFFFFFFFFFC354 BE00012A bra dcx5 |
FFFFFFFFFFFFC358 dcx13: |
FFFFFFFFFFFFC358 B2101508 bnei r1,#CTRLH,dcx3 ; backspace ? |
FFFFFFFFFFFFC35C 4A011418 lbu r2,CursorCol |
FFFFFFFFFFFFC360 BE200408 beq r2,r0,dcx4 |
FFFFFFFFFFFFC364 0E210001 subui r2,r2,#1 |
FFFFFFFFFFFFC368 60011418 sb r2,CursorCol |
FFFFFFFFFFFFC36C 31FFF06F call CalcScreenLoc ; a0 = screen location |
FFFFFFFFFFFFC370 02118009 mov r3,r1 ; r3 = screen location |
FFFFFFFFFFFFC374 4A009418 lbu r1,CursorCol |
FFFFFFFFFFFFC378 dcx5: |
FFFFFFFFFFFFC378 82310002 inch r2,2[r3] |
FFFFFFFFFFFFC37C 92310000 outc r2,[r3] |
FFFFFFFFFFFFC380 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC384 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFC388 E69A0000 ; SETLO |
FFFFFFFFFFFFC38C EE800003 ; SETMID |
FFFFFFFFFFFFC390 6A0D102D lea r4,TEXTREG |
FFFFFFFFFFFFC394 82428000 inch r5,TEXT_COLS[r4] |
FFFFFFFFFFFFC398 BE12FF04 bltu r1,r5,dcx5 |
FFFFFFFFFFFFC39C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFC3A0 31FFF063 call AsciiToScreen |
FFFFFFFFFFFFC3A4 9230FFFE outc r1,-2[r3] |
FFFFFFFFFFFFC3A8 BE0001CA bra dcx4 |
FFFFFFFFFFFFC3AC dcx3: |
FFFFFFFFFFFFC3AC B0100C0A beqi r1,#'\n',dclf ; linefeed ? |
FFFFFFFFFFFFC3B0 02120009 mov r4,r1 ; save r1 in r4 |
FFFFFFFFFFFFC3B4 31FFF06F call CalcScreenLoc ; r1 = screen location |
FFFFFFFFFFFFC3B8 02118009 mov r3,r1 ; r3 = screen location |
FFFFFFFFFFFFC3BC 02408009 mov r1,r4 ; restore r1 |
FFFFFFFFFFFFC3C0 31FFF063 call AsciiToScreen ; convert ascii char to screen char |
FFFFFFFFFFFFC3C4 92308000 outc r1,[r3] |
FFFFFFFFFFFFC3C8 42009410 lc r1,CharColor |
FFFFFFFFFFFFC3CC E6810000 ; SETLO |
FFFFFFFFFFFFC3D0 6A3D0429 outc r1,0x10000[r3] |
FFFFFFFFFFFFC3D4 31FFF0FF call IncCursorPos |
FFFFFFFFFFFFC3D8 BE00004A bra dcx4 |
FFFFFFFFFFFFC3DC dclf: |
FFFFFFFFFFFFC3DC 31FFF10D call IncCursorRow |
FFFFFFFFFFFFC3E0 dcx4: |
FFFFFFFFFFFFC3E0 47EF8028 lw lr,40[sp] |
FFFFFFFFFFFFC3E4 47E28020 lw r5,32[sp] |
FFFFFFFFFFFFC3E8 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFC3EC 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC3F0 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC3F4 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC3F8 37EF8030 ret #48 |
|
|
;------------------------------------------------------------------------------ |
1566,139 → 2131,176
; Increment the cursor position, scroll the screen if needed. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBF10 IncCursorPos: |
FFFFFFFFFFFFBF10 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBF14 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBF18 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBF1C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBF20 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBF24 42009418 lc r1,CursorCol |
FFFFFFFFFFFFBF28 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFBF2C 62009418 sc r1,CursorCol |
FFFFFFFFFFFFBF30 E69A0000 ; SETLO |
FFFFFFFFFFFFBF34 EE800003 ; SETMID |
FFFFFFFFFFFFBF38 6A0D0821 inch r2,TEXTREG+TEXT_COLS |
FFFFFFFFFFFFBF3C BE110246 bleu r1,r2,icc1 |
FFFFFFFFFFFFBF40 62001418 sc r0,CursorCol ; column = 0 |
FFFFFFFFFFFFBF44 BE0000CA bra icr1 |
FFFFFFFFFFFFBF48 IncCursorRow: |
FFFFFFFFFFFFBF48 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFBF4C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBF50 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBF54 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFBF58 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFBF5C icr1: |
FFFFFFFFFFFFBF5C 42009416 lc r1,CursorRow |
FFFFFFFFFFFFBF60 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFBF64 62009416 sc r1,CursorRow |
FFFFFFFFFFFFBF68 E69A0002 ; SETLO |
FFFFFFFFFFFFBF6C EE800003 ; SETMID |
FFFFFFFFFFFFBF70 6A0D0821 inch r2,TEXTREG+TEXT_ROWS |
FFFFFFFFFFFFBF74 BE110086 bleu r1,r2,icc1 |
FFFFFFFFFFFFBF78 0E210001 subui r2,r2,#1 ; backup the cursor row, we are scrolling up |
FFFFFFFFFFFFBF7C 62011416 sc r2,CursorRow |
FFFFFFFFFFFFBF80 31FFEEF6 call ScrollUp |
FFFFFFFFFFFFBF84 icc1: |
FFFFFFFFFFFFBF84 31FFEF37 call CalcScreenLoc |
FFFFFFFFFFFFBF88 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFBF8C 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFBF90 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBF94 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBF98 37EF8020 ret #32 |
FFFFFFFFFFFFC3FC IncCursorPos: |
FFFFFFFFFFFFC3FC 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC400 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC404 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC408 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC40C 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC410 4A009418 lbu r1,CursorCol |
FFFFFFFFFFFFC414 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFC418 60009418 sb r1,CursorCol |
FFFFFFFFFFFFC41C E69A0000 ; SETLO |
FFFFFFFFFFFFC420 EE800003 ; SETMID |
FFFFFFFFFFFFC424 6A0D0821 inch r2,TEXTREG+TEXT_COLS |
FFFFFFFFFFFFC428 BE110246 bleu r1,r2,icc1 |
FFFFFFFFFFFFC42C 60001418 sb r0,CursorCol ; column = 0 |
FFFFFFFFFFFFC430 BE0000CA bra icr1 |
FFFFFFFFFFFFC434 IncCursorRow: |
FFFFFFFFFFFFC434 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC438 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC43C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC440 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFC444 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFC448 icr1: |
FFFFFFFFFFFFC448 4A009417 lbu r1,CursorRow |
FFFFFFFFFFFFC44C 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFC450 60009417 sb r1,CursorRow |
FFFFFFFFFFFFC454 E69A0002 ; SETLO |
FFFFFFFFFFFFC458 EE800003 ; SETMID |
FFFFFFFFFFFFC45C 6A0D0821 inch r2,TEXTREG+TEXT_ROWS |
FFFFFFFFFFFFC460 BE110086 bleu r1,r2,icc1 |
FFFFFFFFFFFFC464 0E210001 subui r2,r2,#1 ; backup the cursor row, we are scrolling up |
FFFFFFFFFFFFC468 60011417 sb r2,CursorRow |
FFFFFFFFFFFFC46C 31FFF02E call ScrollUp |
FFFFFFFFFFFFC470 icc1: |
FFFFFFFFFFFFC470 31FFF06F call CalcScreenLoc |
FFFFFFFFFFFFC474 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFC478 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFC47C 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC480 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC484 37EF8020 ret #32 |
|
;------------------------------------------------------------------------------ |
; Display a string on the screen. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFBF9C DisplayString: |
FFFFFFFFFFFFBF9C 0DEF0018 subi sp,sp,#24 |
FFFFFFFFFFFFBFA0 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBFA4 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFBFA8 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFBFAC 02110009 mov r2,r1 ; r2 = pointer to string |
FFFFFFFFFFFFBFB0 dspj1: |
FFFFFFFFFFFFBFB0 4A208000 lbu r1,[r2] ; move string char into r1 |
FFFFFFFFFFFFBFB4 0A210001 addui r2,r2,#1 ; increment pointer |
FFFFFFFFFFFFBFB8 BE100068 beq r1,r0,dsret ; is it end of string ? |
FFFFFFFFFFFFBFBC 31FFEF47 call DisplayChar ; display character |
FFFFFFFFFFFFBFC0 BE007F8A bra dspj1 ; go back for next character |
FFFFFFFFFFFFBFC4 dsret: |
FFFFFFFFFFFFBFC4 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFBFC8 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFBFCC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFBFD0 37EF8018 ret #24 |
FFFFFFFFFFFFC488 DisplayString: |
FFFFFFFFFFFFC488 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC48C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC490 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFC494 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC498 02110009 mov r2,r1 ; r2 = pointer to string |
FFFFFFFFFFFFC49C dspj1: |
FFFFFFFFFFFFC49C 4A208000 lbu r1,[r2] ; move string char into r1 |
FFFFFFFFFFFFC4A0 0A210001 addui r2,r2,#1 ; increment pointer |
FFFFFFFFFFFFC4A4 BE100068 beq r1,r0,dsret ; is it end of string ? |
FFFFFFFFFFFFC4A8 31FFF07F call DisplayChar ; display character |
FFFFFFFFFFFFC4AC BE007F8A bra dspj1 ; go back for next character |
FFFFFFFFFFFFC4B0 dsret: |
FFFFFFFFFFFFC4B0 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC4B4 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFC4B8 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC4BC 37EF8018 ret #24 |
|
FFFFFFFFFFFFBFD4 DisplayStringCRLF: |
FFFFFFFFFFFFBFD4 0FEF0008 subui r30,r30,#8 |
FFFFFFFFFFFFBFD8 67EF8000 sw r31,[r30] |
FFFFFFFFFFFFBFDC 31FFEFE7 call DisplayString |
FFFFFFFFFFFFBFE0 47EF8000 lw r31,[r30] |
FFFFFFFFFFFFBFE4 0BEF0008 addui r30,r30,#8 |
FFFFFFFFFFFFC4C0 DisplayStringCRLF: |
FFFFFFFFFFFFC4C0 0FEF0008 subui r30,r30,#8 |
FFFFFFFFFFFFC4C4 67EF8000 sw r31,[r30] |
FFFFFFFFFFFFC4C8 31FFF122 call DisplayString |
FFFFFFFFFFFFC4CC 47EF8000 lw r31,[r30] |
FFFFFFFFFFFFC4D0 0BEF0008 addui r30,r30,#8 |
|
FFFFFFFFFFFFBFE8 CRLF: |
FFFFFFFFFFFFBFE8 0FEF0010 subui r30,r30,#16 |
FFFFFFFFFFFFBFEC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFBFF0 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFBFF4 E040000D setlo r1,#'\r' |
FFFFFFFFFFFFBFF8 31FFEF47 call DisplayChar |
FFFFFFFFFFFFBFFC E040000A setlo r1,#'\n' |
FFFFFFFFFFFFC000 31FFEF47 call DisplayChar |
FFFFFFFFFFFFC004 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC008 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC00C 37EF8010 ret #16 |
FFFFFFFFFFFFC4D4 CRLF: |
FFFFFFFFFFFFC4D4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC4D8 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC4DC 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC4E0 E040000D setlo r1,#'\r' |
FFFFFFFFFFFFC4E4 31FFF07F call DisplayChar |
FFFFFFFFFFFFC4E8 E040000A setlo r1,#'\n' |
FFFFFFFFFFFFC4EC 31FFF07F call DisplayChar |
FFFFFFFFFFFFC4F0 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC4F4 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC4F8 37EF8010 ret #16 |
|
; Call the Tiny BASIC routine to display a number |
; |
FFFFFFFFFFFFC4FC DisplayNum: |
FFFFFFFFFFFFC4FC 33FFFCCC jmp PRTNUM |
|
;------------------------------------------------------------------------------ |
; Display nybble in r1 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC010 DisplayNybble: |
FFFFFFFFFFFFC010 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC014 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC018 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC01C 1410800F andi r1,r1,#0x0F |
FFFFFFFFFFFFC020 0A108030 addui r1,r1,#'0' |
FFFFFFFFFFFFC024 AC100239 bleui r1,#'9',dispnyb1 |
FFFFFFFFFFFFC028 0A108007 addui r1,r1,#7 |
FFFFFFFFFFFFC02C dispnyb1: |
FFFFFFFFFFFFC02C 31FFEF47 call DisplayChar |
FFFFFFFFFFFFC030 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC034 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC038 37EF8010 ret #16 |
FFFFFFFFFFFFC500 DisplayNybble: |
FFFFFFFFFFFFC500 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC504 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC508 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC50C 1410800F andi r1,r1,#0x0F |
FFFFFFFFFFFFC510 0A108030 addui r1,r1,#'0' |
FFFFFFFFFFFFC514 AC100239 bleui r1,#'9',dispnyb1 |
FFFFFFFFFFFFC518 0A108007 addui r1,r1,#7 |
FFFFFFFFFFFFC51C dispnyb1: |
FFFFFFFFFFFFC51C 31FFF07F call DisplayChar |
FFFFFFFFFFFFC520 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC524 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC528 37EF8010 ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the byte in r1 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC03C DisplayByte: |
FFFFFFFFFFFFC03C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC040 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC044 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC048 06108804 rori r1,r1,#4 |
FFFFFFFFFFFFC04C 31FFF004 call DisplayNybble |
FFFFFFFFFFFFC050 06108802 roli r1,r1,#4 |
FFFFFFFFFFFFC054 31FFF004 call DisplayNybble |
FFFFFFFFFFFFC058 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC05C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC060 37EF8010 ret #16 |
FFFFFFFFFFFFC52C DisplayByte: |
FFFFFFFFFFFFC52C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC530 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC534 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC538 06108804 rori r1,r1,#4 |
FFFFFFFFFFFFC53C 31FFF140 call DisplayNybble |
FFFFFFFFFFFFC540 06108802 roli r1,r1,#4 |
FFFFFFFFFFFFC544 31FFF140 call DisplayNybble |
FFFFFFFFFFFFC548 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC54C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC550 37EF8010 ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the char in r1 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC554 DisplayCharr: |
FFFFFFFFFFFFC554 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC558 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC55C 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC560 06109004 rori r1,r1,#8 |
FFFFFFFFFFFFC564 31FFF14B call DisplayByte |
FFFFFFFFFFFFC568 06109002 roli r1,r1,#8 |
FFFFFFFFFFFFC56C 31FFF14B call DisplayByte |
FFFFFFFFFFFFC570 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC574 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC578 37EF8010 ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the half-word in r1 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC57C DisplayHalf: |
FFFFFFFFFFFFC57C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC580 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC584 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC588 0610A004 rori r1,r1,#16 |
FFFFFFFFFFFFC58C 31FFF155 call DisplayCharr |
FFFFFFFFFFFFC590 0610A002 roli r1,r1,#16 |
FFFFFFFFFFFFC594 31FFF155 call DisplayCharr |
FFFFFFFFFFFFC598 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC59C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC5A0 37EF8010 ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the 64 bit word in r1 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC064 DisplayWord: |
FFFFFFFFFFFFC064 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC068 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC06C 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFC070 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC074 E0C00007 setlo r3,#7 |
FFFFFFFFFFFFC078 dspwd1: |
FFFFFFFFFFFFC078 06109002 roli r1,r1,#8 |
FFFFFFFFFFFFC07C 31FFF00F call DisplayByte |
FFFFFFFFFFFFC080 BE01FFCF loop r3,dspwd1 |
FFFFFFFFFFFFC084 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC088 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFC08C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC090 37EF8018 ret #24 |
FFFFFFFFFFFFC5A4 DisplayWord: |
FFFFFFFFFFFFC5A4 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC5A8 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC5AC 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFC5B0 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC5B4 E0C00007 setlo r3,#7 |
FFFFFFFFFFFFC5B8 dspwd1: |
FFFFFFFFFFFFC5B8 06109002 roli r1,r1,#8 |
FFFFFFFFFFFFC5BC 31FFF14B call DisplayByte |
FFFFFFFFFFFFC5C0 BE01FFCF loop r3,dspwd1 |
FFFFFFFFFFFFC5C4 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC5C8 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFC5CC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC5D0 37EF8018 ret #24 |
|
;------------------------------------------------------------------------------ |
; Display memory pointed to by r2. |
1705,96 → 2307,137
; destroys r1,r3 |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC094 DisplayMem: |
FFFFFFFFFFFFC094 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC098 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC09C 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFC0A0 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC0A4 E040003A setlo r1,#':' |
FFFFFFFFFFFFC0A8 31FFEF47 call DisplayChar |
FFFFFFFFFFFFC0AC 02208009 mov r1,r2 |
FFFFFFFFFFFFC0B0 31FFF019 call DisplayWord |
FFFFFFFFFFFFC0B4 E0C00007 setlo r3,#7 |
FFFFFFFFFFFFC0B8 dspmem1: |
FFFFFFFFFFFFC0B8 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFC0BC 31FFEF47 call DisplayChar |
FFFFFFFFFFFFC0C0 40208000 lb r1,[r2] |
FFFFFFFFFFFFC0C4 31FFF00F call DisplayByte |
FFFFFFFFFFFFC0C8 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFC0CC BE01FF6F loop r3,dspmem1 |
FFFFFFFFFFFFC0D0 31FFEFFA call CRLF |
FFFFFFFFFFFFC0D4 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC0D8 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFC0DC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC0E0 37EF8018 ret #24 |
FFFFFFFFFFFFC5D4 DisplayMemB: |
FFFFFFFFFFFFC5D4 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC5D8 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC5DC 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFC5E0 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC5E4 E040003A setlo r1,#':' |
FFFFFFFFFFFFC5E8 31FFF07F call DisplayChar |
FFFFFFFFFFFFC5EC 02208009 mov r1,r2 |
FFFFFFFFFFFFC5F0 31FFF169 call DisplayWord |
FFFFFFFFFFFFC5F4 E0C00007 setlo r3,#7 |
FFFFFFFFFFFFC5F8 dspmem1: |
FFFFFFFFFFFFC5F8 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFC5FC 31FFF07F call DisplayChar |
FFFFFFFFFFFFC600 4A208000 lbu r1,[r2] |
FFFFFFFFFFFFC604 31FFF14B call DisplayByte |
FFFFFFFFFFFFC608 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFC60C BE01FF6F loop r3,dspmem1 |
FFFFFFFFFFFFC610 31FFF135 call CRLF |
FFFFFFFFFFFFC614 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC618 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFC61C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC620 37EF8018 ret #24 |
|
FFFFFFFFFFFFC624 DisplayMemC: |
FFFFFFFFFFFFC624 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC628 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC62C 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFC630 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC634 E040003A setlo r1,#':' |
FFFFFFFFFFFFC638 31FFF07F call DisplayChar |
FFFFFFFFFFFFC63C 02208009 mov r1,r2 |
FFFFFFFFFFFFC640 31FFF169 call DisplayWord |
FFFFFFFFFFFFC644 E0C00003 setlo r3,#3 |
FFFFFFFFFFFFC648 dspmemc1: |
FFFFFFFFFFFFC648 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFC64C 31FFF07F call DisplayChar |
FFFFFFFFFFFFC650 4C208000 lcu r1,[r2] |
FFFFFFFFFFFFC654 31FFF155 call DisplayCharr |
FFFFFFFFFFFFC658 0A210002 addui r2,r2,#2 |
FFFFFFFFFFFFC65C BE01FF6F loop r3,dspmemc1 |
FFFFFFFFFFFFC660 31FFF135 call CRLF |
FFFFFFFFFFFFC664 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC668 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFC66C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC670 37EF8018 ret #24 |
|
FFFFFFFFFFFFC674 DisplayMemW: |
FFFFFFFFFFFFC674 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC678 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC67C 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC680 E040003A setlo r1,#':' |
FFFFFFFFFFFFC684 31FFF07F call DisplayChar |
FFFFFFFFFFFFC688 02208009 mov r1,r2 |
FFFFFFFFFFFFC68C 31FFF169 call DisplayWord |
FFFFFFFFFFFFC690 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFC694 31FFF07F call DisplayChar |
FFFFFFFFFFFFC698 46208000 lw r1,[r2] |
FFFFFFFFFFFFC69C 31FFF169 call DisplayWord |
FFFFFFFFFFFFC6A0 0A210008 addui r2,r2,#8 |
FFFFFFFFFFFFC6A4 31FFF135 call CRLF |
FFFFFFFFFFFFC6A8 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC6AC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC6B0 37EF8018 ret #24 |
|
;------------------------------------------------------------------------------ |
; Converts binary number in r1 into BCD number in r2 and r1. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC0E4 BinToBCD: |
FFFFFFFFFFFFC0E4 0FEF0030 subui sp,sp,#48 |
FFFFFFFFFFFFC0E8 67E18000 sw r3,[sp] |
FFFFFFFFFFFFC0EC 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFC0F0 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFC0F4 67E30018 sw r6,24[sp] |
FFFFFFFFFFFFC0F8 67E38020 sw r7,32[sp] |
FFFFFFFFFFFFC0FC 67E40028 sw r8,40[sp] |
FFFFFFFFFFFFC100 E080000A setlo r2,#10 |
FFFFFFFFFFFFC104 E2000013 setlo r8,#19 ; number of digits to produce - 1 |
FFFFFFFFFFFFC108 bta1: |
FFFFFFFFFFFFC108 04110C1C mod r3,r1,r2 |
FFFFFFFFFFFFC10C 0631F800 shli r3,r3,#60 ; shift result to uppermost bits |
FFFFFFFFFFFFC110 0653F800 shli r7,r5,#60 ; copy low order nybble of r5 to r4 topmost nybble |
FFFFFFFFFFFFC114 06420801 shrui r4,r4,#4 |
FFFFFFFFFFFFC118 04439009 or r4,r4,r7 |
FFFFFFFFFFFFC11C 06528801 shrui r5,r5,#4 |
FFFFFFFFFFFFC120 04519409 or r5,r5,r3 ; copy new bcd digit into uppermost bits of r5 |
FFFFFFFFFFFFC124 1C108000 divui r1,r1,r2 ; r1=r1/10 |
FFFFFFFFFFFFC128 BE047F0F loop r8,bta1 |
FFFFFFFFFFFFC12C 06426001 shrui r4,r4,#48 ; right align number in register |
FFFFFFFFFFFFC130 06532000 shli r6,r5,#16 |
FFFFFFFFFFFFC134 04431009 or r4,r4,r6 ; copy bits into r4 |
FFFFFFFFFFFFC138 0652E001 shrui r5,r5,#48 |
FFFFFFFFFFFFC13C 02408009 mov r1,r4 |
FFFFFFFFFFFFC140 02510009 mov r2,r5 |
FFFFFFFFFFFFC144 47E18000 lw r3,[sp] |
FFFFFFFFFFFFC148 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFC14C 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFC150 47E30018 lw r6,24[sp] |
FFFFFFFFFFFFC154 47E38020 lw r7,32[sp] |
FFFFFFFFFFFFC158 47E40028 lw r8,40[sp] |
FFFFFFFFFFFFC15C 37EF8030 ret #48 |
FFFFFFFFFFFFC6B4 BinToBCD: |
FFFFFFFFFFFFC6B4 0FEF0030 subui sp,sp,#48 |
FFFFFFFFFFFFC6B8 67E18000 sw r3,[sp] |
FFFFFFFFFFFFC6BC 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFC6C0 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFC6C4 67E30018 sw r6,24[sp] |
FFFFFFFFFFFFC6C8 67E38020 sw r7,32[sp] |
FFFFFFFFFFFFC6CC 67E40028 sw r8,40[sp] |
FFFFFFFFFFFFC6D0 E080000A setlo r2,#10 |
FFFFFFFFFFFFC6D4 E2000013 setlo r8,#19 ; number of digits to produce - 1 |
FFFFFFFFFFFFC6D8 bta1: |
FFFFFFFFFFFFC6D8 04110C1C modu r3,r1,r2 |
FFFFFFFFFFFFC6DC 0631F800 shli r3,r3,#60 ; shift result to uppermost bits |
FFFFFFFFFFFFC6E0 0653F800 shli r7,r5,#60 ; copy low order nybble of r5 to r4 topmost nybble |
FFFFFFFFFFFFC6E4 06420801 shrui r4,r4,#4 |
FFFFFFFFFFFFC6E8 04439009 or r4,r4,r7 |
FFFFFFFFFFFFC6EC 06528801 shrui r5,r5,#4 |
FFFFFFFFFFFFC6F0 04519409 or r5,r5,r3 ; copy new bcd digit into uppermost bits of r5 |
FFFFFFFFFFFFC6F4 1E108000 divui r1,r1,r2 ; r1=r1/10 |
FFFFFFFFFFFFC6F8 BE047F0F loop r8,bta1 |
FFFFFFFFFFFFC6FC 06426001 shrui r4,r4,#48 ; right align number in register |
FFFFFFFFFFFFC700 06532000 shli r6,r5,#16 |
FFFFFFFFFFFFC704 04431009 or r4,r4,r6 ; copy bits into r4 |
FFFFFFFFFFFFC708 0652E001 shrui r5,r5,#48 |
FFFFFFFFFFFFC70C 02408009 mov r1,r4 |
FFFFFFFFFFFFC710 02510009 mov r2,r5 |
FFFFFFFFFFFFC714 47E18000 lw r3,[sp] |
FFFFFFFFFFFFC718 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFC71C 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFC720 47E30018 lw r6,24[sp] |
FFFFFFFFFFFFC724 47E38020 lw r7,32[sp] |
FFFFFFFFFFFFC728 47E40028 lw r8,40[sp] |
FFFFFFFFFFFFC72C 37EF8030 ret #48 |
|
;------------------------------------------------------------------------------ |
; Converts BCD number in r1 into Ascii number in r2 and r1. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC160 BCDToAscii: |
FFFFFFFFFFFFC160 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC164 67E18000 sw r3,[sp] |
FFFFFFFFFFFFC168 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFC16C 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFC170 67E40018 sw r8,24[sp] |
FFFFFFFFFFFFC174 E200000F setlo r8,#15 |
FFFFFFFFFFFFC178 bta2: |
FFFFFFFFFFFFC178 1411000F andi r2,r1,#0x0F |
FFFFFFFFFFFFC17C 16210030 ori r2,r2,#0x30 |
FFFFFFFFFFFFC180 06217000 shli r2,r2,#56 |
FFFFFFFFFFFFC184 06421001 shrui r4,r4,#8 |
FFFFFFFFFFFFC188 0632F000 shli r5,r3,#56 |
FFFFFFFFFFFFC18C 04429009 or r4,r4,r5 |
FFFFFFFFFFFFC190 06319001 shrui r3,r3,#8 |
FFFFFFFFFFFFC194 04310C09 or r3,r3,r2 |
FFFFFFFFFFFFC198 06108801 shrui r1,r1,#4 |
FFFFFFFFFFFFC19C BE047EEF loop r8,bta2 |
FFFFFFFFFFFFC1A0 02408009 mov r1,r4 |
FFFFFFFFFFFFC1A4 02310009 mov r2,r3 |
FFFFFFFFFFFFC1A8 47E18000 lw r3,[sp] |
FFFFFFFFFFFFC1AC 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFC1B0 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFC1B4 47E40018 lw r8,24[sp] |
FFFFFFFFFFFFC1B8 37EF8020 ret #32 |
FFFFFFFFFFFFC730 BCDToAscii: |
FFFFFFFFFFFFC730 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFC734 67E18000 sw r3,[sp] |
FFFFFFFFFFFFC738 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFC73C 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFC740 67E40018 sw r8,24[sp] |
FFFFFFFFFFFFC744 E200000F setlo r8,#15 |
FFFFFFFFFFFFC748 bta2: |
FFFFFFFFFFFFC748 1411000F andi r2,r1,#0x0F |
FFFFFFFFFFFFC74C 16210030 ori r2,r2,#0x30 |
FFFFFFFFFFFFC750 06217000 shli r2,r2,#56 |
FFFFFFFFFFFFC754 06421001 shrui r4,r4,#8 |
FFFFFFFFFFFFC758 0632F000 shli r5,r3,#56 |
FFFFFFFFFFFFC75C 04429009 or r4,r4,r5 |
FFFFFFFFFFFFC760 06319001 shrui r3,r3,#8 |
FFFFFFFFFFFFC764 04310C09 or r3,r3,r2 |
FFFFFFFFFFFFC768 06108801 shrui r1,r1,#4 |
FFFFFFFFFFFFC76C BE047EEF loop r8,bta2 |
FFFFFFFFFFFFC770 02408009 mov r1,r4 |
FFFFFFFFFFFFC774 02310009 mov r2,r3 |
FFFFFFFFFFFFC778 47E18000 lw r3,[sp] |
FFFFFFFFFFFFC77C 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFC780 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFC784 47E40018 lw r8,24[sp] |
FFFFFFFFFFFFC788 37EF8020 ret #32 |
|
;------------------------------------------------------------------------------ |
; Convert a binary number into a 20 character ascii string. |
1802,153 → 2445,176
; r2 = address of string buffer |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC1BC BinToStr: |
FFFFFFFFFFFFC1BC 0FEF0038 subui sp,sp,#56 |
FFFFFFFFFFFFC1C0 67E18000 sw r3,[sp] |
FFFFFFFFFFFFC1C4 67E38008 sw r7,8[sp] |
FFFFFFFFFFFFC1C8 67E40010 sw r8,16[sp] |
FFFFFFFFFFFFC1CC 67E48018 sw r9,24[sp] |
FFFFFFFFFFFFC1D0 67E50020 sw r10,32[sp] |
FFFFFFFFFFFFC1D4 67E58028 sw r11,40[sp] |
FFFFFFFFFFFFC1D8 67EF8030 sw lr,48[sp] |
FFFFFFFFFFFFC1DC 02258009 mov r11,r2 |
FFFFFFFFFFFFC1E0 31FFF039 call BinToBCD |
FFFFFFFFFFFFC1E4 02250009 mov r10,r2 ; save off r2 |
FFFFFFFFFFFFC1E8 31FFF058 call BCDToAscii |
FFFFFFFFFFFFC1EC E2400001 setlo r9,#1 |
FFFFFFFFFFFFC1F0 btos3: |
FFFFFFFFFFFFC1F0 E2000007 setlo r8,#7 |
FFFFFFFFFFFFC1F4 btos1: |
FFFFFFFFFFFFC1F4 06938600 shli r7,r9,#3 |
FFFFFFFFFFFFC1F8 0A738000 addui r7,r7,r8 |
FFFFFFFFFFFFC1FC 0A738004 addui r7,r7,#4 |
FFFFFFFFFFFFC200 141180FF andi r3,r1,#0xff |
FFFFFFFFFFFFC204 6A758C10 sb r3,[r7+r11] |
FFFFFFFFFFFFC208 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFC20C BE047F4F loop r8,btos1 |
FFFFFFFFFFFFC210 02208009 mov r1,r2 |
FFFFFFFFFFFFC214 BE04FEEF loop r9,btos3 |
FFFFFFFFFFFFC78C BinToStr: |
FFFFFFFFFFFFC78C 0FEF0038 subui sp,sp,#56 |
FFFFFFFFFFFFC790 67E18000 sw r3,[sp] |
FFFFFFFFFFFFC794 67E38008 sw r7,8[sp] |
FFFFFFFFFFFFC798 67E40010 sw r8,16[sp] |
FFFFFFFFFFFFC79C 67E48018 sw r9,24[sp] |
FFFFFFFFFFFFC7A0 67E50020 sw r10,32[sp] |
FFFFFFFFFFFFC7A4 67E58028 sw r11,40[sp] |
FFFFFFFFFFFFC7A8 67EF8030 sw lr,48[sp] |
FFFFFFFFFFFFC7AC 02258009 mov r11,r2 |
FFFFFFFFFFFFC7B0 31FFF1AD call BinToBCD |
FFFFFFFFFFFFC7B4 02250009 mov r10,r2 ; save off r2 |
FFFFFFFFFFFFC7B8 31FFF1CC call BCDToAscii |
FFFFFFFFFFFFC7BC E2400001 setlo r9,#1 |
FFFFFFFFFFFFC7C0 btos3: |
FFFFFFFFFFFFC7C0 E2000007 setlo r8,#7 |
FFFFFFFFFFFFC7C4 btos1: |
FFFFFFFFFFFFC7C4 06938600 shli r7,r9,#3 |
FFFFFFFFFFFFC7C8 0A738000 addui r7,r7,r8 |
FFFFFFFFFFFFC7CC 0A738004 addui r7,r7,#4 |
FFFFFFFFFFFFC7D0 141180FF andi r3,r1,#0xff |
FFFFFFFFFFFFC7D4 6A758C10 sb r3,[r7+r11] |
FFFFFFFFFFFFC7D8 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFC7DC BE047F4F loop r8,btos1 |
FFFFFFFFFFFFC7E0 02208009 mov r1,r2 |
FFFFFFFFFFFFC7E4 BE04FEEF loop r9,btos3 |
; the last four digits |
FFFFFFFFFFFFC218 02A08009 mov r1,r10 ; get back r2 |
FFFFFFFFFFFFC21C 31FFF058 call BCDToAscii |
FFFFFFFFFFFFC220 E2000003 setlo r8,#3 |
FFFFFFFFFFFFC224 btos2: |
FFFFFFFFFFFFC224 141180FF andi r3,r1,#0xff |
FFFFFFFFFFFFC228 6A858C10 sb r3,[r8+r11] |
FFFFFFFFFFFFC22C 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFC230 BE047FAF loop r8,btos2 |
FFFFFFFFFFFFC234 60B00014 sb r0,20[r11] ; null terminate |
FFFFFFFFFFFFC238 47E18000 lw r3,[sp] |
FFFFFFFFFFFFC23C 47E38008 lw r7,8[sp] |
FFFFFFFFFFFFC240 47E40010 lw r8,16[sp] |
FFFFFFFFFFFFC244 47E48018 lw r9,24[sp] |
FFFFFFFFFFFFC248 47E50020 lw r10,32[sp] |
FFFFFFFFFFFFC24C 47E58028 lw r11,40[sp] |
FFFFFFFFFFFFC250 47EF8030 lw lr,48[sp] |
FFFFFFFFFFFFC254 37EF8038 ret #56 |
FFFFFFFFFFFFC7E8 02A08009 mov r1,r10 ; get back r2 |
FFFFFFFFFFFFC7EC 31FFF1CC call BCDToAscii |
FFFFFFFFFFFFC7F0 E2000003 setlo r8,#3 |
FFFFFFFFFFFFC7F4 btos2: |
FFFFFFFFFFFFC7F4 141180FF andi r3,r1,#0xff |
FFFFFFFFFFFFC7F8 6A858C10 sb r3,[r8+r11] |
FFFFFFFFFFFFC7FC 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFC800 BE047FAF loop r8,btos2 |
FFFFFFFFFFFFC804 60B00014 sb r0,20[r11] ; null terminate |
FFFFFFFFFFFFC808 47E18000 lw r3,[sp] |
FFFFFFFFFFFFC80C 47E38008 lw r7,8[sp] |
FFFFFFFFFFFFC810 47E40010 lw r8,16[sp] |
FFFFFFFFFFFFC814 47E48018 lw r9,24[sp] |
FFFFFFFFFFFFC818 47E50020 lw r10,32[sp] |
FFFFFFFFFFFFC81C 47E58028 lw r11,40[sp] |
FFFFFFFFFFFFC820 47EF8030 lw lr,48[sp] |
FFFFFFFFFFFFC824 37EF8038 ret #56 |
|
|
;============================================================================== |
; System Monitor Program |
;============================================================================== |
FFFFFFFFFFFFC258 Monitor: |
FFFFFFFFFFFFC258 E6BEFFF8 ; SETLO |
FFFFFFFFFFFFC25C 6A0D782D lea sp,STACKTOP0 ; top of stack; reset the stack pointer |
FFFFFFFFFFFFC260 6000141C sb r0,KeybdEcho ; turn off keyboard echo |
FFFFFFFFFFFFC264 PromptLn: |
FFFFFFFFFFFFC264 31FFEFFA call CRLF |
FFFFFFFFFFFFC268 E0400024 setlo r1,#'$' |
FFFFFFFFFFFFC26C 31FFEF47 call DisplayChar |
; |
FFFFFFFFFFFFC828 Monitor: |
FFFFFFFFFFFFC828 E6BEFFF8 ; SETLO |
FFFFFFFFFFFFC82C 6A0D782D lea sp,STACKTOP0 ; top of stack; reset the stack pointer |
FFFFFFFFFFFFC830 6000141C sb r0,KeybdEcho ; turn off keyboard echo |
FFFFFFFFFFFFC834 PromptLn: |
FFFFFFFFFFFFC834 31FFF135 call CRLF |
FFFFFFFFFFFFC838 E0400024 setlo r1,#'$' |
FFFFFFFFFFFFC83C 31FFF07F call DisplayChar |
|
; Get characters until a CR is keyed |
; |
FFFFFFFFFFFFC270 Prompt3: |
FFFFFFFFFFFFC270 31FFEE08 call KeybdGetChar |
FFFFFFFFFFFFC274 B01FFFFF beqi r1,#-1,Prompt3 ; wait for a character |
FFFFFFFFFFFFC278 B010030D beqi r1,#CR,Prompt1 |
FFFFFFFFFFFFC27C 31FFEF47 call DisplayChar |
FFFFFFFFFFFFC280 BE007F8A bra Prompt3 |
FFFFFFFFFFFFC840 Prompt3: |
; lw r1,#2 ; get keyboard character |
; syscall #417 |
FFFFFFFFFFFFC840 31FFEF07 call KeybdGetChar |
FFFFFFFFFFFFC844 B01FFFFF beqi r1,#-1,Prompt3 ; wait for a character |
FFFFFFFFFFFFC848 B010030D beqi r1,#CR,Prompt1 |
FFFFFFFFFFFFC84C 31FFF07F call DisplayChar |
FFFFFFFFFFFFC850 BE007F8A bra Prompt3 |
|
; Process the screen line that the CR was keyed on |
; |
FFFFFFFFFFFFC284 Prompt1: |
FFFFFFFFFFFFC284 62001418 sc r0,CursorCol ; go back to the start of the line |
FFFFFFFFFFFFC288 31FFEF37 call CalcScreenLoc ; r1 = screen memory location |
FFFFFFFFFFFFC28C 04100C09 or r3,r1,r0 |
FFFFFFFFFFFFC290 82308000 inch r1,[r3] |
FFFFFFFFFFFFC294 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC298 31FFEF33 call ScreenToAscii |
FFFFFFFFFFFFC29C B2100424 bnei r1,#'$',Prompt2 ; skip over '$' prompt character |
FFFFFFFFFFFFC2A0 82308000 inch r1,[r3] |
FFFFFFFFFFFFC2A4 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC2A8 31FFEF33 call ScreenToAscii |
FFFFFFFFFFFFC854 Prompt1: |
FFFFFFFFFFFFC854 60001418 sb r0,CursorCol ; go back to the start of the line |
FFFFFFFFFFFFC858 31FFF06F call CalcScreenLoc ; r1 = screen memory location |
FFFFFFFFFFFFC85C 02118009 mov r3,r1 |
FFFFFFFFFFFFC860 82308000 inch r1,[r3] |
FFFFFFFFFFFFC864 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC868 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFC86C B2100424 bnei r1,#'$',Prompt2 ; skip over '$' prompt character |
FFFFFFFFFFFFC870 82308000 inch r1,[r3] |
FFFFFFFFFFFFC874 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC878 31FFF06B call ScreenToAscii |
|
; Dispatch based on command character |
; |
FFFFFFFFFFFFC2AC Prompt2: |
FFFFFFFFFFFFC2AC B010563A beqi r1,#':',Editmem ; $: - edit memory |
FFFFFFFFFFFFC2B0 B0106344 beqi r1,#'D',Dumpmem ; $D - dump memory |
FFFFFFFFFFFFC2B4 B012EF42 beqi r1,#'B',CSTART ; $B - start tiny basic |
FFFFFFFFFFFFC2B8 B0105D4A beqi r1,#'J',ExecuteCode ; $J - execute code |
FFFFFFFFFFFFC2BC B010914C beqi r1,#'L',LoadS19 ; $L - load S19 file |
FFFFFFFFFFFFC2C0 B010153F beqi r1,#'?',DisplayHelp ; $? - display help |
FFFFFFFFFFFFC2C4 B0100743 beqi r1,#'C',TestCLS ; $C - clear screen |
FFFFFFFFFFFFC2C8 B0100452 beqi r1,#'R',RandomLinesCall |
FFFFFFFFFFFFC2CC B012B849 beqi r1,#'I',Invaders |
FFFFFFFFFFFFC2D0 B011A350 beqi r1,#'P',Piano |
FFFFFFFFFFFFC2D4 BE007C2A bra Monitor |
FFFFFFFFFFFFC87C Prompt2: |
FFFFFFFFFFFFC87C B0106A3A beqi r1,#':',Editmem ; $: - edit memory |
FFFFFFFFFFFFC880 B0107C44 beqi r1,#'D',Dumpmem ; $D - dump memory |
FFFFFFFFFFFFC884 B0109446 beqi r1,#'F',Fillmem ; $F - fill memory |
FFFFFFFFFFFFC888 Prompt7: |
FFFFFFFFFFFFC888 B2100242 bnei r1,#'B',Prompt4 ; $B - start tiny basic |
FFFFFFFFFFFFC88C 33FFF7E0 jmp CSTART |
FFFFFFFFFFFFC890 Prompt4: |
FFFFFFFFFFFFC890 B0106F4A beqi r1,#'J',ExecuteCode ; $J - execute code |
FFFFFFFFFFFFC894 B210024C bnei r1,#'L',Prompt9 ; $L - load S19 file |
FFFFFFFFFFFFC898 33FFF297 jmp LoadSector |
FFFFFFFFFFFFC89C Prompt9: |
FFFFFFFFFFFFC89C B210043F bnei r1,#'?',Prompt10 ; $? - display help |
FFFFFFFFFFFFC8A0 9A00C910 lea r1,HelpMsg |
FFFFFFFFFFFFC8A4 31FFF122 call DisplayString |
FFFFFFFFFFFFC8A8 33FFF20A jmp Monitor |
FFFFFFFFFFFFC8AC Prompt10: |
FFFFFFFFFFFFC8AC B0100C43 beqi r1,#'C',TestCLS ; $C - clear screen |
FFFFFFFFFFFFC8B0 B2100252 bnei r1,#'R',Prompt12 |
FFFFFFFFFFFFC8B4 33FFF235 jmp RandomLinesCall |
FFFFFFFFFFFFC8B8 Prompt12: |
FFFFFFFFFFFFC8B8 B2100249 bnei r1,#'I',Prompt13 |
FFFFFFFFFFFFC8BC 33FFF528 jmp Invaders |
FFFFFFFFFFFFC8C0 Prompt13: |
FFFFFFFFFFFFC8C0 B2100250 bnei r1,#'P',Prompt14 |
FFFFFFFFFFFFC8C4 33FFF411 jmp Piano |
FFFFFFFFFFFFC8C8 Prompt14: |
FFFFFFFFFFFFC8C8 B2100254 bnei r1,#'T',Prompt15 |
FFFFFFFFFFFFC8CC 31FFEF53 call tmp_read |
FFFFFFFFFFFFC8D0 Prompt15: |
FFFFFFFFFFFFC8D0 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFC2D8 RandomLinesCall: |
FFFFFFFFFFFFC2D8 31FFF1BC call RandomLines |
FFFFFFFFFFFFC2DC BE007BEA bra Monitor |
FFFFFFFFFFFFC8D4 RandomLinesCall: |
FFFFFFFFFFFFC8D4 31FFF374 call RandomLines |
FFFFFFFFFFFFC8D8 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFC2E0 TestCLS: |
FFFFFFFFFFFFC2E0 82308000 inch r1,[r3] |
FFFFFFFFFFFFC2E4 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC2E8 31FFEF33 call ScreenToAscii |
FFFFFFFFFFFFC2EC B21FDB4C bnei r1,#'L',Monitor |
FFFFFFFFFFFFC2F0 82308000 inch r1,[r3] |
FFFFFFFFFFFFC2F4 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC2F8 31FFEF33 call ScreenToAscii |
FFFFFFFFFFFFC2FC B21FD753 bnei r1,#'S',Monitor |
FFFFFFFFFFFFC300 31FFEED9 call ClearScreen |
FFFFFFFFFFFFC304 60001418 sb r0,CursorCol |
FFFFFFFFFFFFC308 60001416 sb r0,CursorRow |
FFFFFFFFFFFFC30C 31FFEF37 call CalcScreenLoc |
FFFFFFFFFFFFC310 BE007A4A bra Monitor |
FFFFFFFFFFFFC8DC TestCLS: |
FFFFFFFFFFFFC8DC 82308000 inch r1,[r3] |
FFFFFFFFFFFFC8E0 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC8E4 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFC8E8 B21FD04C bnei r1,#'L',Monitor |
FFFFFFFFFFFFC8EC 82308000 inch r1,[r3] |
FFFFFFFFFFFFC8F0 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC8F4 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFC8F8 B21FCC53 bnei r1,#'S',Monitor |
FFFFFFFFFFFFC8FC 31FFF011 call ClearScreen |
FFFFFFFFFFFFC900 60001418 sb r0,CursorCol |
FFFFFFFFFFFFC904 60001417 sb r0,CursorRow |
FFFFFFFFFFFFC908 31FFF06F call CalcScreenLoc |
FFFFFFFFFFFFC90C 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFC314 DisplayHelp: |
FFFFFFFFFFFFC314 E07FC320 setlo r1,HelpMsg |
FFFFFFFFFFFFC318 31FFEFE7 call DisplayString |
FFFFFFFFFFFFC31C BE0079EA bra Monitor |
FFFFFFFFFFFFC910 HelpMsg: |
FFFFFFFFFFFFC910 70736944203D203F db "? = Display help",CR,LF |
FFFFFFFFFFFFC918 706C65682079616C |
FFFFFFFFFFFFC920 203D20534C430A0D db "CLS = clear screen",CR,LF |
FFFFFFFFFFFFC928 6373207261656C63 |
FFFFFFFFFFFFC930 203A0A0D6E656572 db ": = Edit memory bytes",CR,LF |
FFFFFFFFFFFFC938 6D2074696445203D |
FFFFFFFFFFFFC940 79622079726F6D65 |
FFFFFFFFFFFFC948 3D204C0A0D736574 db "L = Load S19 file",CR,LF |
FFFFFFFFFFFFC950 31532064616F4C20 |
FFFFFFFFFFFFC958 0A0D656C69662039 |
FFFFFFFFFFFFC960 7C487C437C425B44 db "D[B|C|H|W] = Dump memory",CR,LF |
FFFFFFFFFFFFC968 6D7544203D205D57 |
FFFFFFFFFFFFC970 79726F6D656D2070 |
FFFFFFFFFFFFC978 7C437C425B460A0D db "F[B|C|H|W] = Fill memory",CR,LF |
FFFFFFFFFFFFC980 46203D205D577C48 |
FFFFFFFFFFFFC988 6F6D656D206C6C69 |
FFFFFFFFFFFFC990 203D20420A0D7972 db "B = start tiny basic",CR,LF |
FFFFFFFFFFFFC998 6974207472617473 |
FFFFFFFFFFFFC9A0 636973616220796E |
FFFFFFFFFFFFC9A8 754A203D204A0A0D db "J = Jump to code",CR,LF |
FFFFFFFFFFFFC9B0 6F63206F7420706D |
FFFFFFFFFFFFC9B8 203D20490A0D6564 db "I = Invaders",CR,LF |
FFFFFFFFFFFFC9C0 7372656461766E49 |
FFFFFFFFFFFFC9C8 6152203D20520A0D db "R = Random lines",CR,LF |
FFFFFFFFFFFFC9D0 6E696C206D6F646E |
FFFFFFFFFFFFC9D8 203D20540A0D7365 db "T = get temperature",CR,LF |
FFFFFFFFFFFFC9E0 706D657420746567 |
FFFFFFFFFFFFC9E8 0D65727574617265 |
FFFFFFFFFFFFC9F0 616950203D20500A db "P = Piano",CR,LF,0 |
FFFFFFFFFFFFC9F8 000000000A0D6F6E align 4 |
FFFFFFFFFFFFCA00 align 4 |
|
FFFFFFFFFFFFC320 align 16 |
FFFFFFFFFFFFC320 HelpMsg: |
FFFFFFFFFFFFC320 70736944203D203F db "? = Display help",CR,LF |
FFFFFFFFFFFFC328 706C65682079616C |
FFFFFFFFFFFFC330 203D20534C430A0D db "CLS = clear screen",CR,LF |
FFFFFFFFFFFFC338 6373207261656C63 |
FFFFFFFFFFFFC340 203A0A0D6E656572 db ": = Edit memory bytes",CR,LF |
FFFFFFFFFFFFC348 6D2074696445203D |
FFFFFFFFFFFFC350 79622079726F6D65 |
FFFFFFFFFFFFC358 3D204C0A0D736574 db "L = Load S19 file",CR,LF |
FFFFFFFFFFFFC360 31532064616F4C20 |
FFFFFFFFFFFFC368 0A0D656C69662039 |
FFFFFFFFFFFFC370 706D7544203D2044 db "D = Dump memory",CR,LF |
FFFFFFFFFFFFC378 0D79726F6D656D20 |
FFFFFFFFFFFFC380 617473203D20420A db "B = start tiny basic",CR,LF |
FFFFFFFFFFFFC388 20796E6974207472 |
FFFFFFFFFFFFC390 4A0A0D6369736162 db "J = Jump to code",CR,LF |
FFFFFFFFFFFFC398 20706D754A203D20 |
FFFFFFFFFFFFC3A0 0D65646F63206F74 |
FFFFFFFFFFFFC3A8 766E49203D20490A db "I = Invaders",CR,LF |
FFFFFFFFFFFFC3B0 520A0D7372656461 db "R = Random lines",CR,LF |
FFFFFFFFFFFFC3B8 6F646E6152203D20 |
FFFFFFFFFFFFC3C0 0D73656E696C206D |
FFFFFFFFFFFFC3C8 616950203D20500A db "P = Piano",CR,LF,0 |
FFFFFFFFFFFFC3D0 000000000A0D6F6E align 16 |
FFFFFFFFFFFFC3D8 0000000000000000 |
FFFFFFFFFFFFC3E0 align 16 |
|
;------------------------------------------------------------------------------ |
; Ignore blanks in the input |
; r3 = text pointer |
1955,64 → 2621,133
; r1 destroyed |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC3E0 ignBlanks: |
FFFFFFFFFFFFC3E0 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFC3E4 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFC3E8 ignBlanks1: |
FFFFFFFFFFFFC3E8 82308000 inch r1,[r3] |
FFFFFFFFFFFFC3EC 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC3F0 31FFEF33 call ScreenToAscii |
FFFFFFFFFFFFC3F4 B01FFD20 beqi r1,#' ',ignBlanks1 |
FFFFFFFFFFFFC3F8 0E318002 subui r3,r3,#2 |
FFFFFFFFFFFFC3FC 47EF8000 lw r31,[sp] |
FFFFFFFFFFFFC400 37EF8008 ret #8 |
FFFFFFFFFFFFCA00 ignBlanks: |
FFFFFFFFFFFFCA00 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCA04 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFCA08 ignBlanks1: |
FFFFFFFFFFFFCA08 82308000 inch r1,[r3] |
FFFFFFFFFFFFCA0C 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFCA10 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFCA14 B01FFD20 beqi r1,#' ',ignBlanks1 |
FFFFFFFFFFFFCA18 0E318002 subui r3,r3,#2 |
FFFFFFFFFFFFCA1C 47EF8000 lw r31,[sp] |
FFFFFFFFFFFFCA20 37EF8008 ret #8 |
|
;------------------------------------------------------------------------------ |
; Edit memory byte(s). |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC404 EditMem: |
FFFFFFFFFFFFC404 31FFF0F8 call ignBlanks |
FFFFFFFFFFFFC408 31FFF11C call GetHexNumber |
FFFFFFFFFFFFC40C 04101409 or r5,r1,r0 |
FFFFFFFFFFFFC410 E1000007 setlo r4,#7 |
FFFFFFFFFFFFC414 edtmem1: |
FFFFFFFFFFFFC414 31FFF0F8 call ignBlanks |
FFFFFFFFFFFFC418 31FFF11C call GetHexNumber |
FFFFFFFFFFFFC41C 60508000 sb r1,[r5] |
FFFFFFFFFFFFC420 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFC424 BE027F8F loop r4,edtmem1 |
FFFFFFFFFFFFC428 BE00718A bra Monitor |
FFFFFFFFFFFFCA24 EditMem: |
FFFFFFFFFFFFCA24 31FFF280 call ignBlanks |
FFFFFFFFFFFFCA28 31FFF2D4 call GetHexNumber |
FFFFFFFFFFFFCA2C 04101409 or r5,r1,r0 |
FFFFFFFFFFFFCA30 E1000007 setlo r4,#7 |
FFFFFFFFFFFFCA34 edtmem1: |
FFFFFFFFFFFFCA34 31FFF280 call ignBlanks |
FFFFFFFFFFFFCA38 31FFF2D4 call GetHexNumber |
FFFFFFFFFFFFCA3C 60508000 sb r1,[r5] |
FFFFFFFFFFFFCA40 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFCA44 BE027F8F loop r4,edtmem1 |
FFFFFFFFFFFFCA48 33FFF20A jmp Monitor |
|
;------------------------------------------------------------------------------ |
; Execute code at the specified address. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC42C ExecuteCode: |
FFFFFFFFFFFFC42C 31FFF0F8 call ignBlanks |
FFFFFFFFFFFFC430 31FFF11C call GetHexNumber |
FFFFFFFFFFFFC434 341F8000 jal r31,[r1] |
FFFFFFFFFFFFC438 BE00710A bra Monitor |
FFFFFFFFFFFFCA4C ExecuteCode: |
FFFFFFFFFFFFCA4C 31FFF280 call ignBlanks |
FFFFFFFFFFFFCA50 31FFF2D4 call GetHexNumber |
FFFFFFFFFFFFCA54 341F8000 jal r31,[r1] |
FFFFFFFFFFFFCA58 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFCA5C LoadSector: |
FFFFFFFFFFFFCA5C 31FFF280 call ignBlanks |
FFFFFFFFFFFFCA60 31FFF2D4 call GetHexNumber |
FFFFFFFFFFFFCA64 16013800 lw r2,#0x3800 |
FFFFFFFFFFFFCA68 31FFF56D call spi_read_sector |
FFFFFFFFFFFFCA6C 33FFF20A jmp Monitor |
|
;------------------------------------------------------------------------------ |
; Do a memory dump of the requested location. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC43C DumpMem: |
FFFFFFFFFFFFC43C 31FFF0F8 call ignBlanks |
FFFFFFFFFFFFC440 31FFF11C call GetHexNumber |
FFFFFFFFFFFFC444 02110009 mov r2,r1 |
FFFFFFFFFFFFC448 31FFEFFA call CRLF |
FFFFFFFFFFFFC44C 31FFF025 call DisplayMem |
FFFFFFFFFFFFC450 31FFF025 call DisplayMem |
FFFFFFFFFFFFC454 31FFF025 call DisplayMem |
FFFFFFFFFFFFC458 31FFF025 call DisplayMem |
FFFFFFFFFFFFC45C 31FFF025 call DisplayMem |
FFFFFFFFFFFFC460 31FFF025 call DisplayMem |
FFFFFFFFFFFFC464 31FFF025 call DisplayMem |
FFFFFFFFFFFFC468 31FFF025 call DisplayMem |
FFFFFFFFFFFFC46C BE006F6A bra Monitor |
FFFFFFFFFFFFCA70 DumpMem: |
FFFFFFFFFFFFCA70 82308000 inch r1,[r3] |
FFFFFFFFFFFFCA74 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFCA78 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFCA7C 02130009 mov r6,r1 ; r6 = fill type character |
FFFFFFFFFFFFCA80 31FFF280 call ignBlanks |
FFFFFFFFFFFFCA84 31FFF2D4 call GetHexNumber ; get start address of dump |
FFFFFFFFFFFFCA88 02110009 mov r2,r1 |
FFFFFFFFFFFFCA8C 31FFF280 call ignBlanks |
FFFFFFFFFFFFCA90 31FFF2D4 call GetHexNumber ; get number of bytes to dump |
FFFFFFFFFFFFCA94 06108601 shrui r1,r1,#3 ; 1/8 as many dump rows |
FFFFFFFFFFFFCA98 B2100200 bnei r1,#0,Dumpmem2 |
FFFFFFFFFFFFCA9C 16008001 lw r1,#1 ; dump at least one row |
FFFFFFFFFFFFCAA0 Dumpmem2: |
FFFFFFFFFFFFCAA0 31FFF135 call CRLF |
FFFFFFFFFFFFCAA4 B0600857 beqi r6,#'W',DumpmemW |
; beqi r6,#'H',DumpmemH |
FFFFFFFFFFFFCAA8 B0600443 beqi r6,#'C',DumpmemC |
FFFFFFFFFFFFCAAC DumpmemB: |
FFFFFFFFFFFFCAAC 31FFF175 call DisplayMemB |
FFFFFFFFFFFFCAB0 BE00FFEF loop r1,DumpmemB |
FFFFFFFFFFFFCAB4 33FFF20A jmp Monitor |
FFFFFFFFFFFFCAB8 DumpmemC: |
FFFFFFFFFFFFCAB8 31FFF189 call DisplayMemC |
FFFFFFFFFFFFCABC BE00FFEF loop r1,DumpmemC |
FFFFFFFFFFFFCAC0 33FFF20A jmp Monitor |
FFFFFFFFFFFFCAC4 DumpmemW: |
FFFFFFFFFFFFCAC4 31FFF19D call DisplayMemW |
FFFFFFFFFFFFCAC8 BE00FFEF loop r1,DumpmemW |
FFFFFFFFFFFFCACC 33FFF20A jmp Monitor |
|
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
FFFFFFFFFFFFCAD0 BE006ACA bra Monitor |
|
FFFFFFFFFFFFCAD4 Fillmem: |
FFFFFFFFFFFFCAD4 82308000 inch r1,[r3] |
FFFFFFFFFFFFCAD8 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFCADC 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFCAE0 02130009 mov r6,r1 ; r6 = fill type character |
FFFFFFFFFFFFCAE4 31FFF280 call ignBlanks |
FFFFFFFFFFFFCAE8 31FFF2D4 call GetHexNumber ; get start address of dump |
FFFFFFFFFFFFCAEC 02110009 mov r2,r1 |
FFFFFFFFFFFFCAF0 31FFF280 call ignBlanks |
FFFFFFFFFFFFCAF4 31FFF2D4 call GetHexNumber ; get number of bytes to fill |
FFFFFFFFFFFFCAF8 02128009 mov r5,r1 |
FFFFFFFFFFFFCAFC 31FFF280 call ignBlanks |
FFFFFFFFFFFFCB00 31FFF2D4 call GetHexNumber ; get the fill byte |
FFFFFFFFFFFFCB04 B0600743 beqi r6,#'C',FillmemC |
FFFFFFFFFFFFCB08 B0600A48 beqi r6,#'H',FillmemH |
FFFFFFFFFFFFCB0C B0600D57 beqi r6,#'W',FillmemW |
FFFFFFFFFFFFCB10 FillmemB: |
FFFFFFFFFFFFCB10 60208000 sb r1,[r2] |
FFFFFFFFFFFFCB14 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFCB18 BE02FFCF loop r5,FillmemB |
FFFFFFFFFFFFCB1C 33FFF20A jmp Monitor |
FFFFFFFFFFFFCB20 FillmemC: |
FFFFFFFFFFFFCB20 62208000 sc r1,[r2] |
FFFFFFFFFFFFCB24 0A210002 addui r2,r2,#2 |
FFFFFFFFFFFFCB28 BE02FFCF loop r5,FillmemC |
FFFFFFFFFFFFCB2C 33FFF20A jmp Monitor |
FFFFFFFFFFFFCB30 FillmemH: |
FFFFFFFFFFFFCB30 64208000 sh r1,[r2] |
FFFFFFFFFFFFCB34 0A210004 addui r2,r2,#4 |
FFFFFFFFFFFFCB38 BE02FFCF loop r5,FillmemH |
FFFFFFFFFFFFCB3C 33FFF20A jmp Monitor |
FFFFFFFFFFFFCB40 FillmemW: |
FFFFFFFFFFFFCB40 66208000 sw r1,[r2] |
FFFFFFFFFFFFCB44 0A210008 addui r2,r2,#8 |
FFFFFFFFFFFFCB48 BE02FFCF loop r5,FillmemW |
FFFFFFFFFFFFCB4C 33FFF20A jmp Monitor |
|
;------------------------------------------------------------------------------ |
; Get a hexidecimal number. Maximum of sixteen digits. |
; R3 = text pointer (updated) |
2019,29 → 2754,29
; R1 = hex number |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC470 GetHexNumber: |
FFFFFFFFFFFFC470 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC474 67E10000 sw r2,[sp] |
FFFFFFFFFFFFC478 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFC47C 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC480 E0800000 setlo r2,#0 |
FFFFFFFFFFFFC484 E100000F setlo r4,#15 |
FFFFFFFFFFFFC488 gthxn2: |
FFFFFFFFFFFFC488 82308000 inch r1,[r3] |
FFFFFFFFFFFFC48C 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFC490 31FFEF33 call ScreenToAscii |
FFFFFFFFFFFFC494 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC498 B01005FF beqi r1,#-1,gthxn1 |
FFFFFFFFFFFFC49C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC4A0 1410800F andi r1,r1,#0x0f |
FFFFFFFFFFFFC4A4 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC4A8 BE027F0F loop r4,gthxn2 |
FFFFFFFFFFFFC4AC gthxn1: |
FFFFFFFFFFFFC4AC 02208009 mov r1,r2 |
FFFFFFFFFFFFC4B0 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC4B4 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFC4B8 47E10000 lw r2,[sp] |
FFFFFFFFFFFFC4BC 37EF8018 ret #24 |
FFFFFFFFFFFFCB50 GetHexNumber: |
FFFFFFFFFFFFCB50 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFCB54 67E10000 sw r2,[sp] |
FFFFFFFFFFFFCB58 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFCB5C 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFCB60 E0800000 setlo r2,#0 |
FFFFFFFFFFFFCB64 E100000F setlo r4,#15 |
FFFFFFFFFFFFCB68 gthxn2: |
FFFFFFFFFFFFCB68 82308000 inch r1,[r3] |
FFFFFFFFFFFFCB6C 0A318002 addui r3,r3,#2 |
FFFFFFFFFFFFCB70 31FFF06B call ScreenToAscii |
FFFFFFFFFFFFCB74 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCB78 B01005FF beqi r1,#-1,gthxn1 |
FFFFFFFFFFFFCB7C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCB80 1410800F andi r1,r1,#0x0f |
FFFFFFFFFFFFCB84 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCB88 BE027F0F loop r4,gthxn2 |
FFFFFFFFFFFFCB8C gthxn1: |
FFFFFFFFFFFFCB8C 02208009 mov r1,r2 |
FFFFFFFFFFFFCB90 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFCB94 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFCB98 47E10000 lw r2,[sp] |
FFFFFFFFFFFFCB9C 37EF8018 ret #24 |
|
;------------------------------------------------------------------------------ |
; Convert ASCII character in the range '0' to '9', 'a' to 'f' or 'A' to 'F' |
2048,167 → 2783,167
; to a hex nybble. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC4C0 AsciiToHexNybble: |
FFFFFFFFFFFFC4C0 A8100E30 bltui r1,#'0',gthx3 |
FFFFFFFFFFFFC4C4 AE100339 bgtui r1,#'9',gthx5 |
FFFFFFFFFFFFC4C8 0E108030 subui r1,r1,#'0' |
FFFFFFFFFFFFC4CC 37EF8000 ret |
FFFFFFFFFFFFC4D0 gthx5: |
FFFFFFFFFFFFC4D0 A8100A41 bltui r1,#'A',gthx3 |
FFFFFFFFFFFFC4D4 AE100446 bgtui r1,#'F',gthx6 |
FFFFFFFFFFFFC4D8 0E108041 subui r1,r1,#'A' |
FFFFFFFFFFFFC4DC 0A10800A addui r1,r1,#10 |
FFFFFFFFFFFFC4E0 37EF8000 ret |
FFFFFFFFFFFFC4E4 gthx6: |
FFFFFFFFFFFFC4E4 A8100561 bltui r1,#'a',gthx3 |
FFFFFFFFFFFFC4E8 AE100466 bgtui r1,#'f',gthx3 |
FFFFFFFFFFFFC4EC 0E108061 subui r1,r1,#'a' |
FFFFFFFFFFFFC4F0 0A10800A addui r1,r1,#10 |
FFFFFFFFFFFFC4F4 37EF8000 ret |
FFFFFFFFFFFFC4F8 gthx3: |
FFFFFFFFFFFFC4F8 E07FFFFF setlo r1,#-1 ; not a hex number |
FFFFFFFFFFFFC4FC 37EF8000 ret |
FFFFFFFFFFFFCBA0 AsciiToHexNybble: |
FFFFFFFFFFFFCBA0 A8100E30 bltui r1,#'0',gthx3 |
FFFFFFFFFFFFCBA4 AE100339 bgtui r1,#'9',gthx5 |
FFFFFFFFFFFFCBA8 0E108030 subui r1,r1,#'0' |
FFFFFFFFFFFFCBAC 37EF8000 ret |
FFFFFFFFFFFFCBB0 gthx5: |
FFFFFFFFFFFFCBB0 A8100A41 bltui r1,#'A',gthx3 |
FFFFFFFFFFFFCBB4 AE100446 bgtui r1,#'F',gthx6 |
FFFFFFFFFFFFCBB8 0E108041 subui r1,r1,#'A' |
FFFFFFFFFFFFCBBC 0A10800A addui r1,r1,#10 |
FFFFFFFFFFFFCBC0 37EF8000 ret |
FFFFFFFFFFFFCBC4 gthx6: |
FFFFFFFFFFFFCBC4 A8100561 bltui r1,#'a',gthx3 |
FFFFFFFFFFFFCBC8 AE100466 bgtui r1,#'f',gthx3 |
FFFFFFFFFFFFCBCC 0E108061 subui r1,r1,#'a' |
FFFFFFFFFFFFCBD0 0A10800A addui r1,r1,#10 |
FFFFFFFFFFFFCBD4 37EF8000 ret |
FFFFFFFFFFFFCBD8 gthx3: |
FFFFFFFFFFFFCBD8 E07FFFFF setlo r1,#-1 ; not a hex number |
FFFFFFFFFFFFCBDC 37EF8000 ret |
|
;============================================================================== |
; Load an S19 format file |
;============================================================================== |
; |
FFFFFFFFFFFFC500 LoadS19: |
FFFFFFFFFFFFC500 BE00006A bra ProcessRec |
FFFFFFFFFFFFC504 NextRec: |
FFFFFFFFFFFFC504 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC508 B21FFF0A bne r1,#LF,NextRec |
FFFFFFFFFFFFC50C ProcessRec: |
FFFFFFFFFFFFC50C 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC510 B01F521A beqi r1,#26,Monitor ; CTRL-Z ? |
FFFFFFFFFFFFC514 B21FFC53 bnei r1,#'S',NextRec |
FFFFFFFFFFFFC518 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC51C A01FFA30 blt r1,#'0',NextRec |
FFFFFFFFFFFFC520 A61FF939 bgt r1,#'9',NextRec |
FFFFFFFFFFFFC524 04101009 or r4,r1,r0 ; r4 = record type |
FFFFFFFFFFFFC528 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC52C 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC530 04100809 or r2,r1,r0 |
FFFFFFFFFFFFC534 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC538 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC53C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC540 04208809 or r2,r2,r1 ; r2 = byte count |
FFFFFFFFFFFFC544 04208C09 or r3,r2,r1 ; r3 = byte count |
FFFFFFFFFFFFC548 B04FEF30 beqi r4,#'0',NextRec ; manufacturer ID record, ignore |
FFFFFFFFFFFFC54C B0401E31 beqi r4,#'1',ProcessS1 |
FFFFFFFFFFFFC550 B0401F32 beqi r4,#'2',ProcessS2 |
FFFFFFFFFFFFC554 B0402033 beqi r4,#'3',ProcessS3 |
FFFFFFFFFFFFC558 B04FEB35 beqi r4,#'5',NextRec ; record count record, ignore |
FFFFFFFFFFFFC55C B0402037 beqi r4,#'7',ProcessS7 |
FFFFFFFFFFFFC560 B0402238 beqi r4,#'8',ProcessS8 |
FFFFFFFFFFFFC564 B0402439 beqi r4,#'9',ProcessS9 |
FFFFFFFFFFFFC568 BE007CEA bra NextRec |
FFFFFFFFFFFFCBE0 LoadS19: |
FFFFFFFFFFFFCBE0 BE00006A bra ProcessRec |
FFFFFFFFFFFFCBE4 NextRec: |
FFFFFFFFFFFFCBE4 31FFF36A call sGetChar |
FFFFFFFFFFFFCBE8 B21FFF0A bne r1,#LF,NextRec |
FFFFFFFFFFFFCBEC ProcessRec: |
FFFFFFFFFFFFCBEC 31FFF36A call sGetChar |
FFFFFFFFFFFFCBF0 B01F0E1A beqi r1,#26,Monitor ; CTRL-Z ? |
FFFFFFFFFFFFCBF4 B21FFC53 bnei r1,#'S',NextRec |
FFFFFFFFFFFFCBF8 31FFF36A call sGetChar |
FFFFFFFFFFFFCBFC A01FFA30 blt r1,#'0',NextRec |
FFFFFFFFFFFFCC00 A61FF939 bgt r1,#'9',NextRec |
FFFFFFFFFFFFCC04 04101009 or r4,r1,r0 ; r4 = record type |
FFFFFFFFFFFFCC08 31FFF36A call sGetChar |
FFFFFFFFFFFFCC0C 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCC10 04100809 or r2,r1,r0 |
FFFFFFFFFFFFCC14 31FFF36A call sGetChar |
FFFFFFFFFFFFCC18 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCC1C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCC20 04208809 or r2,r2,r1 ; r2 = byte count |
FFFFFFFFFFFFCC24 04208C09 or r3,r2,r1 ; r3 = byte count |
FFFFFFFFFFFFCC28 B04FEF30 beqi r4,#'0',NextRec ; manufacturer ID record, ignore |
FFFFFFFFFFFFCC2C B0401E31 beqi r4,#'1',ProcessS1 |
FFFFFFFFFFFFCC30 B0401F32 beqi r4,#'2',ProcessS2 |
FFFFFFFFFFFFCC34 B0402033 beqi r4,#'3',ProcessS3 |
FFFFFFFFFFFFCC38 B04FEB35 beqi r4,#'5',NextRec ; record count record, ignore |
FFFFFFFFFFFFCC3C B0402037 beqi r4,#'7',ProcessS7 |
FFFFFFFFFFFFCC40 B0402238 beqi r4,#'8',ProcessS8 |
FFFFFFFFFFFFCC44 B0402439 beqi r4,#'9',ProcessS9 |
FFFFFFFFFFFFCC48 BE007CEA bra NextRec |
|
FFFFFFFFFFFFC56C pcssxa: |
FFFFFFFFFFFFC56C 143180FF andi r3,r3,#0xff |
FFFFFFFFFFFFC570 0E318001 subui r3,r3,#1 ; one less for loop |
FFFFFFFFFFFFC574 pcss1a: |
FFFFFFFFFFFFC574 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC578 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC57C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC580 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC584 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC588 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC58C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC590 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC594 60510000 sb r2,[r5] |
FFFFFFFFFFFFC598 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFC59C BE01FECF loop r3,pcss1a |
FFFFFFFFFFFFCC4C pcssxa: |
FFFFFFFFFFFFCC4C 143180FF andi r3,r3,#0xff |
FFFFFFFFFFFFCC50 0E318001 subui r3,r3,#1 ; one less for loop |
FFFFFFFFFFFFCC54 pcss1a: |
FFFFFFFFFFFFCC54 31FFF36A call sGetChar |
FFFFFFFFFFFFCC58 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCC5C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCC60 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCC64 31FFF36A call sGetChar |
FFFFFFFFFFFFCC68 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCC6C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCC70 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCC74 60510000 sb r2,[r5] |
FFFFFFFFFFFFCC78 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFCC7C BE01FECF loop r3,pcss1a |
; Get the checksum byte |
FFFFFFFFFFFFC5A0 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC5A4 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC5A8 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC5AC 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC5B0 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC5B4 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC5B8 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC5BC 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC5C0 BE007A2A bra NextRec |
FFFFFFFFFFFFCC80 31FFF36A call sGetChar |
FFFFFFFFFFFFCC84 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCC88 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCC8C 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCC90 31FFF36A call sGetChar |
FFFFFFFFFFFFCC94 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCC98 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCC9C 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCCA0 BE007A2A bra NextRec |
|
FFFFFFFFFFFFC5C4 ProcessS1: |
FFFFFFFFFFFFC5C4 31FFF180 call S19Get16BitAddress |
FFFFFFFFFFFFC5C8 BE007D2A bra pcssxa |
FFFFFFFFFFFFC5CC ProcessS2: |
FFFFFFFFFFFFC5CC 31FFF186 call S19Get24BitAddress |
FFFFFFFFFFFFC5D0 BE007CEA bra pcssxa |
FFFFFFFFFFFFC5D4 ProcessS3: |
FFFFFFFFFFFFC5D4 31FFF18C call S19Get32BitAddress |
FFFFFFFFFFFFC5D8 BE007CAA bra pcssxa |
FFFFFFFFFFFFC5DC ProcessS7: |
FFFFFFFFFFFFC5DC 31FFF18C call S19Get32BitAddress |
FFFFFFFFFFFFC5E0 66028000 sw r5,S19StartAddress |
FFFFFFFFFFFFC5E4 BE0063AA bra Monitor |
FFFFFFFFFFFFC5E8 ProcessS8: |
FFFFFFFFFFFFC5E8 31FFF186 call S19Get24BitAddress |
FFFFFFFFFFFFC5EC 66028000 sw r5,S19StartAddress |
FFFFFFFFFFFFC5F0 BE00634A bra Monitor |
FFFFFFFFFFFFC5F4 ProcessS9: |
FFFFFFFFFFFFC5F4 31FFF180 call S19Get16BitAddress |
FFFFFFFFFFFFC5F8 66028000 sw r5,S19StartAddress |
FFFFFFFFFFFFC5FC BE0062EA bra Monitor |
FFFFFFFFFFFFCCA4 ProcessS1: |
FFFFFFFFFFFFCCA4 31FFF338 call S19Get16BitAddress |
FFFFFFFFFFFFCCA8 BE007D2A bra pcssxa |
FFFFFFFFFFFFCCAC ProcessS2: |
FFFFFFFFFFFFCCAC 31FFF33E call S19Get24BitAddress |
FFFFFFFFFFFFCCB0 BE007CEA bra pcssxa |
FFFFFFFFFFFFCCB4 ProcessS3: |
FFFFFFFFFFFFCCB4 31FFF344 call S19Get32BitAddress |
FFFFFFFFFFFFCCB8 BE007CAA bra pcssxa |
FFFFFFFFFFFFCCBC ProcessS7: |
FFFFFFFFFFFFCCBC 31FFF344 call S19Get32BitAddress |
FFFFFFFFFFFFCCC0 66028000 sw r5,S19StartAddress |
FFFFFFFFFFFFCCC4 BE005B2A bra Monitor |
FFFFFFFFFFFFCCC8 ProcessS8: |
FFFFFFFFFFFFCCC8 31FFF33E call S19Get24BitAddress |
FFFFFFFFFFFFCCCC 66028000 sw r5,S19StartAddress |
FFFFFFFFFFFFCCD0 BE005ACA bra Monitor |
FFFFFFFFFFFFCCD4 ProcessS9: |
FFFFFFFFFFFFCCD4 31FFF338 call S19Get16BitAddress |
FFFFFFFFFFFFCCD8 66028000 sw r5,S19StartAddress |
FFFFFFFFFFFFCCDC 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFC600 S19Get16BitAddress: |
FFFFFFFFFFFFC600 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFC604 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFC608 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC60C 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC610 04100809 or r2,r1,r0 |
FFFFFFFFFFFFC614 BE00038A bra S1932b |
FFFFFFFFFFFFCCE0 S19Get16BitAddress: |
FFFFFFFFFFFFCCE0 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCCE4 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFCCE8 31FFF36A call sGetChar |
FFFFFFFFFFFFCCEC 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCCF0 04100809 or r2,r1,r0 |
FFFFFFFFFFFFCCF4 BE00038A bra S1932b |
|
FFFFFFFFFFFFC618 S19Get24BitAddress: |
FFFFFFFFFFFFC618 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFC61C 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFC620 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC624 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC628 04100809 or r2,r1,r0 |
FFFFFFFFFFFFC62C BE0001CA bra S1932a |
FFFFFFFFFFFFCCF8 S19Get24BitAddress: |
FFFFFFFFFFFFCCF8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCCFC 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFCD00 31FFF36A call sGetChar |
FFFFFFFFFFFFCD04 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD08 04100809 or r2,r1,r0 |
FFFFFFFFFFFFCD0C BE0001CA bra S1932a |
|
FFFFFFFFFFFFC630 S19Get32BitAddress: |
FFFFFFFFFFFFC630 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFC634 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFC638 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC63C 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC640 04100809 or r2,r1,r0 |
FFFFFFFFFFFFC644 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC648 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC64C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC650 04110809 or r2,r1,r2 |
FFFFFFFFFFFFC654 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC658 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC65C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC660 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC664 S1932a: |
FFFFFFFFFFFFC664 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC668 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC66C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC670 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC674 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC678 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC67C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC680 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC684 S1932b: |
FFFFFFFFFFFFC684 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC688 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC68C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC690 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC694 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC698 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC69C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC6A0 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC6A4 31FFF1B2 call sGetChar |
FFFFFFFFFFFFC6A8 31FFF130 call AsciiToHexNybble |
FFFFFFFFFFFFC6AC 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFC6B0 04208809 or r2,r2,r1 |
FFFFFFFFFFFFC6B4 0442100A xor r4,r4,r4 |
FFFFFFFFFFFFC6B8 04201409 or r5,r2,r0 |
FFFFFFFFFFFFC6BC 47EF8000 lw r31,[sp] |
FFFFFFFFFFFFC6C0 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFC6C4 37EF8000 ret |
FFFFFFFFFFFFCD10 S19Get32BitAddress: |
FFFFFFFFFFFFCD10 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCD14 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFCD18 31FFF36A call sGetChar |
FFFFFFFFFFFFCD1C 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD20 04100809 or r2,r1,r0 |
FFFFFFFFFFFFCD24 31FFF36A call sGetChar |
FFFFFFFFFFFFCD28 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD2C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD30 04110809 or r2,r1,r2 |
FFFFFFFFFFFFCD34 31FFF36A call sGetChar |
FFFFFFFFFFFFCD38 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD3C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD40 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCD44 S1932a: |
FFFFFFFFFFFFCD44 31FFF36A call sGetChar |
FFFFFFFFFFFFCD48 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD4C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD50 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCD54 31FFF36A call sGetChar |
FFFFFFFFFFFFCD58 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD5C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD60 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCD64 S1932b: |
FFFFFFFFFFFFCD64 31FFF36A call sGetChar |
FFFFFFFFFFFFCD68 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD6C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD70 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCD74 31FFF36A call sGetChar |
FFFFFFFFFFFFCD78 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD7C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD80 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCD84 31FFF36A call sGetChar |
FFFFFFFFFFFFCD88 31FFF2E8 call AsciiToHexNybble |
FFFFFFFFFFFFCD8C 06210800 shli r2,r2,#4 |
FFFFFFFFFFFFCD90 04208809 or r2,r2,r1 |
FFFFFFFFFFFFCD94 0442100A xor r4,r4,r4 |
FFFFFFFFFFFFCD98 04201409 or r5,r2,r0 |
FFFFFFFFFFFFCD9C 47EF8000 lw r31,[sp] |
FFFFFFFFFFFFCDA0 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFCDA4 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
; Get a character from auxillary input, checking the keyboard status for a |
2215,96 → 2950,101
; CTRL-C |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFC6C8 sGetChar: |
FFFFFFFFFFFFC6C8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFC6CC 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFC6D0 sgc2: |
FFFFFFFFFFFFC6D0 31FFEE1D call KeybdCheckForKey |
FFFFFFFFFFFFC6D4 BE106908 beq r1,r0,sgc1 |
FFFFFFFFFFFFC6D8 31FFEE08 call KeybdGetchar |
FFFFFFFFFFFFC6DC B01EDF00 beqi r1,#CRTLC,Monitor |
FFFFFFFFFFFFC6E0 sgc1: |
FFFFFFFFFFFFC6E0 31FFF95C call AUXIN |
FFFFFFFFFFFFC6E4 BE107F62 ble r1,r0,sgc2 |
FFFFFFFFFFFFC6E8 47EF8000 lw r31,[sp] |
FFFFFFFFFFFFC6EC 37EF8008 ret #8 |
FFFFFFFFFFFFCDA8 sGetChar: |
FFFFFFFFFFFFCDA8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCDAC 67EF8000 sw r31,[sp] |
FFFFFFFFFFFFCDB0 sgc2: |
FFFFFFFFFFFFCDB0 31FFEF1C call KeybdCheckForKey |
FFFFFFFFFFFFCDB4 BE103C08 beq r1,r0,sgc1 |
FFFFFFFFFFFFCDB8 31FFEF07 call KeybdGetchar |
FFFFFFFFFFFFCDBC B01E9B00 beqi r1,#CRTLC,Monitor |
FFFFFFFFFFFFCDC0 sgc1: |
FFFFFFFFFFFFCDC0 31FFFD9D call AUXIN |
FFFFFFFFFFFFCDC4 BE107F62 ble r1,r0,sgc2 |
FFFFFFFFFFFFCDC8 47EF8000 lw r31,[sp] |
FFFFFFFFFFFFCDCC 37EF8008 ret #8 |
|
;-------------------------------------------------------------------------- |
; Draw random lines on the bitmap screen. |
;-------------------------------------------------------------------------- |
FFFFFFFFFFFFC6F0 RandomLines: |
FFFFFFFFFFFFC6F0 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFC6F4 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC6F8 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFC6FC 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFC700 rl5: |
FFFFFFFFFFFFC700 00000050 gran |
FFFFFFFFFFFFC704 020088A8 mfspr r1,rand ; select a random color |
FFFFFFFFFFFFC708 E69AE000 ; SETLO |
FFFFFFFFFFFFC70C EE800003 ; SETMID |
FFFFFFFFFFFFC710 6A0D042A outh r1,GACCEL |
FFFFFFFFFFFFC714 rl1: ; random X0 |
FFFFFFFFFFFFC714 00000050 gran |
FFFFFFFFFFFFC718 020088A8 mfspr r1,rand |
FFFFFFFFFFFFC71C 16018554 lw r3,#1364 |
FFFFFFFFFFFFC720 0411841C mod r1,r1,r3 |
FFFFFFFFFFFFC724 E69AE008 ; SETLO |
FFFFFFFFFFFFC728 EE800003 ; SETMID |
FFFFFFFFFFFFC72C 6A0D042A outh r1,GACCEL+8 |
FFFFFFFFFFFFC730 rl2: ; random X1 |
FFFFFFFFFFFFC730 00000050 gran |
FFFFFFFFFFFFC734 020088A8 mfspr r1,rand |
FFFFFFFFFFFFC738 16018554 lw r3,#1364 |
FFFFFFFFFFFFC73C 0411841C mod r1,r1,r3 |
FFFFFFFFFFFFC740 E69AE010 ; SETLO |
FFFFFFFFFFFFC744 EE800003 ; SETMID |
FFFFFFFFFFFFC748 6A0D042A outh r1,GACCEL+16 |
FFFFFFFFFFFFC74C rl3: ; random Y0 |
FFFFFFFFFFFFC74C 00000050 gran |
FFFFFFFFFFFFC750 020088A8 mfspr r1,rand |
FFFFFFFFFFFFC754 16018300 lw r3,#768 |
FFFFFFFFFFFFC758 0411841C mod r1,r1,r3 |
FFFFFFFFFFFFC75C E69AE00C ; SETLO |
FFFFFFFFFFFFC760 EE800003 ; SETMID |
FFFFFFFFFFFFC764 6A0D042A outh r1,GACCEL+12 |
FFFFFFFFFFFFC768 rl4: ; random Y1 |
FFFFFFFFFFFFC768 00000050 gran |
FFFFFFFFFFFFC76C 020088A8 mfspr r1,rand |
FFFFFFFFFFFFC770 16018300 lw r3,#768 |
FFFFFFFFFFFFC774 0411841C mod r1,r1,r3 |
FFFFFFFFFFFFC778 E69AE014 ; SETLO |
FFFFFFFFFFFFC77C EE800003 ; SETMID |
FFFFFFFFFFFFC780 6A0D042A outh r1,GACCEL+20 |
FFFFFFFFFFFFC784 E0400002 setlo r1,#2 ; draw line command |
FFFFFFFFFFFFC788 E69AE03C ; SETLO |
FFFFFFFFFFFFC78C EE800003 ; SETMID |
FFFFFFFFFFFFC790 6A0D042A outh r1,GACCEL+60 |
FFFFFFFFFFFFC794 rl8: |
FFFFFFFFFFFFC794 31FFEE08 call KeybdGetChar |
FFFFFFFFFFFFC798 B0100303 beqi r1,#CTRLC,rl7 |
FFFFFFFFFFFFC79C B01FD972 beqi r1,#'r',rl5 |
FFFFFFFFFFFFC7A0 BE007FAA bra rl8 |
FFFFFFFFFFFFC7A4 rl7: |
FFFFFFFFFFFFC7A4 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFC7A8 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFC7AC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC7B0 37EF8018 ret #24 |
; |
FFFFFFFFFFFFCDD0 RandomLines: |
FFFFFFFFFFFFCDD0 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFCDD4 67E08000 sw r1,[sp] |
FFFFFFFFFFFFCDD8 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFCDDC 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFCDE0 660020E8 sw r0,ctx3start ; prevent restarting context over and over again |
FFFFFFFFFFFFCDE4 rl5: |
FFFFFFFFFFFFCDE4 00000050 gran |
FFFFFFFFFFFFCDE8 020088A8 mfspr r1,rand ; select a random color |
FFFFFFFFFFFFCDEC E69AE000 ; SETLO |
FFFFFFFFFFFFCDF0 EE800003 ; SETMID |
FFFFFFFFFFFFCDF4 6A0D042A outh r1,GACCEL |
FFFFFFFFFFFFCDF8 rl1: ; random X0 |
FFFFFFFFFFFFCDF8 00000050 gran |
FFFFFFFFFFFFCDFC 020088A8 mfspr r1,rand |
FFFFFFFFFFFFCE00 16018554 lw r3,#1364 |
FFFFFFFFFFFFCE04 0411841C modu r1,r1,r3 |
FFFFFFFFFFFFCE08 E69AE008 ; SETLO |
FFFFFFFFFFFFCE0C EE800003 ; SETMID |
FFFFFFFFFFFFCE10 6A0D042A outh r1,GACCEL+8 |
FFFFFFFFFFFFCE14 rl2: ; random X1 |
FFFFFFFFFFFFCE14 00000050 gran |
FFFFFFFFFFFFCE18 020088A8 mfspr r1,rand |
FFFFFFFFFFFFCE1C 16018554 lw r3,#1364 |
FFFFFFFFFFFFCE20 0411841C modu r1,r1,r3 |
FFFFFFFFFFFFCE24 E69AE010 ; SETLO |
FFFFFFFFFFFFCE28 EE800003 ; SETMID |
FFFFFFFFFFFFCE2C 6A0D042A outh r1,GACCEL+16 |
FFFFFFFFFFFFCE30 rl3: ; random Y0 |
FFFFFFFFFFFFCE30 00000050 gran |
FFFFFFFFFFFFCE34 020088A8 mfspr r1,rand |
FFFFFFFFFFFFCE38 16018300 lw r3,#768 |
FFFFFFFFFFFFCE3C 0411841C modu r1,r1,r3 |
FFFFFFFFFFFFCE40 E69AE00C ; SETLO |
FFFFFFFFFFFFCE44 EE800003 ; SETMID |
FFFFFFFFFFFFCE48 6A0D042A outh r1,GACCEL+12 |
FFFFFFFFFFFFCE4C rl4: ; random Y1 |
FFFFFFFFFFFFCE4C 00000050 gran |
FFFFFFFFFFFFCE50 020088A8 mfspr r1,rand |
FFFFFFFFFFFFCE54 16018300 lw r3,#768 |
FFFFFFFFFFFFCE58 0411841C modu r1,r1,r3 |
FFFFFFFFFFFFCE5C E69AE014 ; SETLO |
FFFFFFFFFFFFCE60 EE800003 ; SETMID |
FFFFFFFFFFFFCE64 6A0D042A outh r1,GACCEL+20 |
FFFFFFFFFFFFCE68 E0400002 setlo r1,#2 ; draw line command |
FFFFFFFFFFFFCE6C E69AE03C ; SETLO |
FFFFFFFFFFFFCE70 EE800003 ; SETMID |
FFFFFFFFFFFFCE74 6A0D042A outh r1,GACCEL+60 |
FFFFFFFFFFFFCE78 rl8: |
; call KeybdGetChar |
; beqi r1,#CTRLC,rl7 |
FFFFFFFFFFFFCE78 E69AE038 ; SETLO |
FFFFFFFFFFFFCE7C EE800003 ; SETMID |
FFFFFFFFFFFFCE80 6A0D0421 inch r1,GACCEL+56 ; ensure controller is in IDLE state |
FFFFFFFFFFFFCE84 BE107FA9 bne r1,r0,rl8 |
FFFFFFFFFFFFCE88 BE007AEA bra rl5 |
FFFFFFFFFFFFCE8C rl7: |
FFFFFFFFFFFFCE8C 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFCE90 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFCE94 47E08000 lw r1,[sp] |
FFFFFFFFFFFFCE98 37EF8018 ret #24 |
|
;-------------------------------------------------------------------------- |
; Initialize sprite image caches with random data. |
;-------------------------------------------------------------------------- |
FFFFFFFFFFFFC7B4 RandomizeSprram: |
FFFFFFFFFFFFC7B4 E6980000 ; SETLO |
FFFFFFFFFFFFC7B8 EE800003 ; SETMID |
FFFFFFFFFFFFC7BC 6A0D082D lea r2,SPRRAM |
FFFFFFFFFFFFC7C0 E10037FF setlo r4,#14335 ; number of chars to initialize |
FFFFFFFFFFFFC7C4 rsr1: |
FFFFFFFFFFFFC7C4 00000050 gran |
FFFFFFFFFFFFC7C8 020088A8 mfspr r1,rand |
FFFFFFFFFFFFC7CC 92208000 outc r1,[r2] |
FFFFFFFFFFFFC7D0 0A210002 addui r2,r2,#2 |
FFFFFFFFFFFFC7D4 BE027F8F loop r4,rsr1 |
FFFFFFFFFFFFC7D8 37EF8000 ret |
FFFFFFFFFFFFCE9C RandomizeSprram: |
FFFFFFFFFFFFCE9C E6980000 ; SETLO |
FFFFFFFFFFFFCEA0 EE800003 ; SETMID |
FFFFFFFFFFFFCEA4 6A0D082D lea r2,SPRRAM |
FFFFFFFFFFFFCEA8 E10037FF setlo r4,#14335 ; number of chars to initialize |
FFFFFFFFFFFFCEAC rsr1: |
FFFFFFFFFFFFCEAC 00000050 gran |
FFFFFFFFFFFFCEB0 020088A8 mfspr r1,rand |
FFFFFFFFFFFFCEB4 92208000 outc r1,[r2] |
FFFFFFFFFFFFCEB8 0A210002 addui r2,r2,#2 |
FFFFFFFFFFFFCEBC BE027F8F loop r4,rsr1 |
FFFFFFFFFFFFCEC0 37EF8000 ret |
|
;-------------------------------------------------------------------------- |
; Setup the AC97/LM4550 audio controller. Check keyboard for a CTRL-C |
2312,503 → 3052,1339
; responding. |
;-------------------------------------------------------------------------- |
; |
FFFFFFFFFFFFC7DC SetupAC97: |
FFFFFFFFFFFFC7DC 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC7E0 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC7E4 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC7E8 sac974: |
FFFFFFFFFFFFC7E8 E69C1026 ; SETLO |
FFFFFFFFFFFFC7EC EE800003 ; SETMID |
FFFFFFFFFFFFC7F0 6A0D0029 outc r0,AC97+0x26 ; trigger a read of register 26 (status reg) |
FFFFFFFFFFFFC7F4 sac971: ; wait for status to register 0xF (all ready) |
FFFFFFFFFFFFC7F4 31FFEE08 call KeybdGetChar ; see if we needed to CTRL-C |
FFFFFFFFFFFFC7F8 B0100A03 beqi r1,#CTRLC,sac973 |
FFFFFFFFFFFFC7FC E69C1068 ; SETLO |
FFFFFFFFFFFFC800 EE800003 ; SETMID |
FFFFFFFFFFFFC804 6A0D0429 outc r1,AC97+0x68 ; wait for dirty bit to clear |
FFFFFFFFFFFFC808 BE107F69 bne r1,r0,sac971 |
FFFFFFFFFFFFC80C E69C1026 ; SETLO |
FFFFFFFFFFFFC810 EE800003 ; SETMID |
FFFFFFFFFFFFC814 6A0D0429 outc r1,AC97+0x26 ; check status at reg h26, wait for |
FFFFFFFFFFFFC818 1410800F andi r1,r1,#0x0F ; analogue to be ready |
FFFFFFFFFFFFC81C B21FF30F bnei r1,#0x0F,sac974 |
FFFFFFFFFFFFC820 sac973: |
FFFFFFFFFFFFC820 E69C1002 ; SETLO |
FFFFFFFFFFFFC824 EE800003 ; SETMID |
FFFFFFFFFFFFC828 6A0D0029 outc r0,AC97+2 ; master volume, 0db attenuation, mute off |
FFFFFFFFFFFFC82C E69C1004 ; SETLO |
FFFFFFFFFFFFC830 EE800003 ; SETMID |
FFFFFFFFFFFFC834 6A0D0029 outc r0,AC97+4 ; headphone volume, 0db attenuation, mute off |
FFFFFFFFFFFFC838 E69C1018 ; SETLO |
FFFFFFFFFFFFC83C EE800003 ; SETMID |
FFFFFFFFFFFFC840 6A0D0029 outc r0,AC97+0x18 ; PCM gain (mixer) mute off, no attenuation |
FFFFFFFFFFFFC844 E69C100A ; SETLO |
FFFFFFFFFFFFC848 EE800003 ; SETMID |
FFFFFFFFFFFFC84C 6A0D0029 outc r0,AC97+0x0A ; mute PC beep |
FFFFFFFFFFFFC850 E07F8000 setlo r1,#0x8000 ; bypass 3D sound |
FFFFFFFFFFFFC854 E69C1020 ; SETLO |
FFFFFFFFFFFFC858 EE800003 ; SETMID |
FFFFFFFFFFFFC85C 6A0D0429 outc r1,AC97+0x20 |
FFFFFFFFFFFFC860 sac972: |
FFFFFFFFFFFFC860 31FFEE08 call KeybdGetChar |
FFFFFFFFFFFFC864 B0100503 beqi r1,#CTRLC,sac975 |
FFFFFFFFFFFFC868 E69C1068 ; SETLO |
FFFFFFFFFFFFC86C EE800003 ; SETMID |
FFFFFFFFFFFFC870 6A0D0429 outc r1,AC97+0x68 ; wait for dirty bits to clear |
FFFFFFFFFFFFC874 BE107F69 bne r1,r0,sac972 ; wait a while for the settings to take effect |
FFFFFFFFFFFFC878 sac975: |
FFFFFFFFFFFFC878 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC87C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC880 37EF8010 ret #16 |
FFFFFFFFFFFFCEC4 SetupAC97: |
FFFFFFFFFFFFCEC4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFCEC8 67E08000 sw r1,[sp] |
FFFFFFFFFFFFCECC 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFCED0 sac974: |
FFFFFFFFFFFFCED0 E69C1026 ; SETLO |
FFFFFFFFFFFFCED4 EE800003 ; SETMID |
FFFFFFFFFFFFCED8 6A0D0029 outc r0,AC97+0x26 ; trigger a read of register 26 (status reg) |
FFFFFFFFFFFFCEDC sac971: ; wait for status to register 0xF (all ready) |
FFFFFFFFFFFFCEDC 31FFEF07 call KeybdGetChar ; see if we needed to CTRL-C |
FFFFFFFFFFFFCEE0 B0100A03 beqi r1,#CTRLC,sac973 |
FFFFFFFFFFFFCEE4 E69C1068 ; SETLO |
FFFFFFFFFFFFCEE8 EE800003 ; SETMID |
FFFFFFFFFFFFCEEC 6A0D0421 inch r1,AC97+0x68 ; wait for dirty bit to clear |
FFFFFFFFFFFFCEF0 BE107F69 bne r1,r0,sac971 |
FFFFFFFFFFFFCEF4 E69C1026 ; SETLO |
FFFFFFFFFFFFCEF8 EE800003 ; SETMID |
FFFFFFFFFFFFCEFC 6A0D0421 inch r1,AC97+0x26 ; check status at reg h26, wait for |
FFFFFFFFFFFFCF00 1410800F andi r1,r1,#0x0F ; analogue to be ready |
FFFFFFFFFFFFCF04 B21FF30F bnei r1,#0x0F,sac974 |
FFFFFFFFFFFFCF08 sac973: |
FFFFFFFFFFFFCF08 E69C1002 ; SETLO |
FFFFFFFFFFFFCF0C EE800003 ; SETMID |
FFFFFFFFFFFFCF10 6A0D0029 outc r0,AC97+2 ; master volume, 0db attenuation, mute off |
FFFFFFFFFFFFCF14 E69C1004 ; SETLO |
FFFFFFFFFFFFCF18 EE800003 ; SETMID |
FFFFFFFFFFFFCF1C 6A0D0029 outc r0,AC97+4 ; headphone volume, 0db attenuation, mute off |
FFFFFFFFFFFFCF20 E69C1018 ; SETLO |
FFFFFFFFFFFFCF24 EE800003 ; SETMID |
FFFFFFFFFFFFCF28 6A0D0029 outc r0,AC97+0x18 ; PCM gain (mixer) mute off, no attenuation |
FFFFFFFFFFFFCF2C E69C100A ; SETLO |
FFFFFFFFFFFFCF30 EE800003 ; SETMID |
FFFFFFFFFFFFCF34 6A0D0029 outc r0,AC97+0x0A ; mute PC beep |
FFFFFFFFFFFFCF38 E07F8000 setlo r1,#0x8000 ; bypass 3D sound |
FFFFFFFFFFFFCF3C E69C1020 ; SETLO |
FFFFFFFFFFFFCF40 EE800003 ; SETMID |
FFFFFFFFFFFFCF44 6A0D0429 outc r1,AC97+0x20 |
FFFFFFFFFFFFCF48 sac972: |
FFFFFFFFFFFFCF48 31FFEF07 call KeybdGetChar |
FFFFFFFFFFFFCF4C B0100503 beqi r1,#CTRLC,sac975 |
FFFFFFFFFFFFCF50 E69C1068 ; SETLO |
FFFFFFFFFFFFCF54 EE800003 ; SETMID |
FFFFFFFFFFFFCF58 6A0D0421 inch r1,AC97+0x68 ; wait for dirty bits to clear |
FFFFFFFFFFFFCF5C BE107F69 bne r1,r0,sac972 ; wait a while for the settings to take effect |
FFFFFFFFFFFFCF60 sac975: |
FFFFFFFFFFFFCF60 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFCF64 47E08000 lw r1,[sp] |
FFFFFFFFFFFFCF68 37EF8010 ret #16 |
|
;-------------------------------------------------------------------------- |
; Sound a 800 Hz beep |
;-------------------------------------------------------------------------- |
; |
FFFFFFFFFFFFC884 Beep: |
FFFFFFFFFFFFC884 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC888 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC88C 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC890 E0400008 setlo r1,#8 |
FFFFFFFFFFFFC894 E69C0600 ; SETLO |
FFFFFFFFFFFFC898 EE800003 ; SETMID |
FFFFFFFFFFFFC89C 6A0D0428 outb r1,LED |
FFFFFFFFFFFFC8A0 1600800F ori r1,r0,#15 ; master volume to max |
FFFFFFFFFFFFC8A4 E6950080 ; SETLO |
FFFFFFFFFFFFC8A8 EE800003 ; SETMID |
FFFFFFFFFFFFC8AC 6A0D0429 outc r1,PSG+128 |
FFFFFFFFFFFFC8B0 1600B46E ori r1,r0,#13422 ; 800Hz |
FFFFFFFFFFFFC8B4 E6950000 ; SETLO |
FFFFFFFFFFFFC8B8 EE800003 ; SETMID |
FFFFFFFFFFFFC8BC 6A0D0429 outc r1,PSGFREQ0 |
FFFFFFFFFFFFC8C0 E0400009 setlo r1,#9 |
FFFFFFFFFFFFC8C4 E69C0600 ; SETLO |
FFFFFFFFFFFFC8C8 EE800003 ; SETMID |
FFFFFFFFFFFFC8CC 6A0D0428 outb r1,LED |
FFFFFFFFFFFFCF6C Beep: |
FFFFFFFFFFFFCF6C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFCF70 67E08000 sw r1,[sp] |
FFFFFFFFFFFFCF74 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFCF78 E0400008 setlo r1,#8 |
FFFFFFFFFFFFCF7C E69C0600 ; SETLO |
FFFFFFFFFFFFCF80 EE800003 ; SETMID |
FFFFFFFFFFFFCF84 6A0D0428 outb r1,LED |
FFFFFFFFFFFFCF88 1600800F ori r1,r0,#15 ; master volume to max |
FFFFFFFFFFFFCF8C E6950080 ; SETLO |
FFFFFFFFFFFFCF90 EE800003 ; SETMID |
FFFFFFFFFFFFCF94 6A0D0429 outc r1,PSG+128 |
FFFFFFFFFFFFCF98 1600B46E ori r1,r0,#13422 ; 800Hz |
FFFFFFFFFFFFCF9C E6950000 ; SETLO |
FFFFFFFFFFFFCFA0 EE800003 ; SETMID |
FFFFFFFFFFFFCFA4 6A0D0429 outc r1,PSGFREQ0 |
FFFFFFFFFFFFCFA8 E0400009 setlo r1,#9 |
FFFFFFFFFFFFCFAC E69C0600 ; SETLO |
FFFFFFFFFFFFCFB0 EE800003 ; SETMID |
FFFFFFFFFFFFCFB4 6A0D0428 outb r1,LED |
; decay (16.384 ms)2 |
; attack (8.192 ms)1 |
; release (1.024 s)A |
; sustain level C |
FFFFFFFFFFFFC8D0 E07FCA12 setlo r1,#0xCA12 |
FFFFFFFFFFFFC8D4 E6950006 ; SETLO |
FFFFFFFFFFFFC8D8 EE800003 ; SETMID |
FFFFFFFFFFFFC8DC 6A0D0429 outc r1,PSGADSR0 |
FFFFFFFFFFFFC8E0 16009104 ori r1,r0,#0x1104 ; gate, output enable, triangle waveform |
FFFFFFFFFFFFC8E4 E6950004 ; SETLO |
FFFFFFFFFFFFC8E8 EE800003 ; SETMID |
FFFFFFFFFFFFC8EC 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFC8F0 E6BD7840 ; SETLO |
FFFFFFFFFFFFC8F4 EE800005 ; SETMID |
FFFFFFFFFFFFC8F8 040D0409 ori r1,r0,#25000000 ; delay about 1s |
FFFFFFFFFFFFC8FC beep1: |
FFFFFFFFFFFFC8FC BE00800F loop r1,beep1 |
FFFFFFFFFFFFC900 E040000D setlo r1,#13 |
FFFFFFFFFFFFC904 E69C0600 ; SETLO |
FFFFFFFFFFFFC908 EE800003 ; SETMID |
FFFFFFFFFFFFC90C 6A0D0428 outb r1,LED |
FFFFFFFFFFFFC910 16008104 ori r1,r0,#0x0104 ; gate off, output enable, triangle waveform |
FFFFFFFFFFFFC914 E6950004 ; SETLO |
FFFFFFFFFFFFC918 EE800003 ; SETMID |
FFFFFFFFFFFFC91C 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFC920 E6BD7840 ; SETLO |
FFFFFFFFFFFFC924 EE800005 ; SETMID |
FFFFFFFFFFFFC928 040D0409 ori r1,r0,#25000000 ; delay about 1s |
FFFFFFFFFFFFC92C beep2: |
FFFFFFFFFFFFC92C BE00800F loop r1,beep2 |
FFFFFFFFFFFFC930 E0400010 setlo r1,#16 |
FFFFFFFFFFFFC934 E69C0600 ; SETLO |
FFFFFFFFFFFFC938 EE800003 ; SETMID |
FFFFFFFFFFFFC93C 6A0D0428 outb r1,LED |
FFFFFFFFFFFFC940 16008000 ori r1,r0,#0x0000 ; gate off, output enable off, no waveform |
FFFFFFFFFFFFC944 E6950004 ; SETLO |
FFFFFFFFFFFFC948 EE800003 ; SETMID |
FFFFFFFFFFFFC94C 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFC950 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFC954 47E08000 lw r1,[sp] |
FFFFFFFFFFFFC958 37EF8010 ret #16 |
FFFFFFFFFFFFCFB8 E07FCA12 setlo r1,#0xCA12 |
FFFFFFFFFFFFCFBC E6950006 ; SETLO |
FFFFFFFFFFFFCFC0 EE800003 ; SETMID |
FFFFFFFFFFFFCFC4 6A0D0429 outc r1,PSGADSR0 |
FFFFFFFFFFFFCFC8 16009104 ori r1,r0,#0x1104 ; gate, output enable, triangle waveform |
FFFFFFFFFFFFCFCC E6950004 ; SETLO |
FFFFFFFFFFFFCFD0 EE800003 ; SETMID |
FFFFFFFFFFFFCFD4 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFCFD8 E6A625A0 ; SETLO |
FFFFFFFFFFFFCFDC EE800000 ; SETMID |
FFFFFFFFFFFFCFE0 040D0409 ori r1,r0,#2500000 ; delay about 1s |
FFFFFFFFFFFFCFE4 beep1: |
FFFFFFFFFFFFCFE4 BE00800F loop r1,beep1 |
FFFFFFFFFFFFCFE8 E040000D setlo r1,#13 |
FFFFFFFFFFFFCFEC E69C0600 ; SETLO |
FFFFFFFFFFFFCFF0 EE800003 ; SETMID |
FFFFFFFFFFFFCFF4 6A0D0428 outb r1,LED |
FFFFFFFFFFFFCFF8 16008104 ori r1,r0,#0x0104 ; gate off, output enable, triangle waveform |
FFFFFFFFFFFFCFFC E6950004 ; SETLO |
FFFFFFFFFFFFD000 EE800003 ; SETMID |
FFFFFFFFFFFFD004 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFD008 E6A625A0 ; SETLO |
FFFFFFFFFFFFD00C EE800000 ; SETMID |
FFFFFFFFFFFFD010 040D0409 ori r1,r0,#2500000 ; delay about 1s |
FFFFFFFFFFFFD014 beep2: |
FFFFFFFFFFFFD014 BE00800F loop r1,beep2 |
FFFFFFFFFFFFD018 E0400010 setlo r1,#16 |
FFFFFFFFFFFFD01C E69C0600 ; SETLO |
FFFFFFFFFFFFD020 EE800003 ; SETMID |
FFFFFFFFFFFFD024 6A0D0428 outb r1,LED |
FFFFFFFFFFFFD028 16008000 ori r1,r0,#0x0000 ; gate off, output enable off, no waveform |
FFFFFFFFFFFFD02C E6950004 ; SETLO |
FFFFFFFFFFFFD030 EE800003 ; SETMID |
FFFFFFFFFFFFD034 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFD038 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFD03C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFD040 37EF8010 ret #16 |
|
;-------------------------------------------------------------------------- |
;-------------------------------------------------------------------------- |
; |
FFFFFFFFFFFFC95C Piano: |
FFFFFFFFFFFFC95C 1600800F ori r1,r0,#15 ; master volume to max |
FFFFFFFFFFFFC960 E6950080 ; SETLO |
FFFFFFFFFFFFC964 EE800003 ; SETMID |
FFFFFFFFFFFFC968 6A0D0429 outc r1,PSG+128 |
FFFFFFFFFFFFC96C playnt: |
FFFFFFFFFFFFC96C 31FFEE08 call KeybdGetChar |
FFFFFFFFFFFFC970 B01E3A03 beqi r1,#CTRLC,Monitor |
FFFFFFFFFFFFC974 B0100861 beqi r1,#'a',playnt1a |
FFFFFFFFFFFFC978 B0100A62 beqi r1,#'b',playnt1b |
FFFFFFFFFFFFC97C B0100C63 beqi r1,#'c',playnt1c |
FFFFFFFFFFFFC980 B0100E64 beqi r1,#'d',playnt1d |
FFFFFFFFFFFFC984 B0101065 beqi r1,#'e',playnt1e |
FFFFFFFFFFFFC988 B0101266 beqi r1,#'f',playnt1f |
FFFFFFFFFFFFC98C B0101467 beqi r1,#'g',playnt1g |
FFFFFFFFFFFFC990 BE007EEA bra playnt |
FFFFFFFFFFFFD044 Piano: |
FFFFFFFFFFFFD044 1600800F ori r1,r0,#15 ; master volume to max |
FFFFFFFFFFFFD048 E6950080 ; SETLO |
FFFFFFFFFFFFD04C EE800003 ; SETMID |
FFFFFFFFFFFFD050 6A0D0429 outc r1,PSG+128 |
FFFFFFFFFFFFD054 playnt: |
FFFFFFFFFFFFD054 31FFEF07 call KeybdGetChar |
FFFFFFFFFFFFD058 B01DF403 beqi r1,#CTRLC,Monitor |
FFFFFFFFFFFFD05C B0100861 beqi r1,#'a',playnt1a |
FFFFFFFFFFFFD060 B0100A62 beqi r1,#'b',playnt1b |
FFFFFFFFFFFFD064 B0100C63 beqi r1,#'c',playnt1c |
FFFFFFFFFFFFD068 B0100E64 beqi r1,#'d',playnt1d |
FFFFFFFFFFFFD06C B0101065 beqi r1,#'e',playnt1e |
FFFFFFFFFFFFD070 B0101266 beqi r1,#'f',playnt1f |
FFFFFFFFFFFFD074 B0101467 beqi r1,#'g',playnt1g |
FFFFFFFFFFFFD078 BE007EEA bra playnt |
|
FFFFFFFFFFFFC994 playnt1a: |
FFFFFFFFFFFFC994 E0401C31 setlo r1,#7217 |
FFFFFFFFFFFFC998 31FFF27A call Tone |
FFFFFFFFFFFFC99C BE007E8A bra playnt |
FFFFFFFFFFFFC9A0 playnt1b: |
FFFFFFFFFFFFC9A0 E0401FA5 setlo r1,#8101 |
FFFFFFFFFFFFC9A4 31FFF27A call Tone |
FFFFFFFFFFFFC9A8 BE007E2A bra playnt |
FFFFFFFFFFFFC9AC playnt1c: |
FFFFFFFFFFFFC9AC E04010C3 setlo r1,#4291 |
FFFFFFFFFFFFC9B0 31FFF27A call Tone |
FFFFFFFFFFFFC9B4 BE007DCA bra playnt |
FFFFFFFFFFFFC9B8 playnt1d: |
FFFFFFFFFFFFC9B8 E04012D1 setlo r1,#4817 |
FFFFFFFFFFFFC9BC 31FFF27A call Tone |
FFFFFFFFFFFFC9C0 BE007D6A bra playnt |
FFFFFFFFFFFFC9C4 playnt1e: |
FFFFFFFFFFFFC9C4 E040151F setlo r1,#5407 |
FFFFFFFFFFFFC9C8 31FFF27A call Tone |
FFFFFFFFFFFFC9CC BE007D0A bra playnt |
FFFFFFFFFFFFC9D0 playnt1f: |
FFFFFFFFFFFFC9D0 E0401660 setlo r1,#5728 |
FFFFFFFFFFFFC9D4 31FFF27A call Tone |
FFFFFFFFFFFFC9D8 BE007CAA bra playnt |
FFFFFFFFFFFFC9DC playnt1g: |
FFFFFFFFFFFFC9DC E040191E setlo r1,#6430 |
FFFFFFFFFFFFC9E0 31FFF27A call Tone |
FFFFFFFFFFFFC9E4 BE007C4A bra playnt |
FFFFFFFFFFFFD07C playnt1a: |
FFFFFFFFFFFFD07C E0401C31 setlo r1,#7217 |
FFFFFFFFFFFFD080 31FFF434 call Tone |
FFFFFFFFFFFFD084 BE007E8A bra playnt |
FFFFFFFFFFFFD088 playnt1b: |
FFFFFFFFFFFFD088 E0401FA5 setlo r1,#8101 |
FFFFFFFFFFFFD08C 31FFF434 call Tone |
FFFFFFFFFFFFD090 BE007E2A bra playnt |
FFFFFFFFFFFFD094 playnt1c: |
FFFFFFFFFFFFD094 E04010C3 setlo r1,#4291 |
FFFFFFFFFFFFD098 31FFF434 call Tone |
FFFFFFFFFFFFD09C BE007DCA bra playnt |
FFFFFFFFFFFFD0A0 playnt1d: |
FFFFFFFFFFFFD0A0 E04012D1 setlo r1,#4817 |
FFFFFFFFFFFFD0A4 31FFF434 call Tone |
FFFFFFFFFFFFD0A8 BE007D6A bra playnt |
FFFFFFFFFFFFD0AC playnt1e: |
FFFFFFFFFFFFD0AC E040151F setlo r1,#5407 |
FFFFFFFFFFFFD0B0 31FFF434 call Tone |
FFFFFFFFFFFFD0B4 BE007D0A bra playnt |
FFFFFFFFFFFFD0B8 playnt1f: |
FFFFFFFFFFFFD0B8 E0401660 setlo r1,#5728 |
FFFFFFFFFFFFD0BC 31FFF434 call Tone |
FFFFFFFFFFFFD0C0 BE007CAA bra playnt |
FFFFFFFFFFFFD0C4 playnt1g: |
FFFFFFFFFFFFD0C4 E040191E setlo r1,#6430 |
FFFFFFFFFFFFD0C8 31FFF434 call Tone |
FFFFFFFFFFFFD0CC BE007C4A bra playnt |
|
FFFFFFFFFFFFC9E8 Tone: |
FFFFFFFFFFFFC9E8 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFC9EC 67E08000 sw r1,[sp] |
FFFFFFFFFFFFC9F0 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFC9F4 E6950000 ; SETLO |
FFFFFFFFFFFFC9F8 EE800003 ; SETMID |
FFFFFFFFFFFFC9FC 6A0D0429 outc r1,PSGFREQ0 |
FFFFFFFFFFFFD0D0 Tone: |
FFFFFFFFFFFFD0D0 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD0D4 67E08000 sw r1,[sp] |
FFFFFFFFFFFFD0D8 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFD0DC E6950000 ; SETLO |
FFFFFFFFFFFFD0E0 EE800003 ; SETMID |
FFFFFFFFFFFFD0E4 6A0D0429 outc r1,PSGFREQ0 |
; decay (16.384 ms)2 |
; attack (8.192 ms)1 |
; release (1.024 s)A |
; sustain level C |
FFFFFFFFFFFFCA00 E07FCA12 setlo r1,#0xCA12 |
FFFFFFFFFFFFCA04 E6950006 ; SETLO |
FFFFFFFFFFFFCA08 EE800003 ; SETMID |
FFFFFFFFFFFFCA0C 6A0D0429 outc r1,PSGADSR0 |
FFFFFFFFFFFFCA10 16009104 ori r1,r0,#0x1104 ; gate, output enable, triangle waveform |
FFFFFFFFFFFFCA14 E6950004 ; SETLO |
FFFFFFFFFFFFCA18 EE800003 ; SETMID |
FFFFFFFFFFFFCA1C 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFCA20 E683D090 ; SETLO |
FFFFFFFFFFFFCA24 040D0409 ori r1,r0,#250000 ; delay about 10ms |
FFFFFFFFFFFFCA28 tone1: |
FFFFFFFFFFFFCA28 BE00800F loop r1,tone1 |
FFFFFFFFFFFFCA2C 16008104 ori r1,r0,#0x0104 ; gate off, output enable, triangle waveform |
FFFFFFFFFFFFCA30 E6950004 ; SETLO |
FFFFFFFFFFFFCA34 EE800003 ; SETMID |
FFFFFFFFFFFFCA38 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFCA3C E683D090 ; SETLO |
FFFFFFFFFFFFCA40 040D0409 ori r1,r0,#250000 ; delay about 10ms |
FFFFFFFFFFFFCA44 tone2: |
FFFFFFFFFFFFCA44 BE00800F loop r1,tone2 |
FFFFFFFFFFFFCA48 16008000 ori r1,r0,#0x0000 ; gate off, output enable off, no waveform |
FFFFFFFFFFFFCA4C E6950004 ; SETLO |
FFFFFFFFFFFFCA50 EE800003 ; SETMID |
FFFFFFFFFFFFCA54 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFCA58 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFCA5C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFCA60 37EF8010 ret #16 |
FFFFFFFFFFFFD0E8 E07FCA12 setlo r1,#0xCA12 |
FFFFFFFFFFFFD0EC E6950006 ; SETLO |
FFFFFFFFFFFFD0F0 EE800003 ; SETMID |
FFFFFFFFFFFFD0F4 6A0D0429 outc r1,PSGADSR0 |
FFFFFFFFFFFFD0F8 16009104 ori r1,r0,#0x1104 ; gate, output enable, triangle waveform |
FFFFFFFFFFFFD0FC E6950004 ; SETLO |
FFFFFFFFFFFFD100 EE800003 ; SETMID |
FFFFFFFFFFFFD104 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFD108 E683D090 ; SETLO |
FFFFFFFFFFFFD10C 040D0409 ori r1,r0,#250000 ; delay about 10ms |
FFFFFFFFFFFFD110 tone1: |
FFFFFFFFFFFFD110 BE00800F loop r1,tone1 |
FFFFFFFFFFFFD114 16008104 ori r1,r0,#0x0104 ; gate off, output enable, triangle waveform |
FFFFFFFFFFFFD118 E6950004 ; SETLO |
FFFFFFFFFFFFD11C EE800003 ; SETMID |
FFFFFFFFFFFFD120 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFD124 E683D090 ; SETLO |
FFFFFFFFFFFFD128 040D0409 ori r1,r0,#250000 ; delay about 10ms |
FFFFFFFFFFFFD12C tone2: |
FFFFFFFFFFFFD12C BE00800F loop r1,tone2 |
FFFFFFFFFFFFD130 16008000 ori r1,r0,#0x0000 ; gate off, output enable off, no waveform |
FFFFFFFFFFFFD134 E6950004 ; SETLO |
FFFFFFFFFFFFD138 EE800003 ; SETMID |
FFFFFFFFFFFFD13C 6A0D0429 outc r1,PSGCTRL0 |
FFFFFFFFFFFFD140 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFD144 47E08000 lw r1,[sp] |
FFFFFFFFFFFFD148 37EF8010 ret #16 |
|
;============================================================================== |
;============================================================================== |
FFFFFFFFFFFFCA64 SetupRasterIRQ: |
FFFFFFFFFFFFCA64 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCA68 67E08000 sw r1,[sp] |
FFFFFFFFFFFFCA6C E04000C8 setlo r1,#200 |
FFFFFFFFFFFFCA70 E69A0100 ; SETLO |
FFFFFFFFFFFFCA74 EE800003 ; SETMID |
FFFFFFFFFFFFCA78 6A0D0429 outc r1,RASTERIRQ |
FFFFFFFFFFFFCA7C E04000F0 setlo r1,#240 |
FFFFFFFFFFFFCA80 E69A0102 ; SETLO |
FFFFFFFFFFFFCA84 EE800003 ; SETMID |
FFFFFFFFFFFFCA88 6A0D0429 outc r1,RASTERIRQ+2 |
FFFFFFFFFFFFCA8C E0400118 setlo r1,#280 |
FFFFFFFFFFFFCA90 E69A0104 ; SETLO |
FFFFFFFFFFFFCA94 EE800003 ; SETMID |
FFFFFFFFFFFFCA98 6A0D0429 outc r1,RASTERIRQ+4 |
FFFFFFFFFFFFCA9C E0400140 setlo r1,#320 |
FFFFFFFFFFFFCAA0 E69A0106 ; SETLO |
FFFFFFFFFFFFCAA4 EE800003 ; SETMID |
FFFFFFFFFFFFCAA8 6A0D0429 outc r1,RASTERIRQ+6 |
FFFFFFFFFFFFCAAC E0400168 setlo r1,#360 |
FFFFFFFFFFFFCAB0 E69A0108 ; SETLO |
FFFFFFFFFFFFCAB4 EE800003 ; SETMID |
FFFFFFFFFFFFCAB8 6A0D0429 outc r1,RASTERIRQ+8 |
FFFFFFFFFFFFCABC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFCAC0 37EF8008 ret #8 |
FFFFFFFFFFFFD14C SetupRasterIRQ: |
FFFFFFFFFFFFD14C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD150 67E08000 sw r1,[sp] |
FFFFFFFFFFFFD154 E04000C8 setlo r1,#200 |
FFFFFFFFFFFFD158 E69A0100 ; SETLO |
FFFFFFFFFFFFD15C EE800003 ; SETMID |
FFFFFFFFFFFFD160 6A0D0429 outc r1,RASTERIRQ |
FFFFFFFFFFFFD164 E04000F0 setlo r1,#240 |
FFFFFFFFFFFFD168 E69A0102 ; SETLO |
FFFFFFFFFFFFD16C EE800003 ; SETMID |
FFFFFFFFFFFFD170 6A0D0429 outc r1,RASTERIRQ+2 |
FFFFFFFFFFFFD174 E0400118 setlo r1,#280 |
FFFFFFFFFFFFD178 E69A0104 ; SETLO |
FFFFFFFFFFFFD17C EE800003 ; SETMID |
FFFFFFFFFFFFD180 6A0D0429 outc r1,RASTERIRQ+4 |
FFFFFFFFFFFFD184 E0400140 setlo r1,#320 |
FFFFFFFFFFFFD188 E69A0106 ; SETLO |
FFFFFFFFFFFFD18C EE800003 ; SETMID |
FFFFFFFFFFFFD190 6A0D0429 outc r1,RASTERIRQ+6 |
FFFFFFFFFFFFD194 E0400168 setlo r1,#360 |
FFFFFFFFFFFFD198 E69A0108 ; SETLO |
FFFFFFFFFFFFD19C EE800003 ; SETMID |
FFFFFFFFFFFFD1A0 6A0D0429 outc r1,RASTERIRQ+8 |
FFFFFFFFFFFFD1A4 47E08000 lw r1,[sp] |
FFFFFFFFFFFFD1A8 37EF8008 ret #8 |
|
FFFFFFFFFFFFCAC4 RasterIRQfn: |
FFFFFFFFFFFFCAC4 E69A011E ; SETLO |
FFFFFFFFFFFFCAC8 EE800003 ; SETMID |
FFFFFFFFFFFFCACC 6A0D0421 inch r1,RASTERIRQ+30 ; get the raster compare register # (clears IRQ) |
FFFFFFFFFFFFCAD0 B0100901 beqi r1,#1,rirq1 |
FFFFFFFFFFFFCAD4 B0100802 beqi r1,#2,rirq2 |
FFFFFFFFFFFFCAD8 B0100703 beqi r1,#3,rirq3 |
FFFFFFFFFFFFCADC B0100604 beqi r1,#4,rirq4 |
FFFFFFFFFFFFCAE0 B0100505 beqi r1,#5,rirq5 |
FFFFFFFFFFFFCAE4 B0100406 beqi r1,#6,rirq6 |
FFFFFFFFFFFFCAE8 B0100307 beqi r1,#7,rirq7 |
FFFFFFFFFFFFCAEC B0100208 beqi r1,#8,rirq8 |
FFFFFFFFFFFFCAF0 37EF8000 ret |
FFFFFFFFFFFFCAF4 rirq1: |
FFFFFFFFFFFFCAF4 rirq2: |
FFFFFFFFFFFFCAF4 rirq3: |
FFFFFFFFFFFFCAF4 rirq4: |
FFFFFFFFFFFFCAF4 rirq5: |
FFFFFFFFFFFFCAF4 rirq6: |
FFFFFFFFFFFFCAF4 rirq7: |
FFFFFFFFFFFFCAF4 rirq8: |
FFFFFFFFFFFFCAF4 1A108028 mului r1,r1,#40 |
FFFFFFFFFFFFCAF8 0A1080CC addui r1,r1,#204 |
FFFFFFFFFFFFCAFC E69AD002 ; SETLO |
FFFFFFFFFFFFCB00 EE800003 ; SETMID |
FFFFFFFFFFFFCB04 6A0D0429 outc r1,SPRITEREGS+2 |
FFFFFFFFFFFFCB08 E69AD012 ; SETLO |
FFFFFFFFFFFFCB0C EE800003 ; SETMID |
FFFFFFFFFFFFCB10 6A0D0429 outc r1,SPRITEREGS+18 |
FFFFFFFFFFFFCB14 E69AD022 ; SETLO |
FFFFFFFFFFFFCB18 EE800003 ; SETMID |
FFFFFFFFFFFFCB1C 6A0D0429 outc r1,SPRITEREGS+34 |
FFFFFFFFFFFFCB20 E69AD032 ; SETLO |
FFFFFFFFFFFFCB24 EE800003 ; SETMID |
FFFFFFFFFFFFCB28 6A0D0429 outc r1,SPRITEREGS+50 |
FFFFFFFFFFFFCB2C E69AD042 ; SETLO |
FFFFFFFFFFFFCB30 EE800003 ; SETMID |
FFFFFFFFFFFFCB34 6A0D0429 outc r1,SPRITEREGS+66 |
FFFFFFFFFFFFCB38 E69AD052 ; SETLO |
FFFFFFFFFFFFCB3C EE800003 ; SETMID |
FFFFFFFFFFFFCB40 6A0D0429 outc r1,SPRITEREGS+82 |
FFFFFFFFFFFFCB44 E69AD062 ; SETLO |
FFFFFFFFFFFFCB48 EE800003 ; SETMID |
FFFFFFFFFFFFCB4C 6A0D0429 outc r1,SPRITEREGS+98 |
FFFFFFFFFFFFCB50 E69AD072 ; SETLO |
FFFFFFFFFFFFCB54 EE800003 ; SETMID |
FFFFFFFFFFFFCB58 6A0D0429 outc r1,SPRITEREGS+114 |
FFFFFFFFFFFFCB5C 37EF8000 ret |
FFFFFFFFFFFFD1AC RasterIRQfn: |
FFFFFFFFFFFFD1AC E69A011E ; SETLO |
FFFFFFFFFFFFD1B0 EE800003 ; SETMID |
FFFFFFFFFFFFD1B4 6A0D0421 inch r1,RASTERIRQ+30 ; get the raster compare register # (clears IRQ) |
FFFFFFFFFFFFD1B8 B0100901 beqi r1,#1,rirq1 |
FFFFFFFFFFFFD1BC B0100802 beqi r1,#2,rirq2 |
FFFFFFFFFFFFD1C0 B0100703 beqi r1,#3,rirq3 |
FFFFFFFFFFFFD1C4 B0100604 beqi r1,#4,rirq4 |
FFFFFFFFFFFFD1C8 B0100505 beqi r1,#5,rirq5 |
FFFFFFFFFFFFD1CC B0100406 beqi r1,#6,rirq6 |
FFFFFFFFFFFFD1D0 B0100307 beqi r1,#7,rirq7 |
FFFFFFFFFFFFD1D4 B0100208 beqi r1,#8,rirq8 |
FFFFFFFFFFFFD1D8 37EF8000 ret |
FFFFFFFFFFFFD1DC rirq1: |
FFFFFFFFFFFFD1DC rirq2: |
FFFFFFFFFFFFD1DC rirq3: |
FFFFFFFFFFFFD1DC rirq4: |
FFFFFFFFFFFFD1DC rirq5: |
FFFFFFFFFFFFD1DC rirq6: |
FFFFFFFFFFFFD1DC rirq7: |
FFFFFFFFFFFFD1DC rirq8: |
FFFFFFFFFFFFD1DC 1A108028 mului r1,r1,#40 |
FFFFFFFFFFFFD1E0 0A1080CC addui r1,r1,#204 |
FFFFFFFFFFFFD1E4 E69AD002 ; SETLO |
FFFFFFFFFFFFD1E8 EE800003 ; SETMID |
FFFFFFFFFFFFD1EC 6A0D0429 outc r1,SPRITEREGS+2 |
FFFFFFFFFFFFD1F0 E69AD012 ; SETLO |
FFFFFFFFFFFFD1F4 EE800003 ; SETMID |
FFFFFFFFFFFFD1F8 6A0D0429 outc r1,SPRITEREGS+18 |
FFFFFFFFFFFFD1FC E69AD022 ; SETLO |
FFFFFFFFFFFFD200 EE800003 ; SETMID |
FFFFFFFFFFFFD204 6A0D0429 outc r1,SPRITEREGS+34 |
FFFFFFFFFFFFD208 E69AD032 ; SETLO |
FFFFFFFFFFFFD20C EE800003 ; SETMID |
FFFFFFFFFFFFD210 6A0D0429 outc r1,SPRITEREGS+50 |
FFFFFFFFFFFFD214 E69AD042 ; SETLO |
FFFFFFFFFFFFD218 EE800003 ; SETMID |
FFFFFFFFFFFFD21C 6A0D0429 outc r1,SPRITEREGS+66 |
FFFFFFFFFFFFD220 E69AD052 ; SETLO |
FFFFFFFFFFFFD224 EE800003 ; SETMID |
FFFFFFFFFFFFD228 6A0D0429 outc r1,SPRITEREGS+82 |
FFFFFFFFFFFFD22C E69AD062 ; SETLO |
FFFFFFFFFFFFD230 EE800003 ; SETMID |
FFFFFFFFFFFFD234 6A0D0429 outc r1,SPRITEREGS+98 |
FFFFFFFFFFFFD238 E69AD072 ; SETLO |
FFFFFFFFFFFFD23C EE800003 ; SETMID |
FFFFFFFFFFFFD240 6A0D0429 outc r1,SPRITEREGS+114 |
FFFFFFFFFFFFD244 37EF8000 ret |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
FFFFFFFFFFFFCB60 DisplayDatetime: |
FFFFFFFFFFFFCB60 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFCB64 67E08000 sw r1,[sp] |
FFFFFFFFFFFFCB68 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFCB6C 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFCB70 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFCB74 31FFEEBA call CursorOff |
FFFFFFFFFFFFCB78 42011416 lc r2,CursorRow |
FFFFFFFFFFFFCB7C 42019418 lc r3,CursorCol |
FFFFFFFFFFFFCB80 E69C0418 ; SETLO |
FFFFFFFFFFFFCB84 EE800003 ; SETMID |
FFFFFFFFFFFFCB88 6A0D002B outw r0,DATETIME+24 ; trigger a snapshot |
FFFFFFFFFFFFCB8C 1600802E lw r1,#46 ; move cursor down to last display line |
FFFFFFFFFFFFCB90 62009416 sc r1,CursorRow |
FFFFFFFFFFFFCB94 16008040 lw r1,#64 |
FFFFFFFFFFFFCB98 62009418 sc r1,CursorCol |
FFFFFFFFFFFFCB9C E69C0400 ; SETLO |
FFFFFFFFFFFFCBA0 EE800003 ; SETMID |
FFFFFFFFFFFFCBA4 6A0D0423 inw r1,DATETIME ; get the snapshotted date and time |
FFFFFFFFFFFFCBA8 31FFF019 call DisplayWord ; display on screen |
FFFFFFFFFFFFCBAC 62011416 sc r2,CursorRow ; restore cursor position |
FFFFFFFFFFFFCBB0 62019418 sc r3,CursorCol |
FFFFFFFFFFFFCBB4 31FFEF37 call CalcScreenLoc |
FFFFFFFFFFFFCBB8 31FFEEBF call CursorOn |
FFFFFFFFFFFFCBBC 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFCBC0 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFCBC4 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFCBC8 47E08000 lw r1,[sp] |
FFFFFFFFFFFFCBCC 37EF8020 ret #32 |
FFFFFFFFFFFFD248 DisplayDatetime: |
FFFFFFFFFFFFD248 0FEF0030 subui sp,sp,#48 |
FFFFFFFFFFFFD24C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFD250 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFD254 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFD258 67E20018 sw r4,24[sp] |
FFFFFFFFFFFFD25C 67E28020 sw r5,32[sp] |
FFFFFFFFFFFFD260 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFD264 31FFEFF2 call CursorOff |
FFFFFFFFFFFFD268 16008003 lw r1,#3 ; get cursor position |
FFFFFFFFFFFFD26C 0181CD17 syscall #410 |
FFFFFFFFFFFFD270 02120009 mov r4,r1 ; r4 = row |
FFFFFFFFFFFFD274 02228009 mov r5,r2 ; r5 = col |
FFFFFFFFFFFFD278 16008002 lw r1,#2 ; set cursor position |
FFFFFFFFFFFFD27C 1601002E lw r2,#46 ; move cursor down to last display line |
FFFFFFFFFFFFD280 16018040 lw r3,#64 |
FFFFFFFFFFFFD284 0181CD17 syscall #410 |
FFFFFFFFFFFFD288 16008001 lw r1,#1 ; get the snapshotted date and time |
FFFFFFFFFFFFD28C 0181D017 syscall #416 |
FFFFFFFFFFFFD290 31FFF169 call DisplayWord ; display on screen |
FFFFFFFFFFFFD294 16008002 lw r1,#2 ; restore cursor position |
FFFFFFFFFFFFD298 02410009 mov r2,r4 ; r2 = row |
FFFFFFFFFFFFD29C 02518009 mov r3,r5 ; r3 = col |
FFFFFFFFFFFFD2A0 0181CD17 syscall #410 |
FFFFFFFFFFFFD2A4 31FFEFF7 call CursorOn |
FFFFFFFFFFFFD2A8 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFD2AC 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFD2B0 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFD2B4 47E08000 lw r1,[sp] |
FFFFFFFFFFFFD2B8 47E20018 lw r4,24[sp] |
FFFFFFFFFFFFD2BC 47E28020 lw r5,32[sp] |
FFFFFFFFFFFFD2C0 37EF8030 ret #48 |
|
;============================================================================== |
;============================================================================== |
FFFFFFFFFFFFCBD0 InitializeGame: |
FFFFFFFFFFFFCBD0 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFCBD4 27F40000004 sm [sp],r3/lr |
FFFFFFFFFFFFCBD8 E0C00140 setlo r3,#320 |
FFFFFFFFFFFFCBDC 62019508 sc r3,Manpos |
FFFFFFFFFFFFCBE0 62001500 sc r0,Score |
FFFFFFFFFFFFCBE4 60001510 sb r0,MissileActive |
FFFFFFFFFFFFCBE8 62001512 sc r0,MissileX |
FFFFFFFFFFFFCBEC 62001514 sc r0,MissileY |
FFFFFFFFFFFFCBF0 27740000004 lm [sp],r3/lr |
FFFFFFFFFFFFCBF4 37EF8010 ret #16 |
FFFFFFFFFFFFD2C4 InitializeGame: |
FFFFFFFFFFFFD2C4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD2C8 27F40000004 sm [sp],r3/lr |
FFFFFFFFFFFFD2CC E0C00140 setlo r3,#320 |
FFFFFFFFFFFFD2D0 62019508 sc r3,Manpos |
FFFFFFFFFFFFD2D4 62001500 sc r0,Score |
FFFFFFFFFFFFD2D8 60001510 sb r0,MissileActive |
FFFFFFFFFFFFD2DC 62001512 sc r0,MissileX |
FFFFFFFFFFFFD2E0 62001514 sc r0,MissileY |
FFFFFFFFFFFFD2E4 27740000004 lm [sp],r3/lr |
FFFFFFFFFFFFD2E8 37EF8010 ret #16 |
|
FFFFFFFFFFFFCBF8 DrawScore: |
FFFFFFFFFFFFCBF8 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFCBFC 27F40000005 sm [sp],r1/r3/lr |
FFFFFFFFFFFFCC00 E0C00001 setlo r3,#1 |
FFFFFFFFFFFFCC04 60019416 sb r3,CursorRow |
FFFFFFFFFFFFCC08 E0C00028 setlo r3,#40 |
FFFFFFFFFFFFCC0C 60019418 sb r3,CursorCol |
FFFFFFFFFFFFCC10 40009500 lb r1,Score |
FFFFFFFFFFFFCC14 31FFF00F call DisplayByte |
FFFFFFFFFFFFCC18 40009501 lb r1,Score+1 |
FFFFFFFFFFFFCC1C 31FFF00F call DisplayByte |
FFFFFFFFFFFFCC20 27740000005 lm [sp],r1/r3/lr |
FFFFFFFFFFFFCC24 37EF8018 ret #24 |
FFFFFFFFFFFFD2EC DrawScore: |
FFFFFFFFFFFFD2EC 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFD2F0 27F40000005 sm [sp],r1/r3/lr |
FFFFFFFFFFFFD2F4 E0C00001 setlo r3,#1 |
FFFFFFFFFFFFD2F8 60019417 sb r3,CursorRow |
FFFFFFFFFFFFD2FC E0C00028 setlo r3,#40 |
FFFFFFFFFFFFD300 60019418 sb r3,CursorCol |
FFFFFFFFFFFFD304 40009500 lb r1,Score |
FFFFFFFFFFFFD308 31FFF14B call DisplayByte |
FFFFFFFFFFFFD30C 40009501 lb r1,Score+1 |
FFFFFFFFFFFFD310 31FFF14B call DisplayByte |
FFFFFFFFFFFFD314 27740000005 lm [sp],r1/r3/lr |
FFFFFFFFFFFFD318 37EF8018 ret #24 |
|
FFFFFFFFFFFFCC28 DrawMissile: |
FFFFFFFFFFFFCC28 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFCC2C 27F40000001 sm [sp],r1/lr |
FFFFFFFFFFFFCC30 42009514 lc r1,MissileY |
FFFFFFFFFFFFCC34 AC101402 bleu r1,#2,MissileOff |
FFFFFFFFFFFFCC38 42009512 lc r1,MissileX |
FFFFFFFFFFFFCC3C 06108601 shrui r1,r1,#3 |
FFFFFFFFFFFFCC40 60009418 sb r1,CursorCol |
FFFFFFFFFFFFCC44 42009514 lc r1,MissileY |
FFFFFFFFFFFFCC48 60009416 sb r1,CursorRow |
FFFFFFFFFFFFCC4C 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFCC50 62009514 sc r1,MissileY |
FFFFFFFFFFFFCC54 E040005E setlo r1,#'^' |
FFFFFFFFFFFFCC58 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCC5C 40009418 lb r1,CursorCol |
FFFFFFFFFFFFCC60 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFCC64 60009418 sb r1,CursorCol |
FFFFFFFFFFFFCC68 40009416 lb r1,CursorRow |
FFFFFFFFFFFFCC6C 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFCC70 60009416 sb r1,CursorRow |
FFFFFFFFFFFFCC74 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCC78 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCC7C 27740000001 lm [sp],r1/lr |
FFFFFFFFFFFFCC80 37EF8010 ret #16 |
FFFFFFFFFFFFCC84 MissileOff: |
FFFFFFFFFFFFCC84 60001510 sb r0,MissileActive |
FFFFFFFFFFFFCC88 42009512 lc r1,MissileX |
FFFFFFFFFFFFCC8C 06108601 shrui r1,r1,#3 |
FFFFFFFFFFFFCC90 60009418 sb r1,CursorCol |
FFFFFFFFFFFFCC94 42009514 lc r1,MissileY |
FFFFFFFFFFFFCC98 60009416 sb r1,CursorRow |
FFFFFFFFFFFFCC9C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCCA0 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCCA4 27740000001 lm [sp],r1/lr |
FFFFFFFFFFFFCCA8 37EF8010 ret #16 |
FFFFFFFFFFFFD31C DrawMissile: |
FFFFFFFFFFFFD31C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD320 27F40000001 sm [sp],r1/lr |
FFFFFFFFFFFFD324 42009514 lc r1,MissileY |
FFFFFFFFFFFFD328 AC101402 bleu r1,#2,MissileOff |
FFFFFFFFFFFFD32C 42009512 lc r1,MissileX |
FFFFFFFFFFFFD330 06108601 shrui r1,r1,#3 |
FFFFFFFFFFFFD334 60009418 sb r1,CursorCol |
FFFFFFFFFFFFD338 42009514 lc r1,MissileY |
FFFFFFFFFFFFD33C 60009417 sb r1,CursorRow |
FFFFFFFFFFFFD340 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFD344 62009514 sc r1,MissileY |
FFFFFFFFFFFFD348 E040005E setlo r1,#'^' |
FFFFFFFFFFFFD34C 31FFF07F call DisplayChar |
FFFFFFFFFFFFD350 40009418 lb r1,CursorCol |
FFFFFFFFFFFFD354 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFD358 60009418 sb r1,CursorCol |
FFFFFFFFFFFFD35C 40009417 lb r1,CursorRow |
FFFFFFFFFFFFD360 0E108001 subui r1,r1,#1 |
FFFFFFFFFFFFD364 60009417 sb r1,CursorRow |
FFFFFFFFFFFFD368 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD36C 31FFF07F call DisplayChar |
FFFFFFFFFFFFD370 27740000001 lm [sp],r1/lr |
FFFFFFFFFFFFD374 37EF8010 ret #16 |
FFFFFFFFFFFFD378 MissileOff: |
FFFFFFFFFFFFD378 60001510 sb r0,MissileActive |
FFFFFFFFFFFFD37C 42009512 lc r1,MissileX |
FFFFFFFFFFFFD380 06108601 shrui r1,r1,#3 |
FFFFFFFFFFFFD384 60009418 sb r1,CursorCol |
FFFFFFFFFFFFD388 42009514 lc r1,MissileY |
FFFFFFFFFFFFD38C 60009417 sb r1,CursorRow |
FFFFFFFFFFFFD390 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD394 31FFF07F call DisplayChar |
FFFFFFFFFFFFD398 27740000001 lm [sp],r1/lr |
FFFFFFFFFFFFD39C 37EF8010 ret #16 |
|
FFFFFFFFFFFFCCAC DrawMan: |
FFFFFFFFFFFFCCAC 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFCCB0 27F40000005 sm [sp],r1/r3/lr |
FFFFFFFFFFFFCCB4 E0C0002E setlo r3,#46 |
FFFFFFFFFFFFCCB8 60019416 sb r3,CursorRow |
FFFFFFFFFFFFCCBC 42019508 lc r3,Manpos |
FFFFFFFFFFFFCCC0 06318601 shrui r3,r3,#3 |
FFFFFFFFFFFFCCC4 60019418 sb r3,CursorCol |
FFFFFFFFFFFFCCC8 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCCCC 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCCD0 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFCCD4 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCCD8 E0400041 setlo r1,#'A' |
FFFFFFFFFFFFCCDC 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCCE0 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFCCE4 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCCE8 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCCEC 31FFEF47 call DisplayChar |
FFFFFFFFFFFFCCF0 27740000005 lm [sp],r1/r3/lr |
FFFFFFFFFFFFCCF4 37EF8018 ret #24 |
FFFFFFFFFFFFD3A0 DrawMan: |
FFFFFFFFFFFFD3A0 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFD3A4 27F40000005 sm [sp],r1/r3/lr |
FFFFFFFFFFFFD3A8 E0C0002E setlo r3,#46 |
FFFFFFFFFFFFD3AC 60019417 sb r3,CursorRow |
FFFFFFFFFFFFD3B0 42019508 lc r3,Manpos |
FFFFFFFFFFFFD3B4 06318601 shrui r3,r3,#3 |
FFFFFFFFFFFFD3B8 60019418 sb r3,CursorCol |
FFFFFFFFFFFFD3BC E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD3C0 31FFF07F call DisplayChar |
FFFFFFFFFFFFD3C4 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFD3C8 31FFF07F call DisplayChar |
FFFFFFFFFFFFD3CC E0400041 setlo r1,#'A' |
FFFFFFFFFFFFD3D0 31FFF07F call DisplayChar |
FFFFFFFFFFFFD3D4 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFD3D8 31FFF07F call DisplayChar |
FFFFFFFFFFFFD3DC E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD3E0 31FFF07F call DisplayChar |
FFFFFFFFFFFFD3E4 27740000005 lm [sp],r1/r3/lr |
FFFFFFFFFFFFD3E8 37EF8018 ret #24 |
|
FFFFFFFFFFFFCCF8 DrawInvader: |
FFFFFFFFFFFFCCF8 46018000 lw r3,InvaderPos |
FFFFFFFFFFFFCCFC 160080E9 lw r1,#233 |
FFFFFFFFFFFFCD00 62308000 sc r1,[r3] |
FFFFFFFFFFFFCD04 160080F2 lw r1,#242 |
FFFFFFFFFFFFCD08 62308001 sc r1,1[r3] |
FFFFFFFFFFFFCD0C 160080DF lw r1,#223 |
FFFFFFFFFFFFCD10 62308002 sc r1,2[r3] |
FFFFFFFFFFFFCD14 37EF8000 ret |
FFFFFFFFFFFFD3EC DrawInvader: |
FFFFFFFFFFFFD3EC 46018000 lw r3,InvaderPos |
FFFFFFFFFFFFD3F0 160080E9 lw r1,#233 |
FFFFFFFFFFFFD3F4 62308000 sc r1,[r3] |
FFFFFFFFFFFFD3F8 160080F2 lw r1,#242 |
FFFFFFFFFFFFD3FC 62308001 sc r1,1[r3] |
FFFFFFFFFFFFD400 160080DF lw r1,#223 |
FFFFFFFFFFFFD404 62308002 sc r1,2[r3] |
FFFFFFFFFFFFD408 37EF8000 ret |
|
FFFFFFFFFFFFCD18 DrawInvaders: |
FFFFFFFFFFFFCD18 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFCD1C 27F4000000F sm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFCD20 42009520 lc r1,InvadersRow1 |
FFFFFFFFFFFFCD24 42021570 lc r4,InvadersColpos |
FFFFFFFFFFFFCD28 14110001 andi r2,r1,#1 |
FFFFFFFFFFFFCD2C BE2003A8 beq r2,r0,dinv1 |
FFFFFFFFFFFFCD30 40019571 lb r3,InvadersRowpos |
FFFFFFFFFFFFCD34 60019416 sb r3,CursorRow |
FFFFFFFFFFFFCD38 60021418 sb r4,CursorCol |
FFFFFFFFFFFFCD3C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCD40 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD44 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFCD48 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD4C E0400023 setlo r1,#'#' |
FFFFFFFFFFFFCD50 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD54 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFCD58 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD5C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCD60 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD64 40009416 lb r1,CursorRow |
FFFFFFFFFFFFCD68 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFCD6C 60009416 sb r1,CursorRow |
FFFFFFFFFFFFCD70 40009418 lb r1,CursorCol |
FFFFFFFFFFFFCD74 0E108005 subui r1,r1,#5 |
FFFFFFFFFFFFCD78 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCD7C 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD80 E0400058 setlo r1,#'X' |
FFFFFFFFFFFFCD84 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD88 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCD8C 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD90 E0400058 setlo r1,#'X' |
FFFFFFFFFFFFCD94 31FFF00F call DisplayByte |
FFFFFFFFFFFFCD98 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFCD9C 31FFF00F call DisplayByte |
FFFFFFFFFFFFCDA0 dinv1: |
FFFFFFFFFFFFCDA0 2774000000F lm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFCDA4 37EF8028 ret #40 |
FFFFFFFFFFFFCDA8 DrawBombs: |
FFFFFFFFFFFFCDA8 37EF8000 ret |
FFFFFFFFFFFFD40C DrawInvaders: |
FFFFFFFFFFFFD40C 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFD410 27F4000000F sm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFD414 42009520 lc r1,InvadersRow1 |
FFFFFFFFFFFFD418 42021570 lc r4,InvadersColpos |
FFFFFFFFFFFFD41C 14110001 andi r2,r1,#1 |
FFFFFFFFFFFFD420 BE2003A8 beq r2,r0,dinv1 |
FFFFFFFFFFFFD424 40019571 lb r3,InvadersRowpos |
FFFFFFFFFFFFD428 60019417 sb r3,CursorRow |
FFFFFFFFFFFFD42C 60021418 sb r4,CursorCol |
FFFFFFFFFFFFD430 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD434 31FFF14B call DisplayByte |
FFFFFFFFFFFFD438 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFD43C 31FFF14B call DisplayByte |
FFFFFFFFFFFFD440 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFD444 31FFF14B call DisplayByte |
FFFFFFFFFFFFD448 E0400023 setlo r1,#'#' |
FFFFFFFFFFFFD44C 31FFF14B call DisplayByte |
FFFFFFFFFFFFD450 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD454 31FFF14B call DisplayByte |
FFFFFFFFFFFFD458 40009417 lb r1,CursorRow |
FFFFFFFFFFFFD45C 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFD460 60009417 sb r1,CursorRow |
FFFFFFFFFFFFD464 40009418 lb r1,CursorCol |
FFFFFFFFFFFFD468 0E108005 subui r1,r1,#5 |
FFFFFFFFFFFFD46C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD470 31FFF14B call DisplayByte |
FFFFFFFFFFFFD474 E0400058 setlo r1,#'X' |
FFFFFFFFFFFFD478 31FFF14B call DisplayByte |
FFFFFFFFFFFFD47C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD480 31FFF14B call DisplayByte |
FFFFFFFFFFFFD484 E0400058 setlo r1,#'X' |
FFFFFFFFFFFFD488 31FFF14B call DisplayByte |
FFFFFFFFFFFFD48C E0400020 setlo r1,#' ' |
FFFFFFFFFFFFD490 31FFF14B call DisplayByte |
FFFFFFFFFFFFD494 dinv1: |
FFFFFFFFFFFFD494 2774000000F lm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFD498 37EF8028 ret #40 |
FFFFFFFFFFFFD49C DrawBombs: |
FFFFFFFFFFFFD49C 37EF8000 ret |
|
FFFFFFFFFFFFCDAC Invaders: |
FFFFFFFFFFFFCDAC FFFFFFFFFFFF0000 subui sp,#240 |
FFFFFFFFFFFFCDB0 27F4000000F sm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFCDB4 31FFF2F4 call InitializeGame |
FFFFFFFFFFFFCDB8 InvadersLoop: |
FFFFFFFFFFFFCDB8 31FFF2FE call DrawScore |
FFFFFFFFFFFFCDBC 31FFF346 call DrawInvaders |
FFFFFFFFFFFFCDC0 31FFF36A call DrawBombs |
FFFFFFFFFFFFCDC4 31FFF30A call DrawMissile |
FFFFFFFFFFFFCDC8 31FFF32B call DrawMan |
FFFFFFFFFFFFCDCC TestMoveMan: |
FFFFFFFFFFFFCDCC 31FFEE08 call KeybdGetChar |
FFFFFFFFFFFFCDD0 B010046B beqi r1,#'k',MoveManRight |
FFFFFFFFFFFFCDD4 B010096A beqi r1,#'j',MoveManLeft |
FFFFFFFFFFFFCDD8 B0100D20 beqi r1,#' ',FireMissile |
FFFFFFFFFFFFCDDC BE0002AA bra Invaders1 |
FFFFFFFFFFFFCDE0 MoveManRight: |
FFFFFFFFFFFFCDE0 42011508 lc r2,Manpos |
FFFFFFFFFFFFCDE4 E6800280 ; SETLO |
FFFFFFFFFFFFCDE8 BE2D0247 bgtu r2,#640,Invaders1 |
FFFFFFFFFFFFCDEC 0A210008 addui r2,r2,#8 |
FFFFFFFFFFFFCDF0 62011508 sc r2,Manpos |
FFFFFFFFFFFFCDF4 BE0001EA bra Invaders1 |
FFFFFFFFFFFFCDF8 MoveManLeft: |
FFFFFFFFFFFFCDF8 42011508 lc r2,Manpos |
FFFFFFFFFFFFCDFC BE2001A2 ble r2,r0,Invaders1 |
FFFFFFFFFFFFCE00 0E210008 subui r2,r2,#8 |
FFFFFFFFFFFFCE04 62011508 sc r2,Manpos |
FFFFFFFFFFFFCE08 BE00014A bra Invaders1 |
FFFFFFFFFFFFCE0C FireMissile: |
FFFFFFFFFFFFCE0C 40011510 lb r2,MissileActive |
FFFFFFFFFFFFCE10 BE200109 bne r2,r0,Invaders1 |
FFFFFFFFFFFFCE14 E0800001 setlo r2,#1 |
FFFFFFFFFFFFCE18 60011510 sb r2,MissileActive |
FFFFFFFFFFFFCE1C 42011508 lc r2,Manpos |
FFFFFFFFFFFFCE20 62011512 sc r2,MissileX |
FFFFFFFFFFFFCE24 E080002E setlo r2,#46 |
FFFFFFFFFFFFCE28 62011514 sc r2,MissileY |
FFFFFFFFFFFFCE2C BE00002A bra Invaders1 |
FFFFFFFFFFFFCE30 Invaders1: |
FFFFFFFFFFFFCE30 B0100203 beqi r1,#CTRLC,InvadersEnd |
FFFFFFFFFFFFCE34 BE007C2A bra InvadersLoop |
FFFFFFFFFFFFCE38 InvadersEnd: |
FFFFFFFFFFFFCE38 2774000000F lm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFCE3C 0BEF00F0 addui sp,sp,#240 |
FFFFFFFFFFFFCE40 BE0020CA bra Monitor |
FFFFFFFFFFFFD4A0 Invaders: |
FFFFFFFFFFFFD4A0 FFFFFFFFFFFF0000 subui sp,#240 |
FFFFFFFFFFFFD4A4 27F4000000F sm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFD4A8 31FFF4B1 call InitializeGame |
FFFFFFFFFFFFD4AC InvadersLoop: |
FFFFFFFFFFFFD4AC 31FFF4BB call DrawScore |
FFFFFFFFFFFFD4B0 31FFF503 call DrawInvaders |
FFFFFFFFFFFFD4B4 31FFF527 call DrawBombs |
FFFFFFFFFFFFD4B8 31FFF4C7 call DrawMissile |
FFFFFFFFFFFFD4BC 31FFF4E8 call DrawMan |
FFFFFFFFFFFFD4C0 TestMoveMan: |
FFFFFFFFFFFFD4C0 31FFEF07 call KeybdGetChar |
FFFFFFFFFFFFD4C4 B010046B beqi r1,#'k',MoveManRight |
FFFFFFFFFFFFD4C8 B010096A beqi r1,#'j',MoveManLeft |
FFFFFFFFFFFFD4CC B0100D20 beqi r1,#' ',FireMissile |
FFFFFFFFFFFFD4D0 BE0002AA bra Invaders1 |
FFFFFFFFFFFFD4D4 MoveManRight: |
FFFFFFFFFFFFD4D4 42011508 lc r2,Manpos |
FFFFFFFFFFFFD4D8 E6800280 ; SETLO |
FFFFFFFFFFFFD4DC BE2D0247 bgtu r2,#640,Invaders1 |
FFFFFFFFFFFFD4E0 0A210008 addui r2,r2,#8 |
FFFFFFFFFFFFD4E4 62011508 sc r2,Manpos |
FFFFFFFFFFFFD4E8 BE0001EA bra Invaders1 |
FFFFFFFFFFFFD4EC MoveManLeft: |
FFFFFFFFFFFFD4EC 42011508 lc r2,Manpos |
FFFFFFFFFFFFD4F0 BE2001A2 ble r2,r0,Invaders1 |
FFFFFFFFFFFFD4F4 0E210008 subui r2,r2,#8 |
FFFFFFFFFFFFD4F8 62011508 sc r2,Manpos |
FFFFFFFFFFFFD4FC BE00014A bra Invaders1 |
FFFFFFFFFFFFD500 FireMissile: |
FFFFFFFFFFFFD500 40011510 lb r2,MissileActive |
FFFFFFFFFFFFD504 BE200109 bne r2,r0,Invaders1 |
FFFFFFFFFFFFD508 E0800001 setlo r2,#1 |
FFFFFFFFFFFFD50C 60011510 sb r2,MissileActive |
FFFFFFFFFFFFD510 42011508 lc r2,Manpos |
FFFFFFFFFFFFD514 62011512 sc r2,MissileX |
FFFFFFFFFFFFD518 E080002E setlo r2,#46 |
FFFFFFFFFFFFD51C 62011514 sc r2,MissileY |
FFFFFFFFFFFFD520 BE00002A bra Invaders1 |
FFFFFFFFFFFFD524 Invaders1: |
FFFFFFFFFFFFD524 B0100203 beqi r1,#CTRLC,InvadersEnd |
FFFFFFFFFFFFD528 BE007C2A bra InvadersLoop |
FFFFFFFFFFFFD52C InvadersEnd: |
FFFFFFFFFFFFD52C 2774000000F lm [sp],r1/r2/r3/r4/lr |
FFFFFFFFFFFFD530 0BEF00F0 addui sp,sp,#240 |
FFFFFFFFFFFFD534 BE0017AA bra Monitor |
|
;============================================================================== |
;============================================================================== |
; |
; Initialize the SD card |
; Returns |
; r = 0 if successful, 1 otherwise |
; |
FFFFFFFFFFFFD538 spi_init: |
FFFFFFFFFFFFD538 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFD53C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD540 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFD544 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFD548 E69C0500 ; SETLO |
FFFFFFFFFFFFD54C EE800003 ; SETMID |
FFFFFFFFFFFFD550 6A0D0C2D lea r3,SPIMASTER |
FFFFFFFFFFFFD554 16008001 lw r1,#SPI_INIT_SD |
FFFFFFFFFFFFD558 90308002 outb r1,SPI_TRANS_TYPE_REG[r3] |
FFFFFFFFFFFFD55C 16008001 lw r1,#SPI_TRANS_START |
FFFFFFFFFFFFD560 90308003 outb r1,SPI_TRANS_CTRL_REG[r3] |
FFFFFFFFFFFFD564 DE000000 nop |
FFFFFFFFFFFFD568 spi_init1: |
FFFFFFFFFFFFD568 80308004 inb r1,SPI_TRANS_STATUS_REG[r3] |
FFFFFFFFFFFFD56C 02110009 mov r2,r1 ; note: some time needs to be wasted |
FFFFFFFFFFFFD570 02208009 mov r1,r2 ; between status reads. |
FFFFFFFFFFFFD574 B01FFD01 beqi r1,#SPI_TRANS_BUSY,spi_init1 |
FFFFFFFFFFFFD578 80308005 inb r1,SPI_TRANS_ERROR_REG[r3] |
FFFFFFFFFFFFD57C 2A108204 bfext r1,r1,#1,#0 |
FFFFFFFFFFFFD580 B2100500 bne r1,#SPI_INIT_NO_ERROR,spi_error |
FFFFFFFFFFFFD584 9A00D946 lea r1,spi_init_ok_msg |
FFFFFFFFFFFFD588 31FFF122 call DisplayString |
FFFFFFFFFFFFD58C 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFD590 BE0000AA bra spi_init_exit |
FFFFFFFFFFFFD594 spi_error: |
FFFFFFFFFFFFD594 31FFF14B call DisplayByte |
FFFFFFFFFFFFD598 9A00D960 lea r1,spi_init_error_msg |
FFFFFFFFFFFFD59C 31FFF122 call DisplayString |
FFFFFFFFFFFFD5A0 16008001 lw r1,#1 |
FFFFFFFFFFFFD5A4 spi_init_exit: |
FFFFFFFFFFFFD5A4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD5A8 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFD5AC 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFD5B0 37EF8018 ret #24 |
|
|
; SPI read sector |
; |
; r1= sector number to read |
; r2= address to place read data |
; Returns: |
; r1 = 0 if successful |
; |
FFFFFFFFFFFFD5B4 spi_read_sector: |
FFFFFFFFFFFFD5B4 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFD5B8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD5BC 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFD5C0 67E10010 sw r2,16[sp] |
FFFFFFFFFFFFD5C4 67E18018 sw r3,24[sp] |
FFFFFFFFFFFFD5C8 67E20020 sw r4,32[sp] |
FFFFFFFFFFFFD5CC E69C0500 ; SETLO |
FFFFFFFFFFFFD5D0 EE800003 ; SETMID |
FFFFFFFFFFFFD5D4 6A0D0C2D lea r3,SPIMASTER |
|
; spi master wants a byte address, so we multiply the sector number |
; by 512. |
FFFFFFFFFFFFD5D8 06109206 shlui r1,r1,#9 |
FFFFFFFFFFFFD5DC 90308007 outb r1,SPI_SD_ADDR_7_0_REG[r3] |
FFFFFFFFFFFFD5E0 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFD5E4 90308008 outb r1,SPI_SD_ADDR_15_8_REG[r3] |
FFFFFFFFFFFFD5E8 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFD5EC 90308009 outb r1,SPI_SD_ADDR_23_16_REG[r3] |
FFFFFFFFFFFFD5F0 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFD5F4 9030800A outb r1,SPI_SD_ADDR_31_24_REG[r3] |
|
; Force the reciever fifo to be empty, in case a prior error leaves it |
; in an unknown state. |
FFFFFFFFFFFFD5F8 16008001 lw r1,#1 |
FFFFFFFFFFFFD5FC 90308014 outb r1,SPI_RX_FIFO_CTRL_REG[r3] |
|
FFFFFFFFFFFFD600 16008002 lw r1,#RW_READ_SD_BLOCK |
FFFFFFFFFFFFD604 90308002 outb r1,SPI_TRANS_TYPE_REG[r3] |
FFFFFFFFFFFFD608 16008001 lw r1,#SPI_TRANS_START |
FFFFFFFFFFFFD60C 90308003 outb r1,SPI_TRANS_CTRL_REG[r3] |
FFFFFFFFFFFFD610 DE000000 nop |
FFFFFFFFFFFFD614 spi_read_sect1: |
FFFFFFFFFFFFD614 80308004 inb r1,SPI_TRANS_STATUS_REG[r3] |
FFFFFFFFFFFFD618 02120009 mov r4,r1 ; just a delay between consecutive status reg reads |
FFFFFFFFFFFFD61C 02408009 mov r1,r4 |
FFFFFFFFFFFFD620 B01FFD01 beqi r1,#SPI_TRANS_BUSY,spi_read_sect1 |
FFFFFFFFFFFFD624 80308005 inb r1,SPI_TRANS_ERROR_REG[r3] |
FFFFFFFFFFFFD628 2A108614 bfext r1,r1,#3,#2 |
FFFFFFFFFFFFD62C B2100800 bnei r1,#SPI_READ_NO_ERROR,spi_read_error |
FFFFFFFFFFFFD630 16020200 lw r4,#512 ; read 512 bytes from fifo |
FFFFFFFFFFFFD634 spi_read_sect2: |
FFFFFFFFFFFFD634 80308010 inb r1,SPI_RX_FIFO_DATA_REG[r3] |
FFFFFFFFFFFFD638 60208000 sb r1,[r2] |
FFFFFFFFFFFFD63C 0A210001 addui r2,r2,#1 |
FFFFFFFFFFFFD640 BE027FAF loop r4,spi_read_sect2 |
FFFFFFFFFFFFD644 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFD648 BE0000AA bra spi_read_ret |
FFFFFFFFFFFFD64C spi_read_error: |
FFFFFFFFFFFFD64C 31FFF14B call DisplayByte |
FFFFFFFFFFFFD650 9A00D99E lea r1,spi_read_error_msg |
FFFFFFFFFFFFD654 31FFF122 call DisplayString |
FFFFFFFFFFFFD658 16008001 lw r1,#1 |
FFFFFFFFFFFFD65C spi_read_ret: |
FFFFFFFFFFFFD65C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD660 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFD664 47E10010 lw r2,16[sp] |
FFFFFFFFFFFFD668 47E18018 lw r3,24[sp] |
FFFFFFFFFFFFD66C 47E20020 lw r4,32[sp] |
FFFFFFFFFFFFD670 37EF8028 ret #40 |
|
; Read the boot sector from the disk. |
; Must find it first by looking for the signature bytes 'EB' and '55AA'. |
; |
FFFFFFFFFFFFD674 spi_read_boot: |
FFFFFFFFFFFFD674 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFD678 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD67C 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFD680 67E18010 sw r3,16[sp] |
FFFFFFFFFFFFD684 67E28018 sw r5,24[sp] |
FFFFFFFFFFFFD688 660030F8 sw r0,startSector ; default starting sector |
FFFFFFFFFFFFD68C 160181F4 lw r3,#500 ;1934720 ; number of sectors to read (up to 1GB) |
FFFFFFFFFFFFD690 16028000 lw r5,#0 ; r5 = starting address |
FFFFFFFFFFFFD694 spi_read_boot1: |
FFFFFFFFFFFFD694 02508009 mov r1,r5 ; r1 = sector number |
FFFFFFFFFFFFD698 16010008 lw r2,#8 ; eight digits |
FFFFFFFFFFFFD69C 60001418 sb r0,CursorCol |
FFFFFFFFFFFFD6A0 31FFF13F call DisplayNum ; Display the sector number being checked |
FFFFFFFFFFFFD6A4 02508009 mov r1,r5 ; r1 = sector number |
FFFFFFFFFFFFD6A8 E6800000 ; SETLO |
FFFFFFFFFFFFD6AC EE800402 ; SETMID |
FFFFFFFFFFFFD6B0 040D0809 lw r2,#0x100800000 ; r2 = target address |
FFFFFFFFFFFFD6B4 31FFF56D call spi_read_sector |
|
; The following displays the contents of the sector |
; lw r1,#0x10 |
; lw r2,#0x3800 |
;spi_read_boot5: |
; call DisplayMemB |
; loop r1,spi_read_boot5 |
|
FFFFFFFFFFFFD6B8 0A528001 addui r5,r5,#1 ; move to next sector |
FFFFFFFFFFFFD6BC E6800000 ; SETLO |
FFFFFFFFFFFFD6C0 EE800402 ; SETMID |
FFFFFFFFFFFFD6C4 6A0D0405 lbu r1,0x100800000 |
FFFFFFFFFFFFD6C8 121100EB cmpui r2,r1,#0xEB |
FFFFFFFFFFFFD6CC BE200088 beq r2,r0,spi_read_boot2 |
FFFFFFFFFFFFD6D0 spi_read_boot3: |
FFFFFFFFFFFFD6D0 BE01FE2F loop r3,spi_read_boot1 |
FFFFFFFFFFFFD6D4 16008001 lw r1,#1 ; r1 = 1 for error |
FFFFFFFFFFFFD6D8 BE0001EA bra spi_read_boot4 |
FFFFFFFFFFFFD6DC spi_read_boot2: |
FFFFFFFFFFFFD6DC 9A00D728 lea r1,msgFoundEB |
FFFFFFFFFFFFD6E0 31FFF122 call DisplayString |
FFFFFFFFFFFFD6E4 E68001FE ; SETLO |
FFFFFFFFFFFFD6E8 EE800402 ; SETMID |
FFFFFFFFFFFFD6EC 6A0D0405 lbu r1,0x1008001FE ; check for 0x55AA signature |
FFFFFFFFFFFFD6F0 B21FF855 bnei r1,#0x55,spi_read_boot3 |
FFFFFFFFFFFFD6F4 E68001FF ; SETLO |
FFFFFFFFFFFFD6F8 EE800402 ; SETMID |
FFFFFFFFFFFFD6FC 6A0D0405 lbu r1,0x1008001FF |
FFFFFFFFFFFFD700 E68000AA ; SETLO |
FFFFFFFFFFFFD704 BE1D7E69 bnei r1,#0xAA,spi_read_boot3 |
FFFFFFFFFFFFD708 0E508001 subui r1,r5,#1 |
FFFFFFFFFFFFD70C 6600B0F8 sw r1,startSector |
FFFFFFFFFFFFD710 0410840A xor r1,r1,r1 ; r1 = 0, for okay status |
FFFFFFFFFFFFD714 spi_read_boot4: |
FFFFFFFFFFFFD714 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD718 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFD71C 47E18010 lw r3,16[sp] |
FFFFFFFFFFFFD720 47E28018 lw r5,24[sp] |
FFFFFFFFFFFFD724 37EF8020 ret #32 |
|
FFFFFFFFFFFFD728 msgFoundEB: |
FFFFFFFFFFFFD728 424520646E756F46 db "Found EB code.",CR,LF,0 |
FFFFFFFFFFFFD730 0A0D2E65646F6320 |
FFFFFFFFFFFFD73C .align 4 |
|
; Load the FAT tables into memory |
; |
FFFFFFFFFFFFD73C loadFAT: |
FFFFFFFFFFFFD73C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD740 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD744 E6800016 ; SETLO |
FFFFFFFFFFFFD748 EE800402 ; SETMID |
FFFFFFFFFFFFD74C 6A0D0C06 lcu r3,0x100800016 ; sectors per FAT |
FFFFFFFFFFFFD750 E6800010 ; SETLO |
FFFFFFFFFFFFD754 EE800402 ; SETMID |
FFFFFFFFFFFFD758 6A0D0805 lbu r2,0x100800010 ; number of FATs |
FFFFFFFFFFFFD75C 04310C18 mulu r3,r3,r2 ; offset |
FFFFFFFFFFFFD760 E6800200 ; SETLO |
FFFFFFFFFFFFD764 EE800402 ; SETMID |
FFFFFFFFFFFFD768 6A0D082D lea r2,0x100800200 ; where to place FAT |
FFFFFFFFFFFFD76C E680000E ; SETLO |
FFFFFFFFFFFFD770 EE800402 ; SETMID |
FFFFFFFFFFFFD774 6A0D1406 lcu r5,0x10080000E ; r5 = # reserved sectors before FAT |
FFFFFFFFFFFFD778 460330F8 lw r6,startSector |
FFFFFFFFFFFFD77C 04531403 addu r5,r5,r6 |
FFFFFFFFFFFFD780 loadFAT1: |
FFFFFFFFFFFFD780 02508009 mov r1,r5 ; r1 = sector # |
FFFFFFFFFFFFD784 31FFF56D call spi_read_sector |
FFFFFFFFFFFFD788 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFD78C 0A210200 addui r2,r2,#512 ; advance 512 bytes |
FFFFFFFFFFFFD790 BE01FF8F loop r3,loadFAT1 |
FFFFFFFFFFFFD794 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD798 37EF8008 ret #8 |
|
; Load the root directory from disk |
; r2 = where to place root directory in memory |
; |
FFFFFFFFFFFFD79C loadRootDirectory: |
FFFFFFFFFFFFD79C E6800016 ; SETLO |
FFFFFFFFFFFFD7A0 EE800402 ; SETMID |
FFFFFFFFFFFFD7A4 6A0D0C06 lcu r3,0x100800016 ; sectors per FAT |
FFFFFFFFFFFFD7A8 E6800010 ; SETLO |
FFFFFFFFFFFFD7AC EE800402 ; SETMID |
FFFFFFFFFFFFD7B0 6A0D1005 lbu r4,0x100800010 ; number of FATs |
FFFFFFFFFFFFD7B4 04320C18 mulu r3,r3,r4 ; offset |
FFFFFFFFFFFFD7B8 E680000E ; SETLO |
FFFFFFFFFFFFD7BC EE800402 ; SETMID |
FFFFFFFFFFFFD7C0 6A0D1006 lcu r4,0x10080000E ; r2 = # reserved sectors before FAT |
FFFFFFFFFFFFD7C4 04320C03 addu r3,r3,r4 ; r3 = root directory sector number |
FFFFFFFFFFFFD7C8 460330F8 lw r6,startSector |
FFFFFFFFFFFFD7CC 04331403 addu r5,r3,r6 ; r5 = root directory sector number |
; we have to use two byte loads here because the number is at an unaligned data address |
FFFFFFFFFFFFD7D0 E6800011 ; SETLO |
FFFFFFFFFFFFD7D4 EE800402 ; SETMID |
FFFFFFFFFFFFD7D8 6A0D1C05 lbu r7,0x100800011 ; r7 <= number of root directory entries |
FFFFFFFFFFFFD7DC E6800012 ; SETLO |
FFFFFFFFFFFFD7E0 EE800402 ; SETMID |
FFFFFFFFFFFFD7E4 6A0D2005 lbu r8,0x100800012 |
FFFFFFFFFFFFD7E8 06841006 shlui r8,r8,#8 |
FFFFFFFFFFFFD7EC 04741C09 or r7,r7,r8 |
FFFFFFFFFFFFD7F0 02740009 mov r8,r7 ; r8 = number of root directory entries |
FFFFFFFFFFFFD7F4 06738A06 shlui r7,r7,#5 ; r7 *=32 = size of root directory table (bytes) |
FFFFFFFFFFFFD7F8 06739201 shrui r7,r7,#9 ; r7 /= 512 = number of sectors in root directory |
FFFFFFFFFFFFD7FC 02718009 mov r3,r7 |
FFFFFFFFFFFFD800 loadRootDir1: |
FFFFFFFFFFFFD800 02508009 mov r1,r5 |
FFFFFFFFFFFFD804 31FFF56D call spi_read_sector |
FFFFFFFFFFFFD808 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFD80C 0A210200 addui r2,r2,#512 |
FFFFFFFFFFFFD810 BE01FF8F loop r3,loadRootDir1 |
|
FFFFFFFFFFFFD814 loadBootFile: |
; For now we cheat and just go directly to sector 512. |
FFFFFFFFFFFFD814 BE0004AA bra loadBootFileTmp |
|
FFFFFFFFFFFFD818 E6800016 ; SETLO |
FFFFFFFFFFFFD81C EE800402 ; SETMID |
FFFFFFFFFFFFD820 6A0D0C06 lcu r3,0x100800016 ; sectors per FAT |
FFFFFFFFFFFFD824 E6800010 ; SETLO |
FFFFFFFFFFFFD828 EE800402 ; SETMID |
FFFFFFFFFFFFD82C 6A0D0805 lbu r2,0x100800010 ; number of FATs |
FFFFFFFFFFFFD830 04310C18 mulu r3,r3,r2 ; offset |
FFFFFFFFFFFFD834 E680000E ; SETLO |
FFFFFFFFFFFFD838 EE800402 ; SETMID |
FFFFFFFFFFFFD83C 6A0D0806 lcu r2,0x10080000E ; r2 = # reserved sectors before FAT |
FFFFFFFFFFFFD840 04310C03 addu r3,r3,r2 ; r3 = root directory sector number |
; we have to use two byte loads here because the number is at an unaligned data address |
FFFFFFFFFFFFD844 E6800011 ; SETLO |
FFFFFFFFFFFFD848 EE800402 ; SETMID |
FFFFFFFFFFFFD84C 6A0D1C05 lbu r7,0x100800011 ; r7 <= number of root directory entries |
FFFFFFFFFFFFD850 E6800012 ; SETLO |
FFFFFFFFFFFFD854 EE800402 ; SETMID |
FFFFFFFFFFFFD858 6A0D2005 lbu r8,0x100800012 |
FFFFFFFFFFFFD85C 06841006 shlui r8,r8,#8 |
FFFFFFFFFFFFD860 04741C09 or r7,r7,r8 |
FFFFFFFFFFFFD864 02740009 mov r8,r7 ; r8 = number of root directory entries |
FFFFFFFFFFFFD868 06738A06 shlui r7,r7,#5 ; r7 *=32 = size of root directory table (bytes) |
FFFFFFFFFFFFD86C 06739201 shrui r7,r7,#9 ; r7 /= 512 = number of sectors in root directory |
|
; now we need to fetch the sectors of the root directory and put them somewhere in |
; memory |
; |
FFFFFFFFFFFFD870 loadBootFile4: |
FFFFFFFFFFFFD870 46308000 lw r1,[r3] ; get filename |
FFFFFFFFFFFFD874 E68F4F42 ; SETLO |
FFFFFFFFFFFFD878 EEA51951 ; SETMID |
FFFFFFFFFFFFD87C F68454C4 ; SETHI |
FFFFFFFFFFFFD880 041D0407 cmpui r1,r1,#0x454C4946544F4F42 ; "BOOTFILE" |
FFFFFFFFFFFFD884 BE100068 beq r1,r0,loadBootFile5 |
FFFFFFFFFFFFD888 loadBootFile3: |
FFFFFFFFFFFFD888 0A318020 addui r3,r3,#32 ; move to next directory entry |
FFFFFFFFFFFFD88C BE03FF2F loop r7,loadBootFile4 |
; boot file not found |
|
; here we found the file in the directory |
; |
FFFFFFFFFFFFD890 loadBootFile5: |
FFFFFFFFFFFFD890 4C31001A lcu r2,0x1a[r3] ; get starting cluster |
FFFFFFFFFFFFD894 E6800011 ; SETLO |
FFFFFFFFFFFFD898 EE800402 ; SETMID |
FFFFFFFFFFFFD89C 6A0D1C06 lcu r7,0x100800011 ; r7 = number of root directory entries |
FFFFFFFFFFFFD8A0 06738A06 shlui r7,r7,#5 ; r7 *=32 = size of root directory table (bytes) |
FFFFFFFFFFFFD8A4 06739201 shrui r7,r7,#9 ; r7 /= 512 = number of sectors in root directory |
|
FFFFFFFFFFFFD8A8 loadBootFileTmp: |
; We load the number of sectors per cluster, then load a single cluster of the file. |
; This is 16kib |
FFFFFFFFFFFFD8A8 E680000D ; SETLO |
FFFFFFFFFFFFD8AC EE800402 ; SETMID |
FFFFFFFFFFFFD8B0 6A0D0C05 lbu r3,0x10080000D ; sectors per cluster |
FFFFFFFFFFFFD8B4 E6800200 ; SETLO |
FFFFFFFFFFFFD8B8 EE800402 ; SETMID |
FFFFFFFFFFFFD8BC 6A0D082D lea r2,0x100800200 ; where to place FAT in memory |
FFFFFFFFFFFFD8C0 4602B0F8 lw r5,startSector ; r5=start sector of disk |
FFFFFFFFFFFFD8C4 0A528200 addui r5,r5,#512 ; r5= sector 512 |
FFFFFFFFFFFFD8C8 loadBootFile1: |
FFFFFFFFFFFFD8C8 02508009 mov r1,r5 ; r1=sector to read |
FFFFFFFFFFFFD8CC 31FFF56D call spi_read_sector |
FFFFFFFFFFFFD8D0 0A528001 addui r5,r5,#1 ; r5 = next sector |
FFFFFFFFFFFFD8D4 0A210200 addui r2,r2,#512 |
FFFFFFFFFFFFD8D8 BE01FF8F loop r3,loadBootFile1 |
FFFFFFFFFFFFD8DC E6800200 ; SETLO |
FFFFFFFFFFFFD8E0 EE800402 ; SETMID |
FFFFFFFFFFFFD8E4 6A0D0407 lhu r1,0x100800200 ; make sure it's bootable |
FFFFFFFFFFFFD8E8 E68F4F42 ; SETLO |
FFFFFFFFFFFFD8EC EE800151 ; SETMID |
FFFFFFFFFFFFD8F0 BE1D0129 bnei r1,#0x544F4F42,loadBootFile2 |
FFFFFFFFFFFFD8F4 16008016 lw r1,#0x16 |
FFFFFFFFFFFFD8F8 9A00D920 lea r1,msgJumpingToBoot |
FFFFFFFFFFFFD8FC 31FFF122 call DisplayString |
FFFFFFFFFFFFD900 E6800204 ; SETLO |
FFFFFFFFFFFFD904 EE800402 ; SETMID |
FFFFFFFFFFFFD908 040D0409 lw r1,#0x100800204 |
FFFFFFFFFFFFD90C 341F8000 jal lr,[r1] |
FFFFFFFFFFFFD910 33FFF20A jmp Monitor |
FFFFFFFFFFFFD914 loadBootFile2: |
FFFFFFFFFFFFD914 9A00D930 lea r1,msgNotBootable |
FFFFFFFFFFFFD918 31FFF122 call DisplayString |
FFFFFFFFFFFFD91C 33FFF20A jmp Monitor |
|
FFFFFFFFFFFFD920 msgJumpingToBoot: |
FFFFFFFFFFFFD920 20676E69706D754A db "Jumping to boot",0 |
FFFFFFFFFFFFD928 00746F6F62206F74 |
FFFFFFFFFFFFD930 msgNotBootable: |
FFFFFFFFFFFFD930 2064726163204453 db "SD card not bootable.",0 |
FFFFFFFFFFFFD938 746F6F6220746F6E |
FFFFFFFFFFFFD946 spi_init_ok_msg: |
FFFFFFFFFFFFD940 4453002E656C6261 db "SD card initialized okay.",0 |
FFFFFFFFFFFFD948 6E69206472616320 |
FFFFFFFFFFFFD950 657A696C61697469 |
FFFFFFFFFFFFD958 002E79616B6F2064 |
FFFFFFFFFFFFD960 spi_init_error_msg: |
FFFFFFFFFFFFD960 20726F727265203A db ": error occurred initializing the SD card.",0 |
FFFFFFFFFFFFD968 646572727563636F |
FFFFFFFFFFFFD970 6C616974696E6920 |
FFFFFFFFFFFFD978 687420676E697A69 |
FFFFFFFFFFFFD980 7261632044532065 |
FFFFFFFFFFFFD98B spi_boot_error_msg: |
FFFFFFFFFFFFD988 6163204453002E64 db "SD card boot error",0 |
FFFFFFFFFFFFD990 20746F6F62206472 |
FFFFFFFFFFFFD99E spi_read_error_msg: |
FFFFFFFFFFFFD998 445300726F727265 db "SD card read error",0 |
FFFFFFFFFFFFD9A0 6572206472616320 |
FFFFFFFFFFFFD9A8 726F727265206461 |
|
FFFFFFFFFFFFD9B4 .align 4 |
|
;============================================================================== |
; Ethernet |
;============================================================================== |
my_MAC1 EQU 0x00 |
my_MAC2 EQU 0xFF |
my_MAC3 EQU 0xEE |
my_MAC4 EQU 0xF0 |
my_MAC5 EQU 0xDA |
my_MAC6 EQU 0x42 |
|
FFFFFFFFFFFFD9B4 .bss |
FFFFFFFFFFFFD9B4 0000000000000000 eth_unique_id dw 0 |
|
FFFFFFFFFFFFD9BC .code |
|
; Initialize the ethmac controller. |
; Supply a MAC address, set MD clock |
; |
FFFFFFFFFFFFD9BC eth_init: |
FFFFFFFFFFFFD9BC E69C2000 ; SETLO |
FFFFFFFFFFFFD9C0 EE800003 ; SETMID |
FFFFFFFFFFFFD9C4 6A0D0C2D lea r3,ETHMAC |
FFFFFFFFFFFFD9C8 16008064 lw r1,#0x64 ; 100 |
FFFFFFFFFFFFD9CC 64308028 sh r1,MIIMODER[r3] |
FFFFFFFFFFFFD9D0 16008007 lw r1,#7 ; PHY address |
FFFFFFFFFFFFD9D4 64308030 sh r1,MIIADDRESS[r3] |
FFFFFFFFFFFFD9D8 E6B0DA42 ; SETLO |
FFFFFFFFFFFFD9DC EEBFFFBB ; SETMID |
FFFFFFFFFFFFD9E0 040D0409 lw r1,#0xEEF0DA42 |
FFFFFFFFFFFFD9E4 64308040 sh r1,0x40[r3] ; MAC0 |
FFFFFFFFFFFFD9E8 160080FF lw r1,#0x00FF |
FFFFFFFFFFFFD9EC 64308044 sh r1,0x44[r3] ; MAC1 |
FFFFFFFFFFFFD9F0 37EF8000 ret |
|
; Request a packet and display on screen |
; r1 = address where to put packet |
; |
FFFFFFFFFFFFD9F4 eth_request_packet: |
FFFFFFFFFFFFD9F4 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFD9F8 67E18000 sw r3,[sp] |
FFFFFFFFFFFFD9FC 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFDA00 67E20010 sw r4,16[sp] |
FFFFFFFFFFFFDA04 E69C2000 ; SETLO |
FFFFFFFFFFFFDA08 EE800003 ; SETMID |
FFFFFFFFFFFFDA0C 6A0D0C2D lea r3,ETHMAC |
FFFFFFFFFFFFDA10 16010004 lw r2,#4 ; clear rx interrupt |
FFFFFFFFFFFFDA14 64310004 sh r2,4[r3] |
FFFFFFFFFFFFDA18 64308604 sh r1,0x604[r3] ; storage address |
FFFFFFFFFFFFDA1C 16016000 lw r2,#0xe000 ; enable interrupt |
FFFFFFFFFFFFDA20 64310600 sh r2,0x600[r3] |
FFFFFFFFFFFFDA24 eth1: |
FFFFFFFFFFFFDA24 DE000000 nop |
FFFFFFFFFFFFDA28 84310004 inh r2,4[r3] |
FFFFFFFFFFFFDA2C 2A210414 bfext r2,r2,#2,#2 ; get bit #2 |
FFFFFFFFFFFFDA30 BE207FA8 beq r2,r0,eth1 |
FFFFFFFFFFFFDA34 84310600 inh r2,0x600[r3] ; get from descriptor |
FFFFFFFFFFFFDA38 06212001 shrui r2,r2,#16 |
FFFFFFFFFFFFDA3C 16018000 lw r3,#0 |
FFFFFFFFFFFFDA40 E6901D88 ; SETLO |
FFFFFFFFFFFFDA44 EE800003 ; SETMID |
FFFFFFFFFFFFDA48 6A0D102D lea r4,TEXTSCR+7560 ; second last line of screen |
FFFFFFFFFFFFDA4C eth20: |
FFFFFFFFFFFFDA4C 6A118805 lbu r2,[r1+r3] ; get byte |
FFFFFFFFFFFFDA50 6A418911 sc r2,[r4+r3*2] ; store to screen |
FFFFFFFFFFFFDA54 0A318001 addui r3,r3,#1 |
FFFFFFFFFFFFDA58 12310053 cmpui r2,r3,#83 |
FFFFFFFFFFFFDA5C BE207F89 bne r2,r0,eth20 |
FFFFFFFFFFFFDA60 47E18000 lw r3,[sp] |
FFFFFFFFFFFFDA64 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDA68 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFDA6C 37EF8018 ret #24 |
|
; r1 = packet address |
; |
FFFFFFFFFFFFDA70 eth_interpret_packet: |
FFFFFFFFFFFFDA70 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDA74 67E18000 sw r3,[sp] |
FFFFFFFFFFFFDA78 67E10008 sw r2,8[sp] |
FFFFFFFFFFFFDA7C 4A11000C lbu r2,12[r1] |
FFFFFFFFFFFFDA80 4A11800D lbu r3,13[r1] |
FFFFFFFFFFFFDA84 B2200608 bnei r2,#8,eth2 ; 0x806 ? |
FFFFFFFFFFFFDA88 B2300506 bnei r3,#6,eth2 |
FFFFFFFFFFFFDA8C 16008002 lw r1,#2 ; return r1 = 2 for ARP |
FFFFFFFFFFFFDA90 eth5: |
FFFFFFFFFFFFDA90 47E18000 lw r3,[sp] |
FFFFFFFFFFFFDA94 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDA98 37EF8010 ret #16 |
FFFFFFFFFFFFDA9C eth2: |
FFFFFFFFFFFFDA9C B2200C08 bnei r2,#8,eth3 ; 0x800 ? |
FFFFFFFFFFFFDAA0 B2300B00 bnei r3,#0,eth3 |
FFFFFFFFFFFFDAA4 4A110017 lbu r2,23[r1] |
FFFFFFFFFFFFDAA8 B2200301 bnei r2,#1,eth4 |
FFFFFFFFFFFFDAAC 16008001 lw r1,#1 |
FFFFFFFFFFFFDAB0 BE007F0A bra eth5 ; return 1 ICMP |
FFFFFFFFFFFFDAB4 eth4: |
FFFFFFFFFFFFDAB4 B2200311 bnei r2,#0x11,eth6 |
FFFFFFFFFFFFDAB8 16008003 lw r1,#3 ; return 3 for UDP |
FFFFFFFFFFFFDABC BE007EAA bra eth5 |
FFFFFFFFFFFFDAC0 eth6: |
FFFFFFFFFFFFDAC0 B2200306 bnei r2,#6,eth7 |
FFFFFFFFFFFFDAC4 16008004 lw r1,#4 ; return 4 for TCP |
FFFFFFFFFFFFDAC8 BE007E4A bra eth5 |
FFFFFFFFFFFFDACC eth7: |
FFFFFFFFFFFFDACC eth3: |
FFFFFFFFFFFFDACC 0410840A xor r1,r1,r1 ; return zero for unknown |
FFFFFFFFFFFFDAD0 47E18000 lw r3,[sp] |
FFFFFFFFFFFFDAD4 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDAD8 37EF8010 ret #16 |
|
; r1 = address of packet to send |
; r2 = packet length |
; |
FFFFFFFFFFFFDADC eth_send_packet: |
FFFFFFFFFFFFDADC 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDAE0 67E18000 sw r3,[sp] |
FFFFFFFFFFFFDAE4 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFDAE8 E69C2000 ; SETLO |
FFFFFFFFFFFFDAEC EE800003 ; SETMID |
FFFFFFFFFFFFDAF0 6A0D0C2D lea r3,ETHMAC |
; wait for tx buffer to be clear |
FFFFFFFFFFFFDAF4 eth8: |
FFFFFFFFFFFFDAF4 84320400 inh r4,0x400[r3] |
FFFFFFFFFFFFDAF8 2A421E7C bfext r4,r4,#15,#15 |
FFFFFFFFFFFFDAFC B04FFE01 beqi r4,#1,eth8 |
FFFFFFFFFFFFDB00 16020001 lw r4,#1 ; clear tx interrupt |
FFFFFFFFFFFFDB04 64320004 sh r4,4[r3] |
; set address |
FFFFFFFFFFFFDB08 64308404 sh r1,0x404[r3] |
; set the packet length field and enable interrupts |
FFFFFFFFFFFFDB0C 06212006 shlui r2,r2,#16 |
FFFFFFFFFFFFDB10 16217000 ori r2,r2,#0xF000 |
FFFFFFFFFFFFDB14 64310400 sh r2,0x400[r3] |
FFFFFFFFFFFFDB18 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFDB1C 47E18000 lw r3,[sp] |
FFFFFFFFFFFFDB20 37EF8010 ret #16 |
|
; Only for IP type packets (not ARP) |
; r1 = rx buffer address |
; r2 = swap flag |
; Returns: |
; r1 = data start index |
; |
FFFFFFFFFFFFDB24 eth_build_packet: |
FFFFFFFFFFFFDB24 0FEF0040 subui sp,sp,#64 |
FFFFFFFFFFFFDB28 67E18000 sw r3,[sp] |
FFFFFFFFFFFFDB2C 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFDB30 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFDB34 67E30018 sw r6,24[sp] |
FFFFFFFFFFFFDB38 67E38020 sw r7,32[sp] |
FFFFFFFFFFFFDB3C 67E40028 sw r8,40[sp] |
FFFFFFFFFFFFDB40 67E48030 sw r9,48[sp] |
FFFFFFFFFFFFDB44 67E50038 sw r10,56[sp] |
FFFFFFFFFFFFDB48 4A118006 lbu r3,6[r1] |
FFFFFFFFFFFFDB4C 4A120007 lbu r4,7[r1] |
FFFFFFFFFFFFDB50 4A128008 lbu r5,8[r1] |
FFFFFFFFFFFFDB54 4A130009 lbu r6,9[r1] |
FFFFFFFFFFFFDB58 4A13800A lbu r7,10[r1] |
FFFFFFFFFFFFDB5C 4A14000B lbu r8,11[r1] |
; write to destination header |
FFFFFFFFFFFFDB60 60118000 sb r3,[r1] |
FFFFFFFFFFFFDB64 60120001 sb r4,1[r1] |
FFFFFFFFFFFFDB68 60128002 sb r5,2[r1] |
FFFFFFFFFFFFDB6C 60130003 sb r6,3[r1] |
FFFFFFFFFFFFDB70 60138004 sb r7,4[r1] |
FFFFFFFFFFFFDB74 60140005 sb r8,5[r1] |
; write to source header |
FFFFFFFFFFFFDB78 16018000 lw r3,#my_MAC1 |
FFFFFFFFFFFFDB7C 60118006 sb r3,6[r1] |
FFFFFFFFFFFFDB80 160180FF lw r3,#my_MAC2 |
FFFFFFFFFFFFDB84 60118007 sb r3,7[r1] |
FFFFFFFFFFFFDB88 160180EE lw r3,#my_MAC3 |
FFFFFFFFFFFFDB8C 60118008 sb r3,8[r1] |
FFFFFFFFFFFFDB90 160180F0 lw r3,#my_MAC4 |
FFFFFFFFFFFFDB94 60118009 sb r3,9[r1] |
FFFFFFFFFFFFDB98 160180DA lw r3,#my_MAC5 |
FFFFFFFFFFFFDB9C 6011800A sb r3,10[r1] |
FFFFFFFFFFFFDBA0 16018042 lw r3,#my_MAC6 |
FFFFFFFFFFFFDBA4 6011800B sb r3,11[r1] |
FFFFFFFFFFFFDBA8 B2201101 bnei r2,#1,eth16 // if (swap) |
FFFFFFFFFFFFDBAC 4A11801A lbu r3,26[r1] |
FFFFFFFFFFFFDBB0 4A12001B lbu r4,27[r1] |
FFFFFFFFFFFFDBB4 4A12801C lbu r5,28[r1] |
FFFFFFFFFFFFDBB8 4A13001D lbu r6,29[r1] |
; read destination |
FFFFFFFFFFFFDBBC 4A13801E lbu r7,30[r1] |
FFFFFFFFFFFFDBC0 4A14001F lbu r8,31[r1] |
FFFFFFFFFFFFDBC4 4A148020 lbu r9,32[r1] |
FFFFFFFFFFFFDBC8 4A150021 lbu r10,33[r1] |
; write to sender |
FFFFFFFFFFFFDBCC 6013801A sb r7,26[r1] |
FFFFFFFFFFFFDBD0 6014001B sb r8,27[r1] |
FFFFFFFFFFFFDBD4 6014801C sb r9,28[r1] |
FFFFFFFFFFFFDBD8 6015001D sb r10,29[r1] |
; write destination |
FFFFFFFFFFFFDBDC 6011801E sb r3,30[r1] |
FFFFFFFFFFFFDBE0 6012001F sb r4,31[r1] |
FFFFFFFFFFFFDBE4 60128020 sb r5,32[r1] |
FFFFFFFFFFFFDBE8 60130021 sb r6,33[r1] |
FFFFFFFFFFFFDBEC eth16: |
FFFFFFFFFFFFDBEC 4601D9B4 lw r3,eth_unique_id |
FFFFFFFFFFFFDBF0 0A318001 addui r3,r3,#1 |
FFFFFFFFFFFFDBF4 6601D9B4 sw r3,eth_unique_id |
FFFFFFFFFFFFDBF8 60118013 sb r3,19[r1] |
FFFFFFFFFFFFDBFC 06319001 shrui r3,r3,#8 |
FFFFFFFFFFFFDC00 60118012 sb r3,18[r1] |
FFFFFFFFFFFFDC04 4A11800E lbu r3,14[r1] |
FFFFFFFFFFFFDC08 1431800F andi r3,r3,#0xF |
FFFFFFFFFFFFDC0C 06318406 shlui r3,r3,#2 ; *4 |
FFFFFFFFFFFFDC10 0A30800E addui r1,r3,#14 ; return datastart in r1 |
FFFFFFFFFFFFDC14 47E18000 lw r3,[sp] |
FFFFFFFFFFFFDC18 47E20008 lw r4,8[sp] |
FFFFFFFFFFFFDC1C 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFDC20 47E30018 lw r6,24[sp] |
FFFFFFFFFFFFDC24 47E38020 lw r7,32[sp] |
FFFFFFFFFFFFDC28 47E40028 lw r8,40[sp] |
FFFFFFFFFFFFDC2C 47E48030 lw r9,48[sp] |
FFFFFFFFFFFFDC30 47E50038 lw r10,56[sp] |
FFFFFFFFFFFFDC34 37EF8040 ret #64 |
|
; Compute IPv4 checksum of header |
; r1 = packet address |
; r2 = data start |
; |
FFFFFFFFFFFFDC38 eth_checksum: |
FFFFFFFFFFFFDC38 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFDC3C 67E18000 sw r3,[sp] |
FFFFFFFFFFFFDC40 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFDC44 67E28010 sw r5,16[sp] |
; set checksum to zero |
FFFFFFFFFFFFDC48 60100018 sb r0,24[r1] |
FFFFFFFFFFFFDC4C 60100019 sb r0,25[r1] |
FFFFFFFFFFFFDC50 04318C0A xor r3,r3,r3 ; r3 = sum = zero |
FFFFFFFFFFFFDC54 1602000E lw r4,#14 |
FFFFFFFFFFFFDC58 eth15: |
FFFFFFFFFFFFDC58 02228009 mov r5,r2 |
FFFFFFFFFFFFDC5C 0E528001 subui r5,r5,#1 ; r5 = datastart - 1 |
FFFFFFFFFFFFDC60 BE428101 bge r4,r5,eth14 |
FFFFFFFFFFFFDC64 6A121405 lbu r5,[r1+r4] ; shi = [rx_addr+i] |
FFFFFFFFFFFFDC68 6A121845 lbu r6,1[r1+r4] ; slo = [rx_addr+i+1] |
FFFFFFFFFFFFDC6C 06529006 shlui r5,r5,#8 |
FFFFFFFFFFFFDC70 04531409 or r5,r5,r6 ; shilo |
FFFFFFFFFFFFDC74 04328C03 addu r3,r3,r5 ; sum = sum + shilo |
FFFFFFFFFFFFDC78 0A420002 addui r4,r4,#2 ; i = i + 2 |
FFFFFFFFFFFFDC7C BE007EEA bra eth15 |
FFFFFFFFFFFFDC80 eth14: |
FFFFFFFFFFFFDC80 02328009 mov r5,r3 ; r5 = sum |
FFFFFFFFFFFFDC84 1431FFFF andi r3,r3,#0xffff |
FFFFFFFFFFFFDC88 0652A001 shrui r5,r5,#16 |
FFFFFFFFFFFFDC8C 04328C03 addu r3,r3,r5 |
FFFFFFFFFFFFDC90 02318004 com r3,r3 |
FFFFFFFFFFFFDC94 60118019 sb r3,25[r1] ; low byte |
FFFFFFFFFFFFDC98 06319001 shrui r3,r3,#8 |
FFFFFFFFFFFFDC9C 60118018 sb r3,24[r1] ; high byte |
FFFFFFFFFFFFDCA0 67E18000 sw r3,[sp] |
FFFFFFFFFFFFDCA4 67E20008 sw r4,8[sp] |
FFFFFFFFFFFFDCA8 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFDCAC 37EF8018 ret #24 |
|
; r1 = packet address |
; returns r1 = 1 if this IP |
; |
FFFFFFFFFFFFDCB0 eth_verifyIP: |
FFFFFFFFFFFFDCB0 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFDCB4 67E10000 sw r2,[sp] |
FFFFFFFFFFFFDCB8 67E18008 sw r3,8[sp] |
FFFFFFFFFFFFDCBC 67E20010 sw r4,16[sp] |
FFFFFFFFFFFFDCC0 67E28018 sw r5,24[sp] |
FFFFFFFFFFFFDCC4 4A11001E lbu r2,30[r1] |
FFFFFFFFFFFFDCC8 4A11801F lbu r3,31[r1] |
FFFFFFFFFFFFDCCC 4A120020 lbu r4,32[r1] |
FFFFFFFFFFFFDCD0 4A128021 lbu r5,33[r1] |
; Check for general broadcast |
FFFFFFFFFFFFDCD4 E68000FF ; SETLO |
FFFFFFFFFFFFDCD8 BE2D01A9 bnei r2,#0xFF,eth11 |
FFFFFFFFFFFFDCDC E68000FF ; SETLO |
FFFFFFFFFFFFDCE0 BE3D0169 bnei r3,#0xFF,eth11 |
FFFFFFFFFFFFDCE4 E68000FF ; SETLO |
FFFFFFFFFFFFDCE8 BE4D0129 bnei r4,#0xFF,eth11 |
FFFFFFFFFFFFDCEC E68000FF ; SETLO |
FFFFFFFFFFFFDCF0 BE5D00E9 bnei r5,#0xFF,eth11 |
FFFFFFFFFFFFDCF4 eth12: |
FFFFFFFFFFFFDCF4 16008001 lw r1,#1 |
FFFFFFFFFFFFDCF8 eth13: |
FFFFFFFFFFFFDCF8 47E10000 lw r2,[sp] |
FFFFFFFFFFFFDCFC 47E18008 lw r3,8[sp] |
FFFFFFFFFFFFDD00 47E20010 lw r4,16[sp] |
FFFFFFFFFFFFDD04 47E28018 lw r5,24[sp] |
FFFFFFFFFFFFDD08 37EF8020 ret #32 |
FFFFFFFFFFFFDD0C eth11: |
FFFFFFFFFFFFDD0C 02208009 mov r1,r2 |
FFFFFFFFFFFFDD10 06109006 shlui r1,r1,#8 |
FFFFFFFFFFFFDD14 04118409 or r1,r1,r3 |
FFFFFFFFFFFFDD18 06109006 shlui r1,r1,#8 |
FFFFFFFFFFFFDD1C 04120409 or r1,r1,r4 |
FFFFFFFFFFFFDD20 06109006 shlui r1,r1,#8 |
FFFFFFFFFFFFDD24 04128409 or r1,r1,r5 |
FFFFFFFFFFFFDD28 E6A8012A ; SETLO |
FFFFFFFFFFFFDD2C EEBFFF02 ; SETMID |
FFFFFFFFFFFFDD30 BE1D7E28 beqi r1,#0xC0A8012A,eth12 |
FFFFFFFFFFFFDD34 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFDD38 BE007E0A bra eth13 |
|
|
FFFFFFFFFFFFDD3C eth_main: |
FFFFFFFFFFFFDD3C 31FFF66F call eth_init |
FFFFFFFFFFFFDD40 eth_loop: |
FFFFFFFFFFFFDD40 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFDD44 E6800000 ; SETLO |
FFFFFFFFFFFFDD48 EE800400 ; SETMID |
FFFFFFFFFFFFDD4C 040D0409 lw r1,#0x1_00000000 ; memory address zero |
FFFFFFFFFFFFDD50 31FFF67D call eth_request_packet |
FFFFFFFFFFFFDD54 31FFF69C call eth_interpret_packet ; r1 = packet type |
|
FFFFFFFFFFFFDD58 B2102801 bnei r1,#1,eth10 |
FFFFFFFFFFFFDD5C 02110009 mov r2,r1 ; save off r1, r2 = packet type |
FFFFFFFFFFFFDD60 E6800000 ; SETLO |
FFFFFFFFFFFFDD64 EE800400 ; SETMID |
FFFFFFFFFFFFDD68 040D0409 lw r1,#0x1_00000000 ; memory address zero |
FFFFFFFFFFFFDD6C 31FFF72C call eth_verifyIP |
FFFFFFFFFFFFDD70 02118009 mov r3,r1 |
FFFFFFFFFFFFDD74 02208009 mov r1,r2 ; r1 = packet type again |
FFFFFFFFFFFFDD78 B2302001 bnei r3,#1,eth10 |
|
FFFFFFFFFFFFDD7C E6800000 ; SETLO |
FFFFFFFFFFFFDD80 EE800400 ; SETMID |
FFFFFFFFFFFFDD84 040D0409 lw r1,#0x1_00000000 ; memory address zero |
FFFFFFFFFFFFDD88 16010001 lw r2,#1 |
FFFFFFFFFFFFDD8C 31FFF6C9 call eth_build_packet |
FFFFFFFFFFFFDD90 02118009 mov r3,r1 ; r3 = icmpstart |
FFFFFFFFFFFFDD94 E6800000 ; SETLO |
FFFFFFFFFFFFDD98 EE800400 ; SETMID |
FFFFFFFFFFFFDD9C 040D0409 lw r1,#0x1_00000000 ; memory address zero |
FFFFFFFFFFFFDDA0 6A118010 sb r0,[r1+r3] ; [rx_addr+icmpstart] = 0 |
FFFFFFFFFFFFDDA4 4A110011 lbu r2,17[r1] |
FFFFFFFFFFFFDDA8 0A21000E addui r2,r2,#14 ; r2 = len |
FFFFFFFFFFFFDDAC 02230009 mov r6,r2 ; r6 = len |
FFFFFFFFFFFFDDB0 6A119085 lbu r4,2[r1+r3] ; shi |
FFFFFFFFFFFFDDB4 6A1194C5 lbu r5,3[r1+r3] ; slo |
FFFFFFFFFFFFDDB8 06421006 shlui r4,r4,#8 |
FFFFFFFFFFFFDDBC 04429009 or r4,r4,r5 ; sum = {shi,slo}; |
FFFFFFFFFFFFDDC0 02420004 com r4,r4 ; sum = ~sum |
FFFFFFFFFFFFDDC4 0E420800 subui r4,r4,#0x800 ; sum = sum - 0x800 |
FFFFFFFFFFFFDDC8 02420004 com r4,r4 ; sum = ~sum |
FFFFFFFFFFFFDDCC 6A1190D0 sb r4,3[r1+r3] |
FFFFFFFFFFFFDDD0 06421001 shrui r4,r4,#8 |
FFFFFFFFFFFFDDD4 6A119090 sb r4,2[r1+r3] |
FFFFFFFFFFFFDDD8 02310009 mov r2,r3 |
FFFFFFFFFFFFDDDC 31FFF70E call eth_checksum |
FFFFFFFFFFFFDDE0 E6800000 ; SETLO |
FFFFFFFFFFFFDDE4 EE800400 ; SETMID |
FFFFFFFFFFFFDDE8 040D0409 lw r1,#0x1_00000000 ; memory address zero |
FFFFFFFFFFFFDDEC 02610009 mov r2,r6 |
FFFFFFFFFFFFDDF0 31FFF6B7 call eth_send_packet |
FFFFFFFFFFFFDDF4 33FFF750 jmp eth_loop |
FFFFFFFFFFFFDDF8 eth10: |
; r2 = rx_addr |
FFFFFFFFFFFFDDF8 B21FD202 bnei r1,#2,eth_loop ; Do we have ARP ? |
; xor r2,r2,r2 ; memory address zero |
FFFFFFFFFFFFDDFC E6B5E100 ; SETLO |
FFFFFFFFFFFFDE00 EE800017 ; SETMID |
FFFFFFFFFFFFDE04 040D0809 lw r2,#1_00000000 |
; get the opcode |
FFFFFFFFFFFFDE08 4A268015 lbu r13,21[r2] |
FFFFFFFFFFFFDE0C B2DFCD01 bnei r13,#1,eth_loop ; ARP request |
; get destination IP address |
FFFFFFFFFFFFDE10 4A248026 lbu r9,38[r2] |
FFFFFFFFFFFFDE14 4A250027 lbu r10,39[r2] |
FFFFFFFFFFFFDE18 4A258028 lbu r11,40[r2] |
FFFFFFFFFFFFDE1C 4A260029 lbu r12,41[r2] |
; set r15 = destination IP |
FFFFFFFFFFFFDE20 02978009 mov r15,r9 |
FFFFFFFFFFFFDE24 06F79006 shlui r15,r15,#8 |
FFFFFFFFFFFFDE28 04F53C09 or r15,r15,r10 |
FFFFFFFFFFFFDE2C 06F79006 shlui r15,r15,#8 |
FFFFFFFFFFFFDE30 04F5BC09 or r15,r15,r11 |
FFFFFFFFFFFFDE34 06F79006 shlui r15,r15,#8 |
FFFFFFFFFFFFDE38 04F63C09 or r15,r15,r12 |
; Is it our IP ? |
FFFFFFFFFFFFDE3C E6A8012A ; SETLO |
FFFFFFFFFFFFDE40 EEBFFF02 ; SETMID |
FFFFFFFFFFFFDE44 BEFD77E9 bnei r15,#0xC0A8012A,eth_loop; //192.168.1.42 |
; get source IP address |
FFFFFFFFFFFFDE48 4A22801C lbu r5,28[r2] |
FFFFFFFFFFFFDE4C 4A23001D lbu r6,29[r2] |
FFFFFFFFFFFFDE50 4A23801E lbu r7,30[r2] |
FFFFFFFFFFFFDE54 4A24001F lbu r8,31[r2] |
; set r14 = source IP |
FFFFFFFFFFFFDE58 02570009 mov r14,r5 |
FFFFFFFFFFFFDE5C 06E71006 shlui r14,r14,#8 |
FFFFFFFFFFFFDE60 04E33809 or r14,r14,r6 |
FFFFFFFFFFFFDE64 06E71006 shlui r14,r14,#8 |
FFFFFFFFFFFFDE68 04E3B809 or r14,r14,r7 |
FFFFFFFFFFFFDE6C 06E71006 shlui r14,r14,#8 |
FFFFFFFFFFFFDE70 04E43809 or r14,r14,r8 |
; Get the source MAC address |
FFFFFFFFFFFFDE74 4A280016 lbu r16,22[r2] |
FFFFFFFFFFFFDE78 4A288017 lbu r17,23[r2] |
FFFFFFFFFFFFDE7C 4A290018 lbu r18,24[r2] |
FFFFFFFFFFFFDE80 4A298019 lbu r19,25[r2] |
FFFFFFFFFFFFDE84 4A2A001A lbu r20,26[r2] |
FFFFFFFFFFFFDE88 4A2A801B lbu r21,27[r2] |
; write to destination header |
FFFFFFFFFFFFDE8C 60280000 sb r16,[r2] |
FFFFFFFFFFFFDE90 60288001 sb r17,1[r2] |
FFFFFFFFFFFFDE94 60290002 sb r18,2[r2] |
FFFFFFFFFFFFDE98 60298003 sb r19,3[r2] |
FFFFFFFFFFFFDE9C 602A0004 sb r20,4[r2] |
FFFFFFFFFFFFDEA0 602A8005 sb r21,5[r2] |
; and write to ARP destination |
FFFFFFFFFFFFDEA4 60280020 sb r16,32[r2] |
FFFFFFFFFFFFDEA8 60288021 sb r17,33[r2] |
FFFFFFFFFFFFDEAC 60290022 sb r18,34[r2] |
FFFFFFFFFFFFDEB0 60298023 sb r19,35[r2] |
FFFFFFFFFFFFDEB4 602A0024 sb r20,36[r2] |
FFFFFFFFFFFFDEB8 602A8025 sb r21,37[r2] |
; write to source header |
; stbc #0x00,6[r2] |
; stbc #0xFF,7[r2] |
; stbc #0xEE,8[r2] |
; stbc #0xF0,9[r2] |
; stbc #0xDA,10[r2] |
; stbc #0x42,11[r2] |
FFFFFFFFFFFFDEBC 60200006 sb r0,6[r2] |
FFFFFFFFFFFFDEC0 160080FF lw r1,#0xFF |
FFFFFFFFFFFFDEC4 60208007 sb r1,7[r2] |
FFFFFFFFFFFFDEC8 160080EE lw r1,#0xEE |
FFFFFFFFFFFFDECC 60208008 sb r1,8[r2] |
FFFFFFFFFFFFDED0 160080F0 lw r1,#0xF0 |
FFFFFFFFFFFFDED4 60208009 sb r1,9[r2] |
FFFFFFFFFFFFDED8 160080DA lw r1,#0xDA |
FFFFFFFFFFFFDEDC 6020800A sb r1,10[r2] |
FFFFFFFFFFFFDEE0 16008042 lw r1,#0x42 |
FFFFFFFFFFFFDEE4 6020800B sb r1,11[r2] |
; write to ARP source |
; stbc #0x00,22[r2] |
; stbc #0xFF,23[r2] |
; stbc #0xEE,24[r2] |
; stbc #0xF0,25[r2] |
; stbc #0xDA,26[r2] |
; stbc #0x42,27[r2] |
FFFFFFFFFFFFDEE8 60200016 sb r0,22[r2] |
FFFFFFFFFFFFDEEC 160080FF lw r1,#0xFF |
FFFFFFFFFFFFDEF0 60208017 sb r1,23[r2] |
FFFFFFFFFFFFDEF4 160080EE lw r1,#0xEE |
FFFFFFFFFFFFDEF8 60208018 sb r1,24[r2] |
FFFFFFFFFFFFDEFC 160080F0 lw r1,#0xF0 |
FFFFFFFFFFFFDF00 60208019 sb r1,25[r2] |
FFFFFFFFFFFFDF04 160080DA lw r1,#0xDA |
FFFFFFFFFFFFDF08 6020801A sb r1,26[r2] |
FFFFFFFFFFFFDF0C 16008042 lw r1,#0x42 |
FFFFFFFFFFFFDF10 6020801B sb r1,27[r2] |
; swap sender / destination IP |
; write sender |
FFFFFFFFFFFFDF14 6024801C sb r9,28[r2] |
FFFFFFFFFFFFDF18 6025001D sb r10,29[r2] |
FFFFFFFFFFFFDF1C 6025801E sb r11,30[r2] |
FFFFFFFFFFFFDF20 6026001F sb r12,31[r2] |
; write destination |
FFFFFFFFFFFFDF24 60228026 sb r5,38[r2] |
FFFFFFFFFFFFDF28 60230027 sb r6,39[r2] |
FFFFFFFFFFFFDF2C 60238028 sb r7,40[r2] |
FFFFFFFFFFFFDF30 60240029 sb r8,41[r2] |
; change request to reply |
; stbc #2,21[r2] |
FFFFFFFFFFFFDF34 16008002 lw r1,#2 |
FFFFFFFFFFFFDF38 60208015 sb r1,21[r2] |
FFFFFFFFFFFFDF3C 02208009 mov r1,r2 ; r1 = packet address |
FFFFFFFFFFFFDF40 1601002A lw r2,#0x2A ; r2 = packet length |
FFFFFFFFFFFFDF44 31FFF6B7 call eth_send_packet |
FFFFFFFFFFFFDF48 33FFF750 jmp eth_loop |
|
|
;============================================================================== |
;============================================================================== |
;****************************************************************; |
; ; |
; Tiny BASIC for the Raptor64 ; |
2845,26 → 4421,26
; Standard jump table. You can change these addresses if you are |
; customizing this interpreter for a different environment. |
; |
FFFFFFFFFFFFCE44 GOSTART: |
FFFFFFFFFFFFCE44 33FFF39C jmp CSTART ; Cold Start entry point |
FFFFFFFFFFFFCE48 GOWARM: |
FFFFFFFFFFFFCE48 33FFF3BE jmp WSTART ; Warm Start entry point |
FFFFFFFFFFFFCE4C GOOUT: |
FFFFFFFFFFFFCE4C 33FFF95A jmp OUTC ; Jump to character-out routine |
FFFFFFFFFFFFCE50 GOIN: |
FFFFFFFFFFFFCE50 33FFF95B jmp INC ;Jump to character-in routine |
FFFFFFFFFFFFCE54 GOAUXO: |
FFFFFFFFFFFFCE54 33FFF962 jmp AUXOUT ; Jump to auxiliary-out routine |
FFFFFFFFFFFFCE58 GOAUXI: |
FFFFFFFFFFFFCE58 33FFF95C jmp AUXIN ; Jump to auxiliary-in routine |
FFFFFFFFFFFFCE5C GOBYE: |
FFFFFFFFFFFFCE5C 33FFF9EA jmp BYEBYE ; Jump to monitor, DOS, etc. |
FFFFFFFFFFFFDF4C GOSTART: |
FFFFFFFFFFFFDF4C 33FFF7E0 jmp CSTART ; Cold Start entry point |
FFFFFFFFFFFFDF50 GOWARM: |
FFFFFFFFFFFFDF50 33FFF801 jmp WSTART ; Warm Start entry point |
FFFFFFFFFFFFDF54 GOOUT: |
FFFFFFFFFFFFDF54 33FFFD9B jmp OUTC ; Jump to character-out routine |
FFFFFFFFFFFFDF58 GOIN: |
FFFFFFFFFFFFDF58 33FFFD9C jmp INC ;Jump to character-in routine |
FFFFFFFFFFFFDF5C GOAUXO: |
FFFFFFFFFFFFDF5C 33FFFDA3 jmp AUXOUT ; Jump to auxiliary-out routine |
FFFFFFFFFFFFDF60 GOAUXI: |
FFFFFFFFFFFFDF60 33FFFD9D jmp AUXIN ; Jump to auxiliary-in routine |
FFFFFFFFFFFFDF64 GOBYE: |
FFFFFFFFFFFFDF64 33FFFE28 jmp BYEBYE ; Jump to monitor, DOS, etc. |
; |
; Modifiable system constants: |
; |
FFFFFFFFFFFFCE60 align 8 |
FFFFFFFFFFFFCE60 0000000010060000 TXTBGN dw 0x000000001_00600000 ;TXT ;beginning of program memory |
FFFFFFFFFFFFCE68 00000000107FFFF8 ENDMEM dw 0x000000001_07FFFFF8 ; end of available memory |
FFFFFFFFFFFFDF68 align 8 |
FFFFFFFFFFFFDF68 0000000010060000 TXTBGN dw 0x000000001_00600000 ;TXT ;beginning of program memory |
FFFFFFFFFFFFDF70 00000000107FFFF8 ENDMEM dw 0x000000001_07FFFFF8 ; end of available memory |
; |
; The main interpreter starts here: |
; |
2873,127 → 4449,129
; r8 = text buffer pointer |
; r12 = end of text in text buffer |
; |
FFFFFFFFFFFFCE70 align 16 |
FFFFFFFFFFFFCE70 CSTART: |
FFFFFFFFFFFFDF78 0000000000000000 align 16 |
FFFFFFFFFFFFDF80 align 16 |
FFFFFFFFFFFFDF80 CSTART: |
; First save off the link register and OS sp value |
FFFFFFFFFFFFCE70 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCE74 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFCE78 660F1088 sw sp,OSSP |
FFFFFFFFFFFFCE7C 460F4E68 lw sp,ENDMEM ; initialize stack pointer |
FFFFFFFFFFFFCE80 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFCE84 67EF8000 sw lr,[sp] ; save off return address |
FFFFFFFFFFFFCE88 62001416 sc r0,CursorRow ; set screen output |
FFFFFFFFFFFFCE8C 62001418 sc r0,CursorCol |
FFFFFFFFFFFFCE90 6000141A sb r0,CursorFlash |
FFFFFFFFFFFFCE94 6600103C sw r0,pos |
FFFFFFFFFFFFCE98 E6800020 ; SETLO |
FFFFFFFFFFFFCE9C EE800040 ; SETMID |
FFFFFFFFFFFFCEA0 040D0809 lw r2,#0x10000020 ; black chars, yellow background |
FFFFFFFFFFFFCEA4 64011040 sh r2,charToPrint |
FFFFFFFFFFFFCEA8 31FFEED9 call ClearScreen |
FFFFFFFFFFFFCEAC 9A00E5C0 lea r1,msgInit ; tell who we are |
FFFFFFFFFFFFCEB0 31FFF94D call PRMESGAUX |
FFFFFFFFFFFFCEB4 9A00E5C0 lea r1,msgInit ; tell who we are |
FFFFFFFFFFFFCEB8 31FFF940 call PRMESG |
FFFFFFFFFFFFCEBC 4600CE60 lw r1,TXTBGN ; init. end-of-program pointer |
FFFFFFFFFFFFCEC0 660090D0 sw r1,TXTUNF |
FFFFFFFFFFFFCEC4 4600CE68 lw r1,ENDMEM ; get address of end of memory |
FFFFFFFFFFFFCEC8 0E108800 subui r1,r1,#2048 ; reserve 2K for the stack |
FFFFFFFFFFFFCECC 660090F8 sw r1,STKBOT |
FFFFFFFFFFFFCED0 0E10A000 subui r1,r1,#8192 ; 1000 vars |
FFFFFFFFFFFFCED4 660090D8 sw r1,VARBGN |
FFFFFFFFFFFFCED8 31FFF4C3 call clearVars ; clear the variable area |
FFFFFFFFFFFFCEDC 460090D8 lw r1,VARBGN ; calculate number of bytes free |
FFFFFFFFFFFFCEE0 460190D0 lw r3,TXTUNF |
FFFFFFFFFFFFCEE4 04118404 sub r1,r1,r3 |
FFFFFFFFFFFFCEE8 E0800000 setlo r2,#0 |
FFFFFFFFFFFFCEEC 31FFF88D call PRTNUM |
FFFFFFFFFFFFCEF0 9A00E668 lea r1,msgBytesFree |
FFFFFFFFFFFFCEF4 31FFF940 call PRMESG |
FFFFFFFFFFFFCEF8 WSTART: |
FFFFFFFFFFFFCEF8 660010A8 sw r0,LOPVAR ; initialize internal variables |
FFFFFFFFFFFFCEFC 66001098 sw r0,STKGOS |
FFFFFFFFFFFFCF00 66001090 sw r0,CURRNT ; current line number pointer = 0 |
FFFFFFFFFFFFCF04 460F4E68 lw sp,ENDMEM ; init S.P. again, just in case |
FFFFFFFFFFFFCF08 9A00E676 lea r1,msgReady ; display "Ready" |
FFFFFFFFFFFFCF0C 31FFF940 call PRMESG |
FFFFFFFFFFFFCF10 ST3: |
FFFFFFFFFFFFCF10 E040003E setlo r1,#'>' ; Prompt with a '>' and |
FFFFFFFFFFFFCF14 31FFF7D8 call GETLN ; read a line. |
FFFFFFFFFFFFCF18 31FFF91D call TOUPBUF ; convert to upper case |
FFFFFFFFFFFFCF1C 02860009 mov r12,r8 ; save pointer to end of line |
FFFFFFFFFFFFCF20 9A04111B lea r8,BUFFER ; point to the beginning of line |
FFFFFFFFFFFFCF24 31FFF8FF call TSTNUM ; is there a number there? |
FFFFFFFFFFFFCF28 31FFF914 call IGNBLK ; skip trailing blanks |
FFFFFFFFFFFFDF80 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFDF84 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDF88 660F1088 sw sp,OSSP |
FFFFFFFFFFFFDF8C 460F5F70 lw sp,ENDMEM ; initialize stack pointer |
FFFFFFFFFFFFDF90 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFDF94 67EF8000 sw lr,[sp] ; save off return address |
FFFFFFFFFFFFDF98 60001417 sb r0,CursorRow ; set screen output |
FFFFFFFFFFFFDF9C 60001418 sb r0,CursorCol |
FFFFFFFFFFFFDFA0 6000141A sb r0,CursorFlash |
FFFFFFFFFFFFDFA4 6400104C sh r0,pos |
FFFFFFFFFFFFDFA8 E6800020 ; SETLO |
FFFFFFFFFFFFDFAC EE800040 ; SETMID |
FFFFFFFFFFFFDFB0 040D0809 lw r2,#0x10000020 ; black chars, yellow background |
; sh r2,charToPrint |
FFFFFFFFFFFFDFB4 31FFF011 call ClearScreen |
FFFFFFFFFFFFDFB8 9A00F6B8 lea r1,msgInit ; tell who we are |
; call PRMESGAUX |
FFFFFFFFFFFFDFBC 9A00F6B8 lea r1,msgInit ; tell who we are |
FFFFFFFFFFFFDFC0 31FFFD81 call PRMESG |
FFFFFFFFFFFFDFC4 4600DF68 lw r1,TXTBGN ; init. end-of-program pointer |
FFFFFFFFFFFFDFC8 660090D0 sw r1,TXTUNF |
FFFFFFFFFFFFDFCC 4600DF70 lw r1,ENDMEM ; get address of end of memory |
FFFFFFFFFFFFDFD0 0E109000 subui r1,r1,#4096 ; reserve 4K for the stack |
FFFFFFFFFFFFDFD4 660090F8 sw r1,STKBOT |
FFFFFFFFFFFFDFD8 E6804000 ; SETLO |
FFFFFFFFFFFFDFDC 041D0405 subui r1,r1,#16384 ; 1000 vars |
FFFFFFFFFFFFDFE0 660090D8 sw r1,VARBGN |
FFFFFFFFFFFFDFE4 31FFF905 call clearVars ; clear the variable area |
FFFFFFFFFFFFDFE8 460090D8 lw r1,VARBGN ; calculate number of bytes free |
FFFFFFFFFFFFDFEC 460190D0 lw r3,TXTUNF |
FFFFFFFFFFFFDFF0 04118405 subu r1,r1,r3 |
FFFFFFFFFFFFDFF4 E0800000 setlo r2,#0 |
FFFFFFFFFFFFDFF8 31FFFCCC call PRTNUM |
FFFFFFFFFFFFDFFC 9A00F760 lea r1,msgBytesFree |
FFFFFFFFFFFFE000 31FFFD81 call PRMESG |
FFFFFFFFFFFFE004 WSTART: |
FFFFFFFFFFFFE004 660010A8 sw r0,LOPVAR ; initialize internal variables |
FFFFFFFFFFFFE008 66001098 sw r0,STKGOS |
FFFFFFFFFFFFE00C 66001090 sw r0,CURRNT ; current line number pointer = 0 |
FFFFFFFFFFFFE010 460F5F70 lw sp,ENDMEM ; init S.P. again, just in case |
FFFFFFFFFFFFE014 9A00F76E lea r1,msgReady ; display "Ready" |
FFFFFFFFFFFFE018 31FFFD81 call PRMESG |
FFFFFFFFFFFFE01C ST3: |
FFFFFFFFFFFFE01C E040003E setlo r1,#'>' ; Prompt with a '>' and |
FFFFFFFFFFFFE020 31FFFC1A call GETLN ; read a line. |
FFFFFFFFFFFFE024 31FFFD5E call TOUPBUF ; convert to upper case |
FFFFFFFFFFFFE028 02860009 mov r12,r8 ; save pointer to end of line |
FFFFFFFFFFFFE02C 9A04111B lea r8,BUFFER ; point to the beginning of line |
FFFFFFFFFFFFE030 31FFFD3E call TSTNUM ; is there a number there? |
FFFFFFFFFFFFE034 31FFFD55 call IGNBLK ; skip trailing blanks |
; does line no. exist? (or nonzero?) |
FFFFFFFFFFFFCF2C BE101728 beq r1,r0,DIRECT ; if not, it's a direct statement |
FFFFFFFFFFFFCF30 AC1003FF bleu r1,#0xFFFF,ST2 ; see if line no. is <= 16 bits |
FFFFFFFFFFFFCF34 9A00E694 lea r1,msgLineRange ; if not, we've overflowed |
FFFFFFFFFFFFCF38 BE007F4A bra ERROR |
FFFFFFFFFFFFCF3C ST2: |
FFFFFFFFFFFFE038 BE101708 beq r1,r0,DIRECT ; if not, it's a direct statement |
FFFFFFFFFFFFE03C AC1003FF bleu r1,#0xFFFF,ST2 ; see if line no. is <= 16 bits |
FFFFFFFFFFFFE040 9A00F78C lea r1,msgLineRange ; if not, we've overflowed |
FFFFFFFFFFFFE044 BE007F2A bra ERROR |
FFFFFFFFFFFFE048 ST2: |
; ugliness - store a character at potentially an |
; odd address (unaligned). |
FFFFFFFFFFFFCF3C 02110009 mov r2,r1 ; r2 = line number |
FFFFFFFFFFFFCF40 60817FFE sb r2,-2[r8] |
FFFFFFFFFFFFCF44 06211001 shrui r2,r2,#8 |
FFFFFFFFFFFFCF48 60817FFF sb r2,-1[r8] ; store the binary line no. |
FFFFFFFFFFFFCF4C 0E840002 subui r8,r8,#2 |
FFFFFFFFFFFFCF50 31FFF80C call FNDLN ; find this line in save area |
FFFFFFFFFFFFCF54 02968009 mov r13,r9 ; save possible line pointer |
FFFFFFFFFFFFCF58 BE1001C8 beq r1,r0,ST4 ; if not found, insert |
FFFFFFFFFFFFE048 02110009 mov r2,r1 ; r2 = line number |
FFFFFFFFFFFFE04C 60817FFE sb r2,-2[r8] |
FFFFFFFFFFFFE050 06211001 shrui r2,r2,#8 |
FFFFFFFFFFFFE054 60817FFF sb r2,-1[r8] ; store the binary line no. |
FFFFFFFFFFFFE058 0E840002 subui r8,r8,#2 |
FFFFFFFFFFFFE05C 31FFFC4E call FNDLN ; find this line in save area |
FFFFFFFFFFFFE060 02968009 mov r13,r9 ; save possible line pointer |
FFFFFFFFFFFFE064 BE1001C8 beq r1,r0,ST4 ; if not found, insert |
; here we found the line, so we're replacing the line |
; in the text area |
; first step - delete the line |
FFFFFFFFFFFFCF5C E0400000 setlo r1,#0 |
FFFFFFFFFFFFCF60 31FFF820 call FNDNXT ; find the next line (into r9) |
FFFFFFFFFFFFCF64 BE100049 bne r1,r0,ST7 |
FFFFFFFFFFFFCF68 BE900108 beq r9,r0,ST6 ; no more lines |
FFFFFFFFFFFFCF6C ST7: |
FFFFFFFFFFFFCF6C 02908009 mov r1,r9 ; r1 = pointer to next line |
FFFFFFFFFFFFCF70 02D10009 mov r2,r13 ; pointer to line to be deleted |
FFFFFFFFFFFFCF74 460190D0 lw r3,TXTUNF ; points to top of save area |
FFFFFFFFFFFFCF78 31FFF829 call MVUP ; move up to delete |
FFFFFFFFFFFFCF7C 660110D0 sw r2,TXTUNF ; update the end pointer |
FFFFFFFFFFFFE068 E0400000 setlo r1,#0 |
FFFFFFFFFFFFE06C 31FFFC62 call FNDNXT ; find the next line (into r9) |
FFFFFFFFFFFFE070 BE100049 bne r1,r0,ST7 |
FFFFFFFFFFFFE074 BE900108 beq r9,r0,ST6 ; no more lines |
FFFFFFFFFFFFE078 ST7: |
FFFFFFFFFFFFE078 02908009 mov r1,r9 ; r1 = pointer to next line |
FFFFFFFFFFFFE07C 02D10009 mov r2,r13 ; pointer to line to be deleted |
FFFFFFFFFFFFE080 460190D0 lw r3,TXTUNF ; points to top of save area |
FFFFFFFFFFFFE084 31FFFC6B call MVUP ; move up to delete |
FFFFFFFFFFFFE088 660110D0 sw r2,TXTUNF ; update the end pointer |
; we moved the lines of text after the line being |
; deleted down, so the pointer to the next line |
; needs to be reset |
FFFFFFFFFFFFCF80 02D48009 mov r9,r13 |
FFFFFFFFFFFFCF84 BE00006A bra ST4 |
FFFFFFFFFFFFE08C 02D48009 mov r9,r13 |
FFFFFFFFFFFFE090 BE00006A bra ST4 |
; here there were no more lines, so just move the |
; end of text pointer down |
FFFFFFFFFFFFCF88 ST6: |
FFFFFFFFFFFFCF88 660690D0 sw r13,TXTUNF |
FFFFFFFFFFFFCF8C 02D48009 mov r9,r13 |
FFFFFFFFFFFFCF90 ST4: |
FFFFFFFFFFFFE094 ST6: |
FFFFFFFFFFFFE094 660690D0 sw r13,TXTUNF |
FFFFFFFFFFFFE098 02D48009 mov r9,r13 |
FFFFFFFFFFFFE09C ST4: |
; here we're inserting because the line wasn't found |
; or it was deleted from the text area |
FFFFFFFFFFFFCF90 02C08009 mov r1,r12 ; calculate the length of new line |
FFFFFFFFFFFFCF94 04140404 sub r1,r1,r8 |
FFFFFFFFFFFFCF98 A41FDE03 blei r1,#3,ST3 ; is it just a line no. & CR? if so, it was just a delete |
FFFFFFFFFFFFE09C 02C08009 mov r1,r12 ; calculate the length of new line |
FFFFFFFFFFFFE0A0 04140404 sub r1,r1,r8 |
FFFFFFFFFFFFE0A4 A41FDE03 blei r1,#3,ST3 ; is it just a line no. & CR? if so, it was just a delete |
|
FFFFFFFFFFFFCF9C 460590D0 lw r11,TXTUNF ; compute new end of text |
FFFFFFFFFFFFCFA0 02B50009 mov r10,r11 ; r10 = old TXTUNF |
FFFFFFFFFFFFCFA4 04B0AC02 add r11,r11,r1 ; r11 = new top of TXTUNF (r1=line length) |
FFFFFFFFFFFFE0A8 460590D0 lw r11,TXTUNF ; compute new end of text |
FFFFFFFFFFFFE0AC 02B50009 mov r10,r11 ; r10 = old TXTUNF |
FFFFFFFFFFFFE0B0 04B0AC02 add r11,r11,r1 ; r11 = new top of TXTUNF (r1=line length) |
|
FFFFFFFFFFFFCFA8 460090D8 lw r1,VARBGN ; see if there's enough room |
FFFFFFFFFFFFCFAC BEB08064 bltu r11,r1,ST5 |
FFFFFFFFFFFFCFB0 9A00E76F lea r1,msgTooBig ; if not, say so |
FFFFFFFFFFFFCFB4 33FFF7C8 jmp ERROR |
FFFFFFFFFFFFE0B4 460090D8 lw r1,VARBGN ; see if there's enough room |
FFFFFFFFFFFFE0B8 BEB08064 bltu r11,r1,ST5 |
FFFFFFFFFFFFE0BC 9A00F867 lea r1,msgTooBig ; if not, say so |
FFFFFFFFFFFFE0C0 33FFFC0A jmp ERROR |
|
; open a space in the text area |
FFFFFFFFFFFFCFB8 ST5: |
FFFFFFFFFFFFCFB8 660590D0 sw r11,TXTUNF ; if so, store new end position |
FFFFFFFFFFFFCFBC 02A08009 mov r1,r10 ; points to old end of text |
FFFFFFFFFFFFCFC0 02B10009 mov r2,r11 ; points to new end of text |
FFFFFFFFFFFFCFC4 02918009 mov r3,r9 ; points to start of line after insert line |
FFFFFFFFFFFFCFC8 31FFF82F call MVDOWN ; move things out of the way |
FFFFFFFFFFFFE0C4 ST5: |
FFFFFFFFFFFFE0C4 660590D0 sw r11,TXTUNF ; if so, store new end position |
FFFFFFFFFFFFE0C8 02A08009 mov r1,r10 ; points to old end of text |
FFFFFFFFFFFFE0CC 02B10009 mov r2,r11 ; points to new end of text |
FFFFFFFFFFFFE0D0 02918009 mov r3,r9 ; points to start of line after insert line |
FFFFFFFFFFFFE0D4 31FFFC71 call MVDOWN ; move things out of the way |
|
; copy line into text space |
FFFFFFFFFFFFCFCC 02808009 mov r1,r8 ; set up to do the insertion; move from buffer |
FFFFFFFFFFFFCFD0 02D10009 mov r2,r13 ; to vacated space |
FFFFFFFFFFFFCFD4 02C18009 mov r3,r12 ; until end of buffer |
FFFFFFFFFFFFCFD8 31FFF829 call MVUP ; do it |
FFFFFFFFFFFFCFDC BE0079AA bra ST3 ; go back and get another line |
FFFFFFFFFFFFE0D8 02808009 mov r1,r8 ; set up to do the insertion; move from buffer |
FFFFFFFFFFFFE0DC 02D10009 mov r2,r13 ; to vacated space |
FFFFFFFFFFFFE0E0 02C18009 mov r3,r12 ; until end of buffer |
FFFFFFFFFFFFE0E4 31FFFC6B call MVUP ; do it |
FFFFFFFFFFFFE0E8 BE0079AA bra ST3 ; go back and get another line |
|
;****************************************************************** |
; |
3025,98 → 4603,99
; executed if none of the other table items are matched. |
; |
; Character-matching tables: |
FFFFFFFFFFFFCFE0 align 8 |
FFFFFFFFFFFFCFE0 TAB1: |
FFFFFFFFFFFFCFE0 C4414F4CD453494C db "LOA",'D'+0x80 |
FFFFFFFFFFFFCFE8 4153CE5552D7454E db "SAV",'E'+0x80 |
FFFFFFFFFFFFCFF2 TAB2: |
FFFFFFFFFFFFCFF0 454CD458454EC556 db "LE",'T'+0x80 |
FFFFFFFFFFFFCFF8 47CF544F47C649D4 db "GOSU",'B'+0x80 |
FFFFFFFFFFFFD000 55544552C255534F db "RETUR",'N'+0x80 |
FFFFFFFFFFFFD008 D24F46CD4552CE52 db "FO",'R'+0x80 |
FFFFFFFFFFFFD010 495250D455504E49 db "PRIN",'T'+0x80 |
FFFFFFFFFFFFD018 50C3454B4F50D44E db "POKE",'H'+0x80 |
FFFFFFFFFFFFD020 454B4F50C8454B4F db "POKE",'W'+0x80 |
FFFFFFFFFFFFD028 4F5453C54B4F50D7 db "STO",'P'+0x80 |
FFFFFFFFFFFFD030 43D35953C55942D0 db "CL",'S'+0x80 |
FFFFFFFFFFFFD038 434452D24C43D34C db "RDC",'F'+0x80 |
FFFFFFFFFFFFD042 TAB4: |
FFFFFFFFFFFFD040 50C34B45455000C6 db "PEEK",'H'+0x80 ;Functions |
FFFFFFFFFFFFD048 4B454550C84B4545 db "PEEK",'W'+0x80 ;Functions |
FFFFFFFFFFFFD050 C44E52CB454550D7 db "RN",'D'+0x80 |
FFFFFFFFFFFFD058 55C55A4953D34241 db "US",'R'+0x80 |
FFFFFFFFFFFFD063 TAB5: |
FFFFFFFFFFFFD066 TAB6: |
FFFFFFFFFFFFD060 545300CF5400D253 db "STE",'P'+0x80 ;"STEP" in "FOR" |
FFFFFFFFFFFFD06B TAB8: |
FFFFFFFFFFFFD068 BEBE3CBD3E00D045 db '>'+0x80 |
FFFFFFFFFFFFD075 TAB9: |
FFFFFFFFFFFFD070 C44E4100BCBD3CBD db "AN",'D'+0x80 |
FFFFFFFFFFFFD079 TAB10: |
|
FFFFFFFFFFFFD080 .align 8 |
FFFFFFFFFFFFE0EC TAB1: |
FFFFFFFFFFFFE0E8 D453494CBE0079AA db "LIS",'T'+0x80 ; Direct commands |
FFFFFFFFFFFFE0F0 52D7454EC4414F4C db "RU",'N'+0x80 |
FFFFFFFFFFFFE0FE TAB2: |
FFFFFFFFFFFFE0F8 454EC5564153CE55 db "NEX",'T'+0x80 ; Direct / statement |
FFFFFFFFFFFFE100 47C649D4454CD458 db "GOT",'O'+0x80 |
FFFFFFFFFFFFE108 C255534F47CF544F db "GOSU",'B'+0x80 |
FFFFFFFFFFFFE110 4552CE5255544552 db "RE",'M'+0x80 |
FFFFFFFFFFFFE118 55504E49D24F46CD db "INPU",'T'+0x80 |
FFFFFFFFFFFFE120 4F50D44E495250D4 db "POKE",'C'+0x80 |
FFFFFFFFFFFFE128 C8454B4F50C3454B db "POKE",'H'+0x80 |
FFFFFFFFFFFFE130 4B4F50D7454B4F50 db "POK",'E'+0x80 |
FFFFFFFFFFFFE138 C55942D04F5453C5 db "BY",'E'+0x80 |
FFFFFFFFFFFFE140 4C43D34C43D35953 db "CL",'R'+0x80 |
FFFFFFFFFFFFE14E TAB4: |
FFFFFFFFFFFFE148 455000C6434452D2 db "PEEK",'C'+0x80 ;Functions |
FFFFFFFFFFFFE150 C84B454550C34B45 db "PEEK",'H'+0x80 ;Functions |
FFFFFFFFFFFFE158 454550D74B454550 db "PEE",'K'+0x80 ;Functions |
FFFFFFFFFFFFE160 53D34241C44E52CB db "SIZ",'E'+0x80 |
FFFFFFFFFFFFE16F TAB5: |
FFFFFFFFFFFFE168 5400D25355C55A49 db "T",'O'+0x80 ;"TO" in "FOR" |
FFFFFFFFFFFFE172 TAB6: |
FFFFFFFFFFFFE177 TAB8: |
FFFFFFFFFFFFE170 3E00D045545300CF db '>','='+0x80 ;Relational operators |
FFFFFFFFFFFFE178 BCBD3CBDBEBE3CBD db '<'+0x80 |
FFFFFFFFFFFFE181 TAB9: |
FFFFFFFFFFFFE185 TAB10: |
FFFFFFFFFFFFE180 00D24F00C44E4100 db 0 |
|
FFFFFFFFFFFFE188 .align 8 |
|
;* Execution address tables: |
FFFFFFFFFFFFD080 TAB1_1: |
FFFFFFFFFFFFD080 FFFFFFFFFFFFD338 dw LISTX ;Direct commands |
FFFFFFFFFFFFD088 FFFFFFFFFFFFD67C dw LOAD |
FFFFFFFFFFFFD090 FFFFFFFFFFFFD284 dw NEW |
FFFFFFFFFFFFD098 FFFFFFFFFFFFD29C dw RUN |
FFFFFFFFFFFFD0A0 FFFFFFFFFFFFD728 dw SAVE |
FFFFFFFFFFFFD0A8 TAB2_1: |
FFFFFFFFFFFFD0A8 FFFFFFFFFFFFD508 dw NEXT ; Direct / statement |
FFFFFFFFFFFFD0B0 FFFFFFFFFFFFD664 dw LET |
FFFFFFFFFFFFD0B8 FFFFFFFFFFFFD578 dw IF |
FFFFFFFFFFFFD0C0 FFFFFFFFFFFFD2E4 dw GOTO |
FFFFFFFFFFFFD0C8 FFFFFFFFFFFFD418 dw GOSUB |
FFFFFFFFFFFFD0D0 FFFFFFFFFFFFD454 dw RETURN |
FFFFFFFFFFFFD0D8 FFFFFFFFFFFFD580 dw IF2 ; REM |
FFFFFFFFFFFFD0E0 FFFFFFFFFFFFD48C dw FOR |
FFFFFFFFFFFFD0E8 FFFFFFFFFFFFD5A8 dw INPUT |
FFFFFFFFFFFFD0F0 FFFFFFFFFFFFD380 dw PRINT |
FFFFFFFFFFFFD0F8 FFFFFFFFFFFFD83C dw POKEC |
FFFFFFFFFFFFD100 FFFFFFFFFFFFD868 dw POKEH |
FFFFFFFFFFFFD108 FFFFFFFFFFFFD894 dw POKEW |
FFFFFFFFFFFFD110 FFFFFFFFFFFFD808 dw POKE |
FFFFFFFFFFFFD118 FFFFFFFFFFFFD294 dw STOP |
FFFFFFFFFFFFD120 FFFFFFFFFFFFCE5C dw GOBYE |
FFFFFFFFFFFFD128 FFFFFFFFFFFFD8C0 dw SYSX |
FFFFFFFFFFFFD130 FFFFFFFFFFFFE58C dw _cls |
FFFFFFFFFFFFD138 FFFFFFFFFFFFD304 dw _clr |
FFFFFFFFFFFFD140 FFFFFFFFFFFFE5A0 dw _rdcf |
FFFFFFFFFFFFD148 FFFFFFFFFFFFD65C dw DEFLT |
FFFFFFFFFFFFD150 TAB4_1: |
FFFFFFFFFFFFD150 FFFFFFFFFFFFDD3C dw PEEKC |
FFFFFFFFFFFFD158 FFFFFFFFFFFFDD50 dw PEEKH |
FFFFFFFFFFFFD160 FFFFFFFFFFFFDD64 dw PEEKW |
FFFFFFFFFFFFD168 FFFFFFFFFFFFDD2C dw PEEK ;Functions |
FFFFFFFFFFFFD170 FFFFFFFFFFFFDD94 dw RND |
FFFFFFFFFFFFD178 FFFFFFFFFFFFDE2C dw ABS |
FFFFFFFFFFFFD180 FFFFFFFFFFFFDE4C dw SIZEX |
FFFFFFFFFFFFD188 FFFFFFFFFFFFDD78 dw USRX |
FFFFFFFFFFFFD190 FFFFFFFFFFFFDB50 dw XP40 |
FFFFFFFFFFFFD198 TAB5_1 |
FFFFFFFFFFFFD198 FFFFFFFFFFFFD4A4 dw FR1 ;"TO" in "FOR" |
FFFFFFFFFFFFD1A0 FFFFFFFFFFFFDF1C dw QWHAT |
FFFFFFFFFFFFD1A8 TAB6_1 |
FFFFFFFFFFFFD1A8 FFFFFFFFFFFFD4B8 dw FR2 ;"STEP" in "FOR" |
FFFFFFFFFFFFD1B0 FFFFFFFFFFFFD4C0 dw FR3 |
FFFFFFFFFFFFD1B8 TAB8_1 |
FFFFFFFFFFFFD1B8 FFFFFFFFFFFFD9D0 dw XP11 ;>= Relational operators |
FFFFFFFFFFFFD1C0 FFFFFFFFFFFFD9E0 dw XP12 ;<> |
FFFFFFFFFFFFD1C8 FFFFFFFFFFFFD9F0 dw XP13 ;> |
FFFFFFFFFFFFD1D0 FFFFFFFFFFFFDA10 dw XP15 ;= |
FFFFFFFFFFFFD1D8 FFFFFFFFFFFFDA00 dw XP14 ;<= |
FFFFFFFFFFFFD1E0 FFFFFFFFFFFFDA20 dw XP16 ;< |
FFFFFFFFFFFFD1E8 FFFFFFFFFFFFDA48 dw XP17 |
FFFFFFFFFFFFD1F0 TAB9_1 |
FFFFFFFFFFFFD1F0 FFFFFFFFFFFFD93C dw XP_AND |
FFFFFFFFFFFFD1F8 FFFFFFFFFFFFD94C dw XP_ANDX |
FFFFFFFFFFFFD200 TAB10_1 |
FFFFFFFFFFFFD200 FFFFFFFFFFFFD904 dw XP_OR |
FFFFFFFFFFFFD208 FFFFFFFFFFFFD914 dw XP_ORX |
FFFFFFFFFFFFE188 TAB1_1: |
FFFFFFFFFFFFE188 FFFFFFFFFFFFE440 dw LISTX ;Direct commands |
FFFFFFFFFFFFE190 FFFFFFFFFFFFE784 dw LOAD |
FFFFFFFFFFFFE198 FFFFFFFFFFFFE38C dw NEW |
FFFFFFFFFFFFE1A0 FFFFFFFFFFFFE3A4 dw RUN |
FFFFFFFFFFFFE1A8 FFFFFFFFFFFFE830 dw SAVE |
FFFFFFFFFFFFE1B0 TAB2_1: |
FFFFFFFFFFFFE1B0 FFFFFFFFFFFFE610 dw NEXT ; Direct / statement |
FFFFFFFFFFFFE1B8 FFFFFFFFFFFFE76C dw LET |
FFFFFFFFFFFFE1C0 FFFFFFFFFFFFE680 dw IF |
FFFFFFFFFFFFE1C8 FFFFFFFFFFFFE3EC dw GOTO |
FFFFFFFFFFFFE1D0 FFFFFFFFFFFFE520 dw GOSUB |
FFFFFFFFFFFFE1D8 FFFFFFFFFFFFE55C dw RETURN |
FFFFFFFFFFFFE1E0 FFFFFFFFFFFFE688 dw IF2 ; REM |
FFFFFFFFFFFFE1E8 FFFFFFFFFFFFE594 dw FOR |
FFFFFFFFFFFFE1F0 FFFFFFFFFFFFE6B0 dw INPUT |
FFFFFFFFFFFFE1F8 FFFFFFFFFFFFE488 dw PRINT |
FFFFFFFFFFFFE200 FFFFFFFFFFFFE944 dw POKEC |
FFFFFFFFFFFFE208 FFFFFFFFFFFFE970 dw POKEH |
FFFFFFFFFFFFE210 FFFFFFFFFFFFE99C dw POKEW |
FFFFFFFFFFFFE218 FFFFFFFFFFFFE910 dw POKE |
FFFFFFFFFFFFE220 FFFFFFFFFFFFE39C dw STOP |
FFFFFFFFFFFFE228 FFFFFFFFFFFFDF64 dw GOBYE |
FFFFFFFFFFFFE230 FFFFFFFFFFFFE9C8 dw SYSX |
FFFFFFFFFFFFE238 FFFFFFFFFFFFF690 dw _cls |
FFFFFFFFFFFFE240 FFFFFFFFFFFFE40C dw _clr |
FFFFFFFFFFFFE248 FFFFFFFFFFFFF6A4 dw _rdcf |
FFFFFFFFFFFFE250 FFFFFFFFFFFFE764 dw DEFLT |
FFFFFFFFFFFFE258 TAB4_1: |
FFFFFFFFFFFFE258 FFFFFFFFFFFFEE44 dw PEEKC |
FFFFFFFFFFFFE260 FFFFFFFFFFFFEE58 dw PEEKH |
FFFFFFFFFFFFE268 FFFFFFFFFFFFEE6C dw PEEKW |
FFFFFFFFFFFFE270 FFFFFFFFFFFFEE34 dw PEEK ;Functions |
FFFFFFFFFFFFE278 FFFFFFFFFFFFEE9C dw RND |
FFFFFFFFFFFFE280 FFFFFFFFFFFFEF34 dw ABS |
FFFFFFFFFFFFE288 FFFFFFFFFFFFEF54 dw SIZEX |
FFFFFFFFFFFFE290 FFFFFFFFFFFFEE80 dw USRX |
FFFFFFFFFFFFE298 FFFFFFFFFFFFEC58 dw XP40 |
FFFFFFFFFFFFE2A0 TAB5_1 |
FFFFFFFFFFFFE2A0 FFFFFFFFFFFFE5AC dw FR1 ;"TO" in "FOR" |
FFFFFFFFFFFFE2A8 FFFFFFFFFFFFF024 dw QWHAT |
FFFFFFFFFFFFE2B0 TAB6_1 |
FFFFFFFFFFFFE2B0 FFFFFFFFFFFFE5C0 dw FR2 ;"STEP" in "FOR" |
FFFFFFFFFFFFE2B8 FFFFFFFFFFFFE5C8 dw FR3 |
FFFFFFFFFFFFE2C0 TAB8_1 |
FFFFFFFFFFFFE2C0 FFFFFFFFFFFFEAD8 dw XP11 ;>= Relational operators |
FFFFFFFFFFFFE2C8 FFFFFFFFFFFFEAE8 dw XP12 ;<> |
FFFFFFFFFFFFE2D0 FFFFFFFFFFFFEAF8 dw XP13 ;> |
FFFFFFFFFFFFE2D8 FFFFFFFFFFFFEB18 dw XP15 ;= |
FFFFFFFFFFFFE2E0 FFFFFFFFFFFFEB08 dw XP14 ;<= |
FFFFFFFFFFFFE2E8 FFFFFFFFFFFFEB28 dw XP16 ;< |
FFFFFFFFFFFFE2F0 FFFFFFFFFFFFEB50 dw XP17 |
FFFFFFFFFFFFE2F8 TAB9_1 |
FFFFFFFFFFFFE2F8 FFFFFFFFFFFFEA44 dw XP_AND |
FFFFFFFFFFFFE300 FFFFFFFFFFFFEA54 dw XP_ANDX |
FFFFFFFFFFFFE308 TAB10_1 |
FFFFFFFFFFFFE308 FFFFFFFFFFFFEA0C dw XP_OR |
FFFFFFFFFFFFE310 FFFFFFFFFFFFEA1C dw XP_ORX |
|
FFFFFFFFFFFFD210 .align 16 |
FFFFFFFFFFFFE318 .align 4 |
|
;* |
; r3 = match flag (trashed) |
3123,42 → 4702,42
; r9 = text table |
; r10 = exec table |
; r11 = trashed |
FFFFFFFFFFFFD210 DIRECT: |
FFFFFFFFFFFFD210 9A04CFE0 lea r9,TAB1 |
FFFFFFFFFFFFD214 9A055080 lea r10,TAB1_1 |
FFFFFFFFFFFFD218 EXEC: |
FFFFFFFFFFFFD218 03F58009 mov r11,lr ; save link reg |
FFFFFFFFFFFFD21C 31FFF914 call IGNBLK ; ignore leading blanks |
FFFFFFFFFFFFD220 02BF8009 mov lr,r11 ; restore link reg |
FFFFFFFFFFFFD224 02858009 mov r11,r8 ; save the pointer |
FFFFFFFFFFFFD228 E0C00000 setlo r3,#0 ; clear match flag |
FFFFFFFFFFFFD22C EXLP: |
FFFFFFFFFFFFD22C 4A808000 lbu r1,[r8] ; get the program character |
FFFFFFFFFFFFD230 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFD234 4A910000 lbu r2,[r9] ; get the table character |
FFFFFFFFFFFFD238 BE200069 bne r2,r0,EXNGO ; If end of table, |
FFFFFFFFFFFFD23C 02B40009 mov r8,r11 ; restore the text pointer and... |
FFFFFFFFFFFFD240 BE0001EA bra EXGO ; execute the default. |
FFFFFFFFFFFFD244 EXNGO: |
FFFFFFFFFFFFD244 BE1181C8 beq r1,r3,EXGO ; Else check for period... if so, execute |
FFFFFFFFFFFFD248 1421007F andi r2,r2,#0x7f ; ignore the table's high bit |
FFFFFFFFFFFFD24C BE208108 beq r2,r1,EXMAT; is there a match? |
FFFFFFFFFFFFD250 0AA50008 addui r10,r10,#8 ;if not, try the next entry |
FFFFFFFFFFFFD254 02B40009 mov r8,r11 ; reset the program pointer |
FFFFFFFFFFFFD258 E0C00000 setlo r3,#0 ; sorry, no match |
FFFFFFFFFFFFD25C EX1: |
FFFFFFFFFFFFD25C 0A948001 addui r9,r9,#1 |
FFFFFFFFFFFFD260 4090FFFF lb r1,-1[r9] ; get to the end of the entry |
FFFFFFFFFFFFD264 BE107FC3 bgt r1,r0,EX1 |
FFFFFFFFFFFFD268 BE007E2A bra EXLP ; back for more matching |
FFFFFFFFFFFFD26C EXMAT: |
FFFFFFFFFFFFD26C E0C0002E setlo r3,#'.' ; we've got a match so far |
FFFFFFFFFFFFD270 0A948001 addui r9,r9,#1 |
FFFFFFFFFFFFD274 4090FFFF lb r1,-1[r9] ; end of table entry? |
FFFFFFFFFFFFD278 BE107DA3 bgt r1,r0,EXLP ; if not, go back for more |
FFFFFFFFFFFFD27C EXGO: |
FFFFFFFFFFFFD27C 46A58000 lw r11,[r10] ; execute the appropriate routine |
FFFFFFFFFFFFD280 34B00000 jal r0,[r11] |
FFFFFFFFFFFFE318 DIRECT: |
FFFFFFFFFFFFE318 9A04E0EC lea r9,TAB1 |
FFFFFFFFFFFFE31C 9A056188 lea r10,TAB1_1 |
FFFFFFFFFFFFE320 EXEC: |
FFFFFFFFFFFFE320 03F58009 mov r11,lr ; save link reg |
FFFFFFFFFFFFE324 31FFFD55 call IGNBLK ; ignore leading blanks |
FFFFFFFFFFFFE328 02BF8009 mov lr,r11 ; restore link reg |
FFFFFFFFFFFFE32C 02858009 mov r11,r8 ; save the pointer |
FFFFFFFFFFFFE330 E0C00000 setlo r3,#0 ; clear match flag |
FFFFFFFFFFFFE334 EXLP: |
FFFFFFFFFFFFE334 4A808000 lbu r1,[r8] ; get the program character |
FFFFFFFFFFFFE338 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFE33C 4A910000 lbu r2,[r9] ; get the table character |
FFFFFFFFFFFFE340 BE200069 bne r2,r0,EXNGO ; If end of table, |
FFFFFFFFFFFFE344 02B40009 mov r8,r11 ; restore the text pointer and... |
FFFFFFFFFFFFE348 BE0001EA bra EXGO ; execute the default. |
FFFFFFFFFFFFE34C EXNGO: |
FFFFFFFFFFFFE34C BE1181C8 beq r1,r3,EXGO ; Else check for period... if so, execute |
FFFFFFFFFFFFE350 1421007F andi r2,r2,#0x7f ; ignore the table's high bit |
FFFFFFFFFFFFE354 BE208108 beq r2,r1,EXMAT; is there a match? |
FFFFFFFFFFFFE358 0AA50008 addui r10,r10,#8 ;if not, try the next entry |
FFFFFFFFFFFFE35C 02B40009 mov r8,r11 ; reset the program pointer |
FFFFFFFFFFFFE360 E0C00000 setlo r3,#0 ; sorry, no match |
FFFFFFFFFFFFE364 EX1: |
FFFFFFFFFFFFE364 0A948001 addui r9,r9,#1 |
FFFFFFFFFFFFE368 4090FFFF lb r1,-1[r9] ; get to the end of the entry |
FFFFFFFFFFFFE36C BE107FC3 bgt r1,r0,EX1 |
FFFFFFFFFFFFE370 BE007E2A bra EXLP ; back for more matching |
FFFFFFFFFFFFE374 EXMAT: |
FFFFFFFFFFFFE374 E0C0002E setlo r3,#'.' ; we've got a match so far |
FFFFFFFFFFFFE378 0A948001 addui r9,r9,#1 |
FFFFFFFFFFFFE37C 4090FFFF lb r1,-1[r9] ; end of table entry? |
FFFFFFFFFFFFE380 BE107DA3 bgt r1,r0,EXLP ; if not, go back for more |
FFFFFFFFFFFFE384 EXGO: |
FFFFFFFFFFFFE384 46A58000 lw r11,[r10] ; execute the appropriate routine |
FFFFFFFFFFFFE388 34B00000 jal r0,[r11] |
|
; lb r1,[r8] ; get token from text space |
; bpl |
3205,70 → 4784,70
; 'GOTO expr<CR>' evaluates the expression, finds the target |
; line, and jumps to 'RUNTSL' to do it. |
; |
FFFFFFFFFFFFD284 NEW: |
FFFFFFFFFFFFD284 31FFF7B9 call ENDCHK |
FFFFFFFFFFFFD288 4600CE60 lw r1,TXTBGN |
FFFFFFFFFFFFD28C 660090D0 sw r1,TXTUNF ; set the end pointer |
FFFFFFFFFFFFD290 31FFF4C3 call clearVars |
FFFFFFFFFFFFE38C NEW: |
FFFFFFFFFFFFE38C 31FFFBFB call ENDCHK |
FFFFFFFFFFFFE390 4600DF68 lw r1,TXTBGN |
FFFFFFFFFFFFE394 660090D0 sw r1,TXTUNF ; set the end pointer |
FFFFFFFFFFFFE398 31FFF905 call clearVars |
|
FFFFFFFFFFFFD294 STOP: |
FFFFFFFFFFFFD294 31FFF7B9 call ENDCHK |
FFFFFFFFFFFFD298 BE00630A bra WSTART ; WSTART will reset the stack |
FFFFFFFFFFFFE39C STOP: |
FFFFFFFFFFFFE39C 31FFFBFB call ENDCHK |
FFFFFFFFFFFFE3A0 BE00632A bra WSTART ; WSTART will reset the stack |
|
FFFFFFFFFFFFD29C RUN: |
FFFFFFFFFFFFD29C 31FFF7B9 call ENDCHK |
FFFFFFFFFFFFD2A0 46044E60 lw r8,TXTBGN ; set pointer to beginning |
FFFFFFFFFFFFD2A4 66041090 sw r8,CURRNT |
FFFFFFFFFFFFD2A8 31FFF4C3 call clearVars |
FFFFFFFFFFFFE3A4 RUN: |
FFFFFFFFFFFFE3A4 31FFFBFB call ENDCHK |
FFFFFFFFFFFFE3A8 46045F68 lw r8,TXTBGN ; set pointer to beginning |
FFFFFFFFFFFFE3AC 66041090 sw r8,CURRNT |
FFFFFFFFFFFFE3B0 31FFF905 call clearVars |
|
FFFFFFFFFFFFD2AC RUNNXL: ; RUN <next line> |
FFFFFFFFFFFFD2AC 46009090 lw r1,CURRNT ; executing a program? |
FFFFFFFFFFFFD2B0 BE106248 beq r1,r0,WSTART ; if not, we've finished a direct stat. |
FFFFFFFFFFFFD2B4 E0400000 setlo r1,#0 ; else find the next line number |
FFFFFFFFFFFFD2B8 02848009 mov r9,r8 |
FFFFFFFFFFFFD2BC 31FFF810 call FNDLNP ; search for the next line |
FFFFFFFFFFFFD2C0 BE100069 bne r1,r0,RUNTSL |
FFFFFFFFFFFFD2C4 BE900049 bne r9,r0,RUNTSL |
FFFFFFFFFFFFD2C8 BE00618A bra WSTART ; if we've fallen off the end, stop |
FFFFFFFFFFFFE3B4 RUNNXL: ; RUN <next line> |
FFFFFFFFFFFFE3B4 46009090 lw r1,CURRNT ; executing a program? |
FFFFFFFFFFFFE3B8 BE106268 beq r1,r0,WSTART ; if not, we've finished a direct stat. |
FFFFFFFFFFFFE3BC E0400000 setlo r1,#0 ; else find the next line number |
FFFFFFFFFFFFE3C0 02848009 mov r9,r8 |
FFFFFFFFFFFFE3C4 31FFFC52 call FNDLNP ; search for the next line |
FFFFFFFFFFFFE3C8 BE100069 bne r1,r0,RUNTSL |
FFFFFFFFFFFFE3CC BE900049 bne r9,r0,RUNTSL |
FFFFFFFFFFFFE3D0 BE0061AA bra WSTART ; if we've fallen off the end, stop |
|
FFFFFFFFFFFFD2CC RUNTSL: ; RUN <this line> |
FFFFFFFFFFFFD2CC 66049090 sw r9,CURRNT ; set CURRNT to point to the line no. |
FFFFFFFFFFFFD2D0 9A940002 lea r8,2[r9] ; set the text pointer to |
FFFFFFFFFFFFE3D4 RUNTSL: ; RUN <this line> |
FFFFFFFFFFFFE3D4 66049090 sw r9,CURRNT ; set CURRNT to point to the line no. |
FFFFFFFFFFFFE3D8 9A940002 lea r8,2[r9] ; set the text pointer to |
|
FFFFFFFFFFFFD2D4 RUNSML: ; RUN <same line> |
FFFFFFFFFFFFD2D4 31FFF936 call CHKIO ; see if a control-C was pressed |
FFFFFFFFFFFFD2D8 9A04CFF2 lea r9,TAB2 ; find command in TAB2 |
FFFFFFFFFFFFD2DC 9A0550A8 lea r10,TAB2_1 |
FFFFFFFFFFFFD2E0 BE0079CA bra EXEC ; and execute it |
FFFFFFFFFFFFE3DC RUNSML: ; RUN <same line> |
FFFFFFFFFFFFE3DC 31FFFD77 call CHKIO ; see if a control-C was pressed |
FFFFFFFFFFFFE3E0 9A04E0FE lea r9,TAB2 ; find command in TAB2 |
FFFFFFFFFFFFE3E4 9A0561B0 lea r10,TAB2_1 |
FFFFFFFFFFFFE3E8 BE0079CA bra EXEC ; and execute it |
|
FFFFFFFFFFFFD2E4 GOTO: |
FFFFFFFFFFFFD2E4 31FFF63A call OREXPR ;evaluate the following expression |
FFFFFFFFFFFFD2E8 02128009 mov r5,r1 |
FFFFFFFFFFFFD2EC 31FFF7B9 call ENDCHK ;must find end of line |
FFFFFFFFFFFFD2F0 02508009 mov r1,r5 |
FFFFFFFFFFFFD2F4 31FFF80C call FNDLN ; find the target line |
FFFFFFFFFFFFD2F8 BE107EA9 bne r1,r0,RUNTSL ; go do it |
FFFFFFFFFFFFD2FC 9A00E73B lea r1,msgBadGotoGosub |
FFFFFFFFFFFFD300 BE00610A bra ERROR ; no such line no. |
FFFFFFFFFFFFE3EC GOTO: |
FFFFFFFFFFFFE3EC 31FFFA7C call OREXPR ;evaluate the following expression |
FFFFFFFFFFFFE3F0 02128009 mov r5,r1 |
FFFFFFFFFFFFE3F4 31FFFBFB call ENDCHK ;must find end of line |
FFFFFFFFFFFFE3F8 02508009 mov r1,r5 |
FFFFFFFFFFFFE3FC 31FFFC4E call FNDLN ; find the target line |
FFFFFFFFFFFFE400 BE107EA9 bne r1,r0,RUNTSL ; go do it |
FFFFFFFFFFFFE404 9A00F833 lea r1,msgBadGotoGosub |
FFFFFFFFFFFFE408 BE00610A bra ERROR ; no such line no. |
|
FFFFFFFFFFFFD304 _clr: |
FFFFFFFFFFFFD304 31FFF4C3 call clearVars |
FFFFFFFFFFFFD308 BE00084A bra FINISH |
FFFFFFFFFFFFE40C _clr: |
FFFFFFFFFFFFE40C 31FFF905 call clearVars |
FFFFFFFFFFFFE410 BE00084A bra FINISH |
|
; Clear the variable area of memory |
FFFFFFFFFFFFD30C clearVars: |
FFFFFFFFFFFFD30C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD310 67E30000 sw r6,[sp] |
FFFFFFFFFFFFD314 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFD318 E1800800 setlo r6,#2048 ; number of words to clear |
FFFFFFFFFFFFD31C 460090D8 lw r1,VARBGN |
FFFFFFFFFFFFD320 cv1: |
FFFFFFFFFFFFD320 66100000 sw r0,[r1] |
FFFFFFFFFFFFD324 08108008 add r1,r1,#8 |
FFFFFFFFFFFFD328 BE037FCF loop r6,cv1 |
FFFFFFFFFFFFD32C 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFD330 47E30000 lw r6,[sp] |
FFFFFFFFFFFFD334 37EF8010 ret #16 |
FFFFFFFFFFFFE414 clearVars: |
FFFFFFFFFFFFE414 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFE418 67E30000 sw r6,[sp] |
FFFFFFFFFFFFE41C 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFE420 E1800800 setlo r6,#2048 ; number of words to clear |
FFFFFFFFFFFFE424 460090D8 lw r1,VARBGN |
FFFFFFFFFFFFE428 cv1: |
FFFFFFFFFFFFE428 66100000 sw r0,[r1] |
FFFFFFFFFFFFE42C 08108008 add r1,r1,#8 |
FFFFFFFFFFFFE430 BE037FCF loop r6,cv1 |
FFFFFFFFFFFFE434 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFE438 47E30000 lw r6,[sp] |
FFFFFFFFFFFFE43C 37EF8010 ret #16 |
|
|
;****************************************************************** |
3280,29 → 4859,29
; Control-S pauses the listing, control-C stops it. |
;****************************************************************** |
; |
FFFFFFFFFFFFD338 LISTX: |
FFFFFFFFFFFFD338 31FFF8FF call TSTNUM ; see if there's a line no. |
FFFFFFFFFFFFD33C 02128009 mov r5,r1 |
FFFFFFFFFFFFD340 31FFF7B9 call ENDCHK ; if not, we get a zero |
FFFFFFFFFFFFD344 02508009 mov r1,r5 |
FFFFFFFFFFFFD348 31FFF80C call FNDLN ; find this or next line |
FFFFFFFFFFFFD34C LS1: |
FFFFFFFFFFFFD34C BE100049 bne r1,r0,LS4 |
FFFFFFFFFFFFD350 BE905D48 beq r9,r0,WSTART ; warm start if we passed the end |
FFFFFFFFFFFFD354 LS4: |
FFFFFFFFFFFFD354 02908009 mov r1,r9 |
FFFFFFFFFFFFD358 31FFF8DF call PRTLN ; print the line |
FFFFFFFFFFFFD35C 02148009 mov r9,r1 ; set pointer for next |
FFFFFFFFFFFFD360 31FFF936 call CHKIO ; check for listing halt request |
FFFFFFFFFFFFD364 BE100088 beq r1,r0,LS3 |
FFFFFFFFFFFFD368 B2100313 bnei r1,#CTRLS,LS3 ; pause the listing? |
FFFFFFFFFFFFD36C LS2: |
FFFFFFFFFFFFD36C 31FFF936 call CHKIO ; if so, wait for another keypress |
FFFFFFFFFFFFD370 BE107FE8 beq r1,r0,LS2 |
FFFFFFFFFFFFD374 LS3: |
FFFFFFFFFFFFD374 E0400000 setlo r1,#0 |
FFFFFFFFFFFFD378 31FFF810 call FNDLNP ; find the next line |
FFFFFFFFFFFFD37C BE007E8A bra LS1 |
FFFFFFFFFFFFE440 LISTX: |
FFFFFFFFFFFFE440 31FFFD3E call TSTNUM ; see if there's a line no. |
FFFFFFFFFFFFE444 02128009 mov r5,r1 |
FFFFFFFFFFFFE448 31FFFBFB call ENDCHK ; if not, we get a zero |
FFFFFFFFFFFFE44C 02508009 mov r1,r5 |
FFFFFFFFFFFFE450 31FFFC4E call FNDLN ; find this or next line |
FFFFFFFFFFFFE454 LS1: |
FFFFFFFFFFFFE454 BE100049 bne r1,r0,LS4 |
FFFFFFFFFFFFE458 BE905D68 beq r9,r0,WSTART ; warm start if we passed the end |
FFFFFFFFFFFFE45C LS4: |
FFFFFFFFFFFFE45C 02908009 mov r1,r9 |
FFFFFFFFFFFFE460 31FFFD1E call PRTLN ; print the line |
FFFFFFFFFFFFE464 02148009 mov r9,r1 ; set pointer for next |
FFFFFFFFFFFFE468 31FFFD77 call CHKIO ; check for listing halt request |
FFFFFFFFFFFFE46C BE100088 beq r1,r0,LS3 |
FFFFFFFFFFFFE470 B2100313 bnei r1,#CTRLS,LS3 ; pause the listing? |
FFFFFFFFFFFFE474 LS2: |
FFFFFFFFFFFFE474 31FFFD77 call CHKIO ; if so, wait for another keypress |
FFFFFFFFFFFFE478 BE107FE8 beq r1,r0,LS2 |
FFFFFFFFFFFFE47C LS3: |
FFFFFFFFFFFFE47C E0400000 setlo r1,#0 |
FFFFFFFFFFFFE480 31FFFC52 call FNDLNP ; find the next line |
FFFFFFFFFFFFE484 BE007E8A bra LS1 |
|
|
;****************************************************************** |
3325,55 → 4904,55
; however, no <CR LF> is generated. |
;****************************************************************** |
; |
FFFFFFFFFFFFD380 PRINT: |
FFFFFFFFFFFFD380 1602800B lw r5,#11 ; D4 = number of print spaces |
FFFFFFFFFFFFD384 E0C0003A setlo r3,#':' |
FFFFFFFFFFFFD388 9A025398 lea r4,PR2 |
FFFFFFFFFFFFD38C 31FFF8F1 call TSTC ; if null list and ":" |
FFFFFFFFFFFFD390 31FFEFFA call CRLF ; give CR-LF and continue |
FFFFFFFFFFFFD394 BE007A0A bra RUNSML ; execution on the same line |
FFFFFFFFFFFFD398 PR2: |
FFFFFFFFFFFFD398 E0C0000D setlo r3,#CR |
FFFFFFFFFFFFD39C 9A0253AC lea r4,PR0 |
FFFFFFFFFFFFD3A0 31FFF8F1 call TSTC ;if null list and <CR> |
FFFFFFFFFFFFD3A4 31FFEFFA call CRLF ;also give CR-LF and |
FFFFFFFFFFFFD3A8 BE00782A bra RUNNXL ;execute the next line |
FFFFFFFFFFFFD3AC PR0: |
FFFFFFFFFFFFD3AC E0C00023 setlo r3,#'#' |
FFFFFFFFFFFFD3B0 9A0253C4 lea r4,PR1 |
FFFFFFFFFFFFD3B4 31FFF8F1 call TSTC ;else is it a format? |
FFFFFFFFFFFFD3B8 31FFF63A call OREXPR ; yes, evaluate expression |
FFFFFFFFFFFFD3BC 04101409 lw r5,r1 ; and save it as print width |
FFFFFFFFFFFFD3C0 BE00012A bra PR3 ; look for more to print |
FFFFFFFFFFFFD3C4 PR1: |
FFFFFFFFFFFFD3C4 E0C00024 setlo r3,#'$' |
FFFFFFFFFFFFD3C8 9A0253DC lea r4,PR4 |
FFFFFFFFFFFFD3CC 31FFF8F1 call TSTC ; is character expression? (MRL) |
FFFFFFFFFFFFD3D0 31FFF63A call OREXPR ; yep. Evaluate expression (MRL) |
FFFFFFFFFFFFD3D4 31FFF393 call GOOUT ; print low byte (MRL) |
FFFFFFFFFFFFD3D8 BE00006A bra PR3 ;look for more. (MRL) |
FFFFFFFFFFFFD3DC PR4: |
FFFFFFFFFFFFD3DC 31FFF867 call QTSTG ; is it a string? |
FFFFFFFFFFFFE488 PRINT: |
FFFFFFFFFFFFE488 1602800B lw r5,#11 ; D4 = number of print spaces |
FFFFFFFFFFFFE48C E0C0003A setlo r3,#':' |
FFFFFFFFFFFFE490 9A0264A0 lea r4,PR2 |
FFFFFFFFFFFFE494 31FFFD30 call TSTC ; if null list and ":" |
FFFFFFFFFFFFE498 31FFF135 call CRLF ; give CR-LF and continue |
FFFFFFFFFFFFE49C BE007A0A bra RUNSML ; execution on the same line |
FFFFFFFFFFFFE4A0 PR2: |
FFFFFFFFFFFFE4A0 E0C0000D setlo r3,#CR |
FFFFFFFFFFFFE4A4 9A0264B4 lea r4,PR0 |
FFFFFFFFFFFFE4A8 31FFFD30 call TSTC ;if null list and <CR> |
FFFFFFFFFFFFE4AC 31FFF135 call CRLF ;also give CR-LF and |
FFFFFFFFFFFFE4B0 BE00782A bra RUNNXL ;execute the next line |
FFFFFFFFFFFFE4B4 PR0: |
FFFFFFFFFFFFE4B4 E0C00023 setlo r3,#'#' |
FFFFFFFFFFFFE4B8 9A0264CC lea r4,PR1 |
FFFFFFFFFFFFE4BC 31FFFD30 call TSTC ;else is it a format? |
FFFFFFFFFFFFE4C0 31FFFA7C call OREXPR ; yes, evaluate expression |
FFFFFFFFFFFFE4C4 04101409 lw r5,r1 ; and save it as print width |
FFFFFFFFFFFFE4C8 BE00012A bra PR3 ; look for more to print |
FFFFFFFFFFFFE4CC PR1: |
FFFFFFFFFFFFE4CC E0C00024 setlo r3,#'$' |
FFFFFFFFFFFFE4D0 9A0264E4 lea r4,PR4 |
FFFFFFFFFFFFE4D4 31FFFD30 call TSTC ; is character expression? (MRL) |
FFFFFFFFFFFFE4D8 31FFFA7C call OREXPR ; yep. Evaluate expression (MRL) |
FFFFFFFFFFFFE4DC 31FFF7D5 call GOOUT ; print low byte (MRL) |
FFFFFFFFFFFFE4E0 BE00006A bra PR3 ;look for more. (MRL) |
FFFFFFFFFFFFE4E4 PR4: |
FFFFFFFFFFFFE4E4 31FFFCA9 call QTSTG ; is it a string? |
; the following branch must occupy only two bytes! |
FFFFFFFFFFFFD3E0 BE00010A bra PR8 ; if not, must be an expression |
FFFFFFFFFFFFD3E4 PR3: |
FFFFFFFFFFFFD3E4 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD3E8 9A0253F8 lea r4,PR6 |
FFFFFFFFFFFFD3EC 31FFF8F1 call TSTC ; if ",", go find next |
FFFFFFFFFFFFD3F0 31FFF7AA call FIN ;in the list. |
FFFFFFFFFFFFD3F4 BE007DCA bra PR0 |
FFFFFFFFFFFFD3F8 PR6: |
FFFFFFFFFFFFD3F8 31FFEFFA call CRLF ;list ends here |
FFFFFFFFFFFFD3FC BE0000AA bra FINISH |
FFFFFFFFFFFFD400 PR8: |
FFFFFFFFFFFFD400 31FFF63A call OREXPR ; evaluate the expression |
FFFFFFFFFFFFD404 04500809 lw r2,r5 ; set the width |
FFFFFFFFFFFFD408 31FFF88D call PRTNUM ; print its value |
FFFFFFFFFFFFD40C BE007ECA bra PR3 ; more to print? |
FFFFFFFFFFFFE4E8 BE00010A bra PR8 ; if not, must be an expression |
FFFFFFFFFFFFE4EC PR3: |
FFFFFFFFFFFFE4EC E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE4F0 9A026500 lea r4,PR6 |
FFFFFFFFFFFFE4F4 31FFFD30 call TSTC ; if ",", go find next |
FFFFFFFFFFFFE4F8 31FFFBEC call FIN ;in the list. |
FFFFFFFFFFFFE4FC BE007DCA bra PR0 |
FFFFFFFFFFFFE500 PR6: |
FFFFFFFFFFFFE500 31FFF135 call CRLF ;list ends here |
FFFFFFFFFFFFE504 BE0000AA bra FINISH |
FFFFFFFFFFFFE508 PR8: |
FFFFFFFFFFFFE508 31FFFA7C call OREXPR ; evaluate the expression |
FFFFFFFFFFFFE50C 04500809 lw r2,r5 ; set the width |
FFFFFFFFFFFFE510 31FFFCCC call PRTNUM ; print its value |
FFFFFFFFFFFFE514 BE007ECA bra PR3 ; more to print? |
|
FFFFFFFFFFFFD410 FINISH: |
FFFFFFFFFFFFD410 31FFF7AA call FIN ; Check end of command |
FFFFFFFFFFFFD414 33FFF7C7 jmp QWHAT ; print "What?" if wrong |
FFFFFFFFFFFFE518 FINISH: |
FFFFFFFFFFFFE518 31FFFBEC call FIN ; Check end of command |
FFFFFFFFFFFFE51C 33FFFC09 jmp QWHAT ; print "What?" if wrong |
|
|
;******************************************************************* |
3391,23 → 4970,23
; save it as a flag for no further 'RETURN's. |
;****************************************************************** |
; |
FFFFFFFFFFFFD418 GOSUB: |
FFFFFFFFFFFFD418 31FFF83E call PUSHA ; save the current 'FOR' parameters |
FFFFFFFFFFFFD41C 31FFF63A call OREXPR ; get line number |
FFFFFFFFFFFFD420 31FFF80C call FNDLN ; find the target line |
FFFFFFFFFFFFD424 BE100069 bne r1,r0,gosub1 |
FFFFFFFFFFFFD428 9A00E73B lea r1,msgBadGotoGosub |
FFFFFFFFFFFFD42C BE0057AA bra ERROR ; if not there, say "How?" |
FFFFFFFFFFFFD430 gosub1: |
FFFFFFFFFFFFD430 0DEF0018 sub sp,sp,#24 |
FFFFFFFFFFFFD434 67E40000 sw r8,[sp] ; save text pointer |
FFFFFFFFFFFFD438 46009090 lw r1,CURRNT |
FFFFFFFFFFFFD43C 67E08008 sw r1,8[sp] ; found it, save old 'CURRNT'... |
FFFFFFFFFFFFD440 46009098 lw r1,STKGOS |
FFFFFFFFFFFFD444 67E08010 sw r1,16[sp] ; and 'STKGOS' |
FFFFFFFFFFFFD448 660010A8 sw r0,LOPVAR ; load new values |
FFFFFFFFFFFFD44C 660F1098 sw sp,STKGOS |
FFFFFFFFFFFFD450 BE0073EA bra RUNTSL |
FFFFFFFFFFFFE520 GOSUB: |
FFFFFFFFFFFFE520 31FFFC80 call PUSHA ; save the current 'FOR' parameters |
FFFFFFFFFFFFE524 31FFFA7C call OREXPR ; get line number |
FFFFFFFFFFFFE528 31FFFC4E call FNDLN ; find the target line |
FFFFFFFFFFFFE52C BE100069 bne r1,r0,gosub1 |
FFFFFFFFFFFFE530 9A00F833 lea r1,msgBadGotoGosub |
FFFFFFFFFFFFE534 BE0057AA bra ERROR ; if not there, say "How?" |
FFFFFFFFFFFFE538 gosub1: |
FFFFFFFFFFFFE538 0DEF0018 sub sp,sp,#24 |
FFFFFFFFFFFFE53C 67E40000 sw r8,[sp] ; save text pointer |
FFFFFFFFFFFFE540 46009090 lw r1,CURRNT |
FFFFFFFFFFFFE544 67E08008 sw r1,8[sp] ; found it, save old 'CURRNT'... |
FFFFFFFFFFFFE548 46009098 lw r1,STKGOS |
FFFFFFFFFFFFE54C 67E08010 sw r1,16[sp] ; and 'STKGOS' |
FFFFFFFFFFFFE550 660010A8 sw r0,LOPVAR ; load new values |
FFFFFFFFFFFFE554 660F1098 sw sp,STKGOS |
FFFFFFFFFFFFE558 BE0073EA bra RUNTSL |
|
|
;****************************************************************** |
3417,22 → 4996,22
; a 'GOSUB' and is thus an error. |
;****************************************************************** |
; |
FFFFFFFFFFFFD454 RETURN: |
FFFFFFFFFFFFD454 31FFF7B9 call ENDCHK ; there should be just a <CR> |
FFFFFFFFFFFFD458 46009098 lw r1,STKGOS ; get old stack pointer |
FFFFFFFFFFFFD45C BE100069 bne r1,r0,return1 |
FFFFFFFFFFFFD460 9A00E758 lea r1,msgRetWoGosub |
FFFFFFFFFFFFD464 BE0055EA bra ERROR ; if zero, it doesn't exist |
FFFFFFFFFFFFD468 return1: |
FFFFFFFFFFFFD468 021F0009 mov sp,r1 ; else restore it |
FFFFFFFFFFFFD46C 47E08010 lw r1,16[sp] |
FFFFFFFFFFFFD470 66009098 sw r1,STKGOS ; and the old 'STKGOS' |
FFFFFFFFFFFFD474 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFD478 66009090 sw r1,CURRNT ; and the old 'CURRNT' |
FFFFFFFFFFFFD47C 47E40000 lw r8,[sp] ; and the old text pointer |
FFFFFFFFFFFFD480 09EF0018 add sp,sp,#24 |
FFFFFFFFFFFFD484 31FFF831 call POPA ;and the old 'FOR' parameters |
FFFFFFFFFFFFD488 BE007C4A bra FINISH ;and we are back home |
FFFFFFFFFFFFE55C RETURN: |
FFFFFFFFFFFFE55C 31FFFBFB call ENDCHK ; there should be just a <CR> |
FFFFFFFFFFFFE560 46009098 lw r1,STKGOS ; get old stack pointer |
FFFFFFFFFFFFE564 BE100069 bne r1,r0,return1 |
FFFFFFFFFFFFE568 9A00F850 lea r1,msgRetWoGosub |
FFFFFFFFFFFFE56C BE0055EA bra ERROR ; if zero, it doesn't exist |
FFFFFFFFFFFFE570 return1: |
FFFFFFFFFFFFE570 021F0009 mov sp,r1 ; else restore it |
FFFFFFFFFFFFE574 47E08010 lw r1,16[sp] |
FFFFFFFFFFFFE578 66009098 sw r1,STKGOS ; and the old 'STKGOS' |
FFFFFFFFFFFFE57C 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFE580 66009090 sw r1,CURRNT ; and the old 'CURRNT' |
FFFFFFFFFFFFE584 47E40000 lw r8,[sp] ; and the old text pointer |
FFFFFFFFFFFFE588 09EF0018 add sp,sp,#24 |
FFFFFFFFFFFFE58C 31FFFC73 call POPA ;and the old 'FOR' parameters |
FFFFFFFFFFFFE590 BE007C4A bra FINISH ;and we are back home |
|
;****************************************************************** |
; *** FOR *** & NEXT *** |
3453,47 → 5032,47
; 'FOR' loop is deactivated. (i.e. purged from the stack) |
;****************************************************************** |
; |
FFFFFFFFFFFFD48C FOR: |
FFFFFFFFFFFFD48C 31FFF83E call PUSHA ; save the old 'FOR' save area |
FFFFFFFFFFFFD490 31FFF798 call SETVAL ; set the control variable |
FFFFFFFFFFFFD494 660090A8 sw r1,LOPVAR ; save its address |
FFFFFFFFFFFFD498 9A04D063 lea r9,TAB5 |
FFFFFFFFFFFFD49C 9A055198 lea r10,TAB5_1; use 'EXEC' to test for 'TO' |
FFFFFFFFFFFFD4A0 33FFF486 jmp EXEC |
FFFFFFFFFFFFD4A4 FR1: |
FFFFFFFFFFFFD4A4 31FFF63A call OREXPR ; evaluate the limit |
FFFFFFFFFFFFD4A8 660090B8 sw r1,LOPLMT ; save that |
FFFFFFFFFFFFD4AC 9A04D066 lea r9,TAB6 |
FFFFFFFFFFFFD4B0 9A0551A8 lea r10,TAB6_1 ; use 'EXEC' to test for the word 'STEP |
FFFFFFFFFFFFD4B4 33FFF486 jmp EXEC |
FFFFFFFFFFFFD4B8 FR2: |
FFFFFFFFFFFFD4B8 31FFF63A call OREXPR ; found it, get the step value |
FFFFFFFFFFFFD4BC BE00004A bra FR4 |
FFFFFFFFFFFFD4C0 FR3: |
FFFFFFFFFFFFD4C0 E0400001 setlo r1,#1 ; not found, step defaults to 1 |
FFFFFFFFFFFFD4C4 FR4: |
FFFFFFFFFFFFD4C4 660090B0 sw r1,LOPINC ; save that too |
FFFFFFFFFFFFD4C8 FR5: |
FFFFFFFFFFFFD4C8 46011090 lw r2,CURRNT |
FFFFFFFFFFFFD4CC 660110C0 sw r2,LOPLN ; save address of current line number |
FFFFFFFFFFFFD4D0 660410C8 sw r8,LOPPT ; and text pointer |
FFFFFFFFFFFFD4D4 05E00C09 lw r3,sp ; dig into the stack to find 'LOPVAR' |
FFFFFFFFFFFFD4D8 460310A8 lw r6,LOPVAR |
FFFFFFFFFFFFD4DC BE00004A bra FR7 |
FFFFFFFFFFFFD4E0 FR6: |
FFFFFFFFFFFFD4E0 0A318028 addui r3,r3,#40 ; look at next stack frame |
FFFFFFFFFFFFD4E4 FR7: |
FFFFFFFFFFFFD4E4 46310000 lw r2,[r3] ; is it zero? |
FFFFFFFFFFFFD4E8 BE2000E8 beq r2,r0,FR8 ; if so, we're done |
FFFFFFFFFFFFD4EC BE237FA9 bne r2,r6,FR6 ; same as current LOPVAR? nope, look some more |
FFFFFFFFFFFFE594 FOR: |
FFFFFFFFFFFFE594 31FFFC80 call PUSHA ; save the old 'FOR' save area |
FFFFFFFFFFFFE598 31FFFBDA call SETVAL ; set the control variable |
FFFFFFFFFFFFE59C 660090A8 sw r1,LOPVAR ; save its address |
FFFFFFFFFFFFE5A0 9A04E16F lea r9,TAB5 |
FFFFFFFFFFFFE5A4 9A0562A0 lea r10,TAB5_1; use 'EXEC' to test for 'TO' |
FFFFFFFFFFFFE5A8 33FFF8C8 jmp EXEC |
FFFFFFFFFFFFE5AC FR1: |
FFFFFFFFFFFFE5AC 31FFFA7C call OREXPR ; evaluate the limit |
FFFFFFFFFFFFE5B0 660090B8 sw r1,LOPLMT ; save that |
FFFFFFFFFFFFE5B4 9A04E172 lea r9,TAB6 |
FFFFFFFFFFFFE5B8 9A0562B0 lea r10,TAB6_1 ; use 'EXEC' to test for the word 'STEP |
FFFFFFFFFFFFE5BC 33FFF8C8 jmp EXEC |
FFFFFFFFFFFFE5C0 FR2: |
FFFFFFFFFFFFE5C0 31FFFA7C call OREXPR ; found it, get the step value |
FFFFFFFFFFFFE5C4 BE00004A bra FR4 |
FFFFFFFFFFFFE5C8 FR3: |
FFFFFFFFFFFFE5C8 E0400001 setlo r1,#1 ; not found, step defaults to 1 |
FFFFFFFFFFFFE5CC FR4: |
FFFFFFFFFFFFE5CC 660090B0 sw r1,LOPINC ; save that too |
FFFFFFFFFFFFE5D0 FR5: |
FFFFFFFFFFFFE5D0 46011090 lw r2,CURRNT |
FFFFFFFFFFFFE5D4 660110C0 sw r2,LOPLN ; save address of current line number |
FFFFFFFFFFFFE5D8 660410C8 sw r8,LOPPT ; and text pointer |
FFFFFFFFFFFFE5DC 05E00C09 lw r3,sp ; dig into the stack to find 'LOPVAR' |
FFFFFFFFFFFFE5E0 460310A8 lw r6,LOPVAR |
FFFFFFFFFFFFE5E4 BE00004A bra FR7 |
FFFFFFFFFFFFE5E8 FR6: |
FFFFFFFFFFFFE5E8 0A318028 addui r3,r3,#40 ; look at next stack frame |
FFFFFFFFFFFFE5EC FR7: |
FFFFFFFFFFFFE5EC 46310000 lw r2,[r3] ; is it zero? |
FFFFFFFFFFFFE5F0 BE2000E8 beq r2,r0,FR8 ; if so, we're done |
FFFFFFFFFFFFE5F4 BE237FA9 bne r2,r6,FR6 ; same as current LOPVAR? nope, look some more |
|
FFFFFFFFFFFFD4F0 04300409 lw r1,r3 ; Else remove 5 long words from... |
FFFFFFFFFFFFD4F4 0A310028 addui r2,r3,#40 ; inside the stack. |
FFFFFFFFFFFFD4F8 05E00C09 lw r3,sp |
FFFFFFFFFFFFD4FC 31FFF82F call MVDOWN |
FFFFFFFFFFFFD500 09EF0028 add sp,sp,#40 ; set the SP 5 long words up |
FFFFFFFFFFFFD504 FR8: |
FFFFFFFFFFFFD504 BE00786A bra FINISH ; and continue execution |
FFFFFFFFFFFFE5F8 04300409 lw r1,r3 ; Else remove 5 long words from... |
FFFFFFFFFFFFE5FC 0A310028 addui r2,r3,#40 ; inside the stack. |
FFFFFFFFFFFFE600 05E00C09 lw r3,sp |
FFFFFFFFFFFFE604 31FFFC71 call MVDOWN |
FFFFFFFFFFFFE608 09EF0028 add sp,sp,#40 ; set the SP 5 long words up |
FFFFFFFFFFFFE60C FR8: |
FFFFFFFFFFFFE60C BE00786A bra FINISH ; and continue execution |
|
|
;****************************************************************** |
3508,43 → 5087,43
; execution continues. |
;****************************************************************** |
; |
FFFFFFFFFFFFD508 NEXT: |
FFFFFFFFFFFFD508 E0400000 setlo r1,#0 ; don't allocate it |
FFFFFFFFFFFFD50C 31FFF6EC call TSTV ; get address of variable |
FFFFFFFFFFFFD510 BE100069 bne r1,r0,NX4 |
FFFFFFFFFFFFD514 9A00E717 lea r1,msgNextVar |
FFFFFFFFFFFFD518 BE00504A bra ERROR ; if no variable, say "What?" |
FFFFFFFFFFFFD51C NX4: |
FFFFFFFFFFFFD51C 02148009 mov r9,r1 ; save variable's address |
FFFFFFFFFFFFD520 NX0: |
FFFFFFFFFFFFD520 460090A8 lw r1,LOPVAR ; If 'LOPVAR' is zero, we never... |
FFFFFFFFFFFFD524 BE100069 bne r1,r0,NX5 ; had a FOR loop |
FFFFFFFFFFFFD528 9A00E704 lea r1,msgNextFor |
FFFFFFFFFFFFD52C BE004FAA bra ERROR |
FFFFFFFFFFFFD530 NX5: |
FFFFFFFFFFFFD530 BE148068 beq r1,r9,NX2 ; else we check them OK, they agree |
FFFFFFFFFFFFD534 31FFF831 call POPA ; nope, let's see the next frame |
FFFFFFFFFFFFD538 BE007F4A bra NX0 |
FFFFFFFFFFFFD53C NX2: |
FFFFFFFFFFFFD53C 46908000 lw r1,[r9] ; get control variable's value |
FFFFFFFFFFFFD540 460110B0 lw r2,LOPINC |
FFFFFFFFFFFFD544 04110403 addu r1,r1,r2 ; add in loop increment |
FFFFFFFFFFFFE610 NEXT: |
FFFFFFFFFFFFE610 E0400000 setlo r1,#0 ; don't allocate it |
FFFFFFFFFFFFE614 31FFFB2E call TSTV ; get address of variable |
FFFFFFFFFFFFE618 BE100069 bne r1,r0,NX4 |
FFFFFFFFFFFFE61C 9A00F80F lea r1,msgNextVar |
FFFFFFFFFFFFE620 BE00504A bra ERROR ; if no variable, say "What?" |
FFFFFFFFFFFFE624 NX4: |
FFFFFFFFFFFFE624 02148009 mov r9,r1 ; save variable's address |
FFFFFFFFFFFFE628 NX0: |
FFFFFFFFFFFFE628 460090A8 lw r1,LOPVAR ; If 'LOPVAR' is zero, we never... |
FFFFFFFFFFFFE62C BE100069 bne r1,r0,NX5 ; had a FOR loop |
FFFFFFFFFFFFE630 9A00F7FC lea r1,msgNextFor |
FFFFFFFFFFFFE634 BE004FAA bra ERROR |
FFFFFFFFFFFFE638 NX5: |
FFFFFFFFFFFFE638 BE148068 beq r1,r9,NX2 ; else we check them OK, they agree |
FFFFFFFFFFFFE63C 31FFFC73 call POPA ; nope, let's see the next frame |
FFFFFFFFFFFFE640 BE007F4A bra NX0 |
FFFFFFFFFFFFE644 NX2: |
FFFFFFFFFFFFE644 46908000 lw r1,[r9] ; get control variable's value |
FFFFFFFFFFFFE648 460110B0 lw r2,LOPINC |
FFFFFFFFFFFFE64C 04110403 addu r1,r1,r2 ; add in loop increment |
; BVS.L QHOW say "How?" for 32-bit overflow |
FFFFFFFFFFFFD548 66908000 sw r1,[r9] ; save control variable's new value |
FFFFFFFFFFFFD54C 460190B8 lw r3,LOPLMT ; get loop's limit value |
FFFFFFFFFFFFD550 BE200063 bgt r2,r0,NX1 ; check loop increment, branch if loop increment is positive |
FFFFFFFFFFFFD554 BE1180E0 blt r1,r3,NXPurge ; test against limit |
FFFFFFFFFFFFD558 BE00004A bra NX3 |
FFFFFFFFFFFFD55C NX1: |
FFFFFFFFFFFFD55C BE1180A3 bgt r1,r3,NXPurge |
FFFFFFFFFFFFD560 NX3: |
FFFFFFFFFFFFD560 460410C0 lw r8,LOPLN ; Within limit, go back to the... |
FFFFFFFFFFFFD564 66041090 sw r8,CURRNT |
FFFFFFFFFFFFD568 460410C8 lw r8,LOPPT ; saved 'CURRNT' and text pointer. |
FFFFFFFFFFFFD56C BE00752A bra FINISH |
FFFFFFFFFFFFD570 NXPurge: |
FFFFFFFFFFFFD570 31FFF831 call POPA ; purge this loop |
FFFFFFFFFFFFD574 BE0074EA bra FINISH |
FFFFFFFFFFFFE650 66908000 sw r1,[r9] ; save control variable's new value |
FFFFFFFFFFFFE654 460190B8 lw r3,LOPLMT ; get loop's limit value |
FFFFFFFFFFFFE658 BE200063 bgt r2,r0,NX1 ; check loop increment, branch if loop increment is positive |
FFFFFFFFFFFFE65C BE1180E0 blt r1,r3,NXPurge ; test against limit |
FFFFFFFFFFFFE660 BE00004A bra NX3 |
FFFFFFFFFFFFE664 NX1: |
FFFFFFFFFFFFE664 BE1180A3 bgt r1,r3,NXPurge |
FFFFFFFFFFFFE668 NX3: |
FFFFFFFFFFFFE668 460410C0 lw r8,LOPLN ; Within limit, go back to the... |
FFFFFFFFFFFFE66C 66041090 sw r8,CURRNT |
FFFFFFFFFFFFE670 460410C8 lw r8,LOPPT ; saved 'CURRNT' and text pointer. |
FFFFFFFFFFFFE674 BE00752A bra FINISH |
FFFFFFFFFFFFE678 NXPurge: |
FFFFFFFFFFFFE678 31FFFC73 call POPA ; purge this loop |
FFFFFFFFFFFFE67C BE0074EA bra FINISH |
|
|
;****************************************************************** |
3563,27 → 5142,27
; continues on the next line. |
;****************************************************************** |
; |
FFFFFFFFFFFFD578 IF: |
FFFFFFFFFFFFD578 31FFF63A call OREXPR ; evaluate the expression |
FFFFFFFFFFFFD57C IF1: |
FFFFFFFFFFFFD57C BE106AC9 bne r1,r0,RUNSML ; is it zero? if not, continue |
FFFFFFFFFFFFD580 IF2: |
FFFFFFFFFFFFD580 02848009 mov r9,r8 ; set lookup pointer |
FFFFFFFFFFFFD584 E0400000 setlo r1,#0 ; find line #0 (impossible) |
FFFFFFFFFFFFD588 31FFF821 call FNDSKP ; if so, skip the rest of the line |
FFFFFFFFFFFFD58C BE104B63 bgt r1,r0,WSTART ; if no next line, do a warm start |
FFFFFFFFFFFFD590 IF3: |
FFFFFFFFFFFFD590 BE0069EA bra RUNTSL ; run the next line |
FFFFFFFFFFFFE680 IF: |
FFFFFFFFFFFFE680 31FFFA7C call OREXPR ; evaluate the expression |
FFFFFFFFFFFFE684 IF1: |
FFFFFFFFFFFFE684 BE106AC9 bne r1,r0,RUNSML ; is it zero? if not, continue |
FFFFFFFFFFFFE688 IF2: |
FFFFFFFFFFFFE688 02848009 mov r9,r8 ; set lookup pointer |
FFFFFFFFFFFFE68C E0400000 setlo r1,#0 ; find line #0 (impossible) |
FFFFFFFFFFFFE690 31FFFC63 call FNDSKP ; if so, skip the rest of the line |
FFFFFFFFFFFFE694 BE104B83 bgt r1,r0,WSTART ; if no next line, do a warm start |
FFFFFFFFFFFFE698 IF3: |
FFFFFFFFFFFFE698 BE0069EA bra RUNTSL ; run the next line |
|
|
;****************************************************************** |
; INPUT is called first and establishes a stack frame |
FFFFFFFFFFFFD594 INPERR: |
FFFFFFFFFFFFD594 460F10A0 lw sp,STKINP ; restore the old stack pointer |
FFFFFFFFFFFFD598 47E40010 lw r8,16[sp] |
FFFFFFFFFFFFD59C 66041090 sw r8,CURRNT ; and old 'CURRNT' |
FFFFFFFFFFFFD5A0 47E40008 lw r8,8[sp] ; and old text pointer |
FFFFFFFFFFFFD5A4 0BEF0028 addui sp,sp,#40 ; fall through will subtract 40 |
FFFFFFFFFFFFE69C INPERR: |
FFFFFFFFFFFFE69C 460F10A0 lw sp,STKINP ; restore the old stack pointer |
FFFFFFFFFFFFE6A0 47E40010 lw r8,16[sp] |
FFFFFFFFFFFFE6A4 66041090 sw r8,CURRNT ; and old 'CURRNT' |
FFFFFFFFFFFFE6A8 47E40008 lw r8,8[sp] ; and old text pointer |
FFFFFFFFFFFFE6AC 0BEF0028 addui sp,sp,#40 ; fall through will subtract 40 |
|
; 'INPUT' is like the 'PRINT' command, and is followed by a list |
; of items. If the item is a string in single or double quotes, |
3600,63 → 5179,63
; the prompt and redo the input. The execution will not terminate |
; unless you press control-C. This is handled in 'INPERR'. |
; |
FFFFFFFFFFFFD5A8 INPUT: |
FFFFFFFFFFFFD5A8 0FEF0028 subui sp,sp,#40 ; allocate stack frame |
FFFFFFFFFFFFD5AC 67E28020 sw r5,32[sp] |
FFFFFFFFFFFFD5B0 IP6: |
FFFFFFFFFFFFD5B0 67E40000 sw r8,[sp] ; save in case of error |
FFFFFFFFFFFFD5B4 31FFF867 call QTSTG ; is next item a string? |
FFFFFFFFFFFFD5B8 BE0000CA bra IP2 ; nope - this branch must take only two bytes |
FFFFFFFFFFFFD5BC E0400001 setlo r1,#1 ; allocate var |
FFFFFFFFFFFFD5C0 31FFF6EC call TSTV ; yes, but is it followed by a variable? |
FFFFFFFFFFFFD5C4 BE1003E8 beq r1,r0,IP4 ; if not, brnch |
FFFFFFFFFFFFD5C8 02150009 mov r10,r1 ; put away the variable's address |
FFFFFFFFFFFFD5CC BE0001AA bra IP3 ; if so, input to variable |
FFFFFFFFFFFFD5D0 IP2: |
FFFFFFFFFFFFD5D0 67E40008 sw r8,8[sp] ; save for 'PRTSTG' |
FFFFFFFFFFFFD5D4 E0400001 setlo r1,#1 |
FFFFFFFFFFFFD5D8 31FFF6EC call TSTV ; must be a variable now |
FFFFFFFFFFFFD5DC BE100069 bne r1,r0,IP7 |
FFFFFFFFFFFFD5E0 9A00E6E7 lea r1,msgInputVar |
FFFFFFFFFFFFD5E4 BE0049EA bra ERROR ; "What?" it isn't? |
FFFFFFFFFFFFD5E8 IP7: |
FFFFFFFFFFFFD5E8 02150009 mov r10,r1 ; put away the variable's address |
FFFFFFFFFFFFD5EC 40828000 lb r5,[r8] ; get ready for 'PRTSTG' by null terminating |
FFFFFFFFFFFFD5F0 60800000 sb r0,[r8] |
FFFFFFFFFFFFD5F4 47E08008 lw r1,8[sp] ; get back text pointer |
FFFFFFFFFFFFD5F8 31FFF851 call PRTSTG ; print string as prompt |
FFFFFFFFFFFFD5FC 60828000 sb r5,[r8] ; un-null terminate |
FFFFFFFFFFFFD600 IP3 |
FFFFFFFFFFFFD600 67E40008 sw r8,8[sp] ; save in case of error |
FFFFFFFFFFFFD604 46009090 lw r1,CURRNT |
FFFFFFFFFFFFD608 67E08010 sw r1,16[sp] ; also save 'CURRNT' |
FFFFFFFFFFFFD60C E07FFFFF setlo r1,#-1 |
FFFFFFFFFFFFD610 66009090 sw r1,CURRNT ; flag that we are in INPUT |
FFFFFFFFFFFFD614 660F10A0 sw sp,STKINP ; save the stack pointer too |
FFFFFFFFFFFFD618 67E50018 sw r10,24[sp] ; save the variable address |
FFFFFFFFFFFFD61C E040003A setlo r1,#':' ; print a colon first |
FFFFFFFFFFFFD620 31FFF7D8 call GETLN ; then get an input line |
FFFFFFFFFFFFD624 9A04111B lea r8,BUFFER ; point to the buffer |
FFFFFFFFFFFFD628 31FFF63A call OREXPR ; evaluate the input |
FFFFFFFFFFFFD62C 47E50018 lw r10,24[sp] ; restore the variable address |
FFFFFFFFFFFFD630 66A08000 sw r1,[r10] ; save value in variable |
FFFFFFFFFFFFD634 47E08010 lw r1,16[sp] ; restore old 'CURRNT' |
FFFFFFFFFFFFD638 66009090 sw r1,CURRNT |
FFFFFFFFFFFFD63C 47E40008 lw r8,8[sp] ; and the old text pointer |
FFFFFFFFFFFFD640 IP4: |
FFFFFFFFFFFFD640 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD644 9A025650 lea r4,IP5 ; is the next thing a comma? |
FFFFFFFFFFFFD648 31FFF8F1 call TSTC |
FFFFFFFFFFFFD64C BE007B2A bra IP6 ; yes, more items |
FFFFFFFFFFFFD650 IP5: |
FFFFFFFFFFFFD650 47E28020 lw r5,32[sp] |
FFFFFFFFFFFFD654 09EF0028 add sp,sp,#40 ; clean up the stack |
FFFFFFFFFFFFD658 33FFF504 jmp FINISH |
FFFFFFFFFFFFE6B0 INPUT: |
FFFFFFFFFFFFE6B0 0FEF0028 subui sp,sp,#40 ; allocate stack frame |
FFFFFFFFFFFFE6B4 67E28020 sw r5,32[sp] |
FFFFFFFFFFFFE6B8 IP6: |
FFFFFFFFFFFFE6B8 67E40000 sw r8,[sp] ; save in case of error |
FFFFFFFFFFFFE6BC 31FFFCA9 call QTSTG ; is next item a string? |
FFFFFFFFFFFFE6C0 BE0000CA bra IP2 ; nope - this branch must take only two bytes |
FFFFFFFFFFFFE6C4 E0400001 setlo r1,#1 ; allocate var |
FFFFFFFFFFFFE6C8 31FFFB2E call TSTV ; yes, but is it followed by a variable? |
FFFFFFFFFFFFE6CC BE1003E8 beq r1,r0,IP4 ; if not, brnch |
FFFFFFFFFFFFE6D0 02150009 mov r10,r1 ; put away the variable's address |
FFFFFFFFFFFFE6D4 BE0001AA bra IP3 ; if so, input to variable |
FFFFFFFFFFFFE6D8 IP2: |
FFFFFFFFFFFFE6D8 67E40008 sw r8,8[sp] ; save for 'PRTSTG' |
FFFFFFFFFFFFE6DC E0400001 setlo r1,#1 |
FFFFFFFFFFFFE6E0 31FFFB2E call TSTV ; must be a variable now |
FFFFFFFFFFFFE6E4 BE100069 bne r1,r0,IP7 |
FFFFFFFFFFFFE6E8 9A00F7DF lea r1,msgInputVar |
FFFFFFFFFFFFE6EC BE0049EA bra ERROR ; "What?" it isn't? |
FFFFFFFFFFFFE6F0 IP7: |
FFFFFFFFFFFFE6F0 02150009 mov r10,r1 ; put away the variable's address |
FFFFFFFFFFFFE6F4 40828000 lb r5,[r8] ; get ready for 'PRTSTG' by null terminating |
FFFFFFFFFFFFE6F8 60800000 sb r0,[r8] |
FFFFFFFFFFFFE6FC 47E08008 lw r1,8[sp] ; get back text pointer |
FFFFFFFFFFFFE700 31FFFC93 call PRTSTG ; print string as prompt |
FFFFFFFFFFFFE704 60828000 sb r5,[r8] ; un-null terminate |
FFFFFFFFFFFFE708 IP3 |
FFFFFFFFFFFFE708 67E40008 sw r8,8[sp] ; save in case of error |
FFFFFFFFFFFFE70C 46009090 lw r1,CURRNT |
FFFFFFFFFFFFE710 67E08010 sw r1,16[sp] ; also save 'CURRNT' |
FFFFFFFFFFFFE714 E07FFFFF setlo r1,#-1 |
FFFFFFFFFFFFE718 66009090 sw r1,CURRNT ; flag that we are in INPUT |
FFFFFFFFFFFFE71C 660F10A0 sw sp,STKINP ; save the stack pointer too |
FFFFFFFFFFFFE720 67E50018 sw r10,24[sp] ; save the variable address |
FFFFFFFFFFFFE724 E040003A setlo r1,#':' ; print a colon first |
FFFFFFFFFFFFE728 31FFFC1A call GETLN ; then get an input line |
FFFFFFFFFFFFE72C 9A04111B lea r8,BUFFER ; point to the buffer |
FFFFFFFFFFFFE730 31FFFA7C call OREXPR ; evaluate the input |
FFFFFFFFFFFFE734 47E50018 lw r10,24[sp] ; restore the variable address |
FFFFFFFFFFFFE738 66A08000 sw r1,[r10] ; save value in variable |
FFFFFFFFFFFFE73C 47E08010 lw r1,16[sp] ; restore old 'CURRNT' |
FFFFFFFFFFFFE740 66009090 sw r1,CURRNT |
FFFFFFFFFFFFE744 47E40008 lw r8,8[sp] ; and the old text pointer |
FFFFFFFFFFFFE748 IP4: |
FFFFFFFFFFFFE748 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE74C 9A026758 lea r4,IP5 ; is the next thing a comma? |
FFFFFFFFFFFFE750 31FFFD30 call TSTC |
FFFFFFFFFFFFE754 BE007B2A bra IP6 ; yes, more items |
FFFFFFFFFFFFE758 IP5: |
FFFFFFFFFFFFE758 47E28020 lw r5,32[sp] |
FFFFFFFFFFFFE75C 09EF0028 add sp,sp,#40 ; clean up the stack |
FFFFFFFFFFFFE760 33FFF946 jmp FINISH |
|
|
FFFFFFFFFFFFD65C DEFLT: |
FFFFFFFFFFFFD65C 40808000 lb r1,[r8] |
FFFFFFFFFFFFD660 B01F6C0D beq r1,#CR,FINISH ; empty line is OK else it is 'LET' |
FFFFFFFFFFFFE764 DEFLT: |
FFFFFFFFFFFFE764 40808000 lb r1,[r8] |
FFFFFFFFFFFFE768 B01F6C0D beq r1,#CR,FINISH ; empty line is OK else it is 'LET' |
|
|
;****************************************************************** |
3667,14 → 5246,14
; 'LET' commands without the word 'LET'. This is done by 'DEFLT'. |
;****************************************************************** |
; |
FFFFFFFFFFFFD664 LET: |
FFFFFFFFFFFFD664 31FFF798 call SETVAL ; do the assignment |
FFFFFFFFFFFFD668 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD66C 9A025410 lea r4,FINISH |
FFFFFFFFFFFFD670 31FFF8F1 call TSTC ; check for more 'LET' items |
FFFFFFFFFFFFD674 BE007F8A bra LET |
FFFFFFFFFFFFD678 LT1: |
FFFFFFFFFFFFD678 BE006CCA bra FINISH ; until we are finished. |
FFFFFFFFFFFFE76C LET: |
FFFFFFFFFFFFE76C 31FFFBDA call SETVAL ; do the assignment |
FFFFFFFFFFFFE770 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE774 9A026518 lea r4,FINISH |
FFFFFFFFFFFFE778 31FFFD30 call TSTC ; check for more 'LET' items |
FFFFFFFFFFFFE77C BE007F8A bra LET |
FFFFFFFFFFFFE780 LT1: |
FFFFFFFFFFFFE780 BE006CCA bra FINISH ; until we are finished. |
|
|
;****************************************************************** |
3689,53 → 5268,53
; the Butterfly. |
;****************************************************************** |
; |
FFFFFFFFFFFFD67C LOAD |
FFFFFFFFFFFFD67C 46044E60 lw r8,TXTBGN ; set pointer to start of prog. area |
FFFFFFFFFFFFD680 E040000D setlo r1,#CR ; For a CP/M host, tell it we're ready... |
FFFFFFFFFFFFD684 31FFF395 call GOAUXO ; by sending a CR to finish PIP command. |
FFFFFFFFFFFFD688 LOD1: |
FFFFFFFFFFFFD688 31FFF396 call GOAUXI ; look for start of line |
FFFFFFFFFFFFD68C BE107FE2 ble r1,r0,LOD1 |
FFFFFFFFFFFFD690 B0100E40 beq r1,#'@',LODEND ; end of program? |
FFFFFFFFFFFFD694 B0100D1A beq r1,#0x1A,LODEND ; or EOF marker |
FFFFFFFFFFFFD698 B21FFC3A bne r1,#':',LOD1 ; if not, is it start of line? if not, wait for it |
FFFFFFFFFFFFD69C 31FFF5B4 call GCHAR ; get line number |
FFFFFFFFFFFFD6A0 60808000 sb r1,[r8] ; store it |
FFFFFFFFFFFFD6A4 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFD6A8 60808001 sb r1,1[r8] |
FFFFFFFFFFFFD6AC 0A840002 addui r8,r8,#2 |
FFFFFFFFFFFFD6B0 LOD2: |
FFFFFFFFFFFFD6B0 31FFF396 call GOAUXI ; get another text char. |
FFFFFFFFFFFFD6B4 BE107FE2 ble r1,r0,LOD2 |
FFFFFFFFFFFFD6B8 60808000 sb r1,[r8] |
FFFFFFFFFFFFD6BC 0A840001 addui r8,r8,#1 ; store it |
FFFFFFFFFFFFD6C0 B21FFC0D bne r1,#CR,LOD2 ; is it the end of the line? if not, go back for more |
FFFFFFFFFFFFD6C4 BE007E2A bra LOD1 ; if so, start a new line |
FFFFFFFFFFFFD6C8 LODEND: |
FFFFFFFFFFFFD6C8 660410D0 sw r8,TXTUNF ; set end-of program pointer |
FFFFFFFFFFFFD6CC BE00416A bra WSTART ; back to direct mode |
FFFFFFFFFFFFE784 LOAD |
FFFFFFFFFFFFE784 46045F68 lw r8,TXTBGN ; set pointer to start of prog. area |
FFFFFFFFFFFFE788 E040000D setlo r1,#CR ; For a CP/M host, tell it we're ready... |
FFFFFFFFFFFFE78C 31FFF7D7 call GOAUXO ; by sending a CR to finish PIP command. |
FFFFFFFFFFFFE790 LOD1: |
FFFFFFFFFFFFE790 31FFF7D8 call GOAUXI ; look for start of line |
FFFFFFFFFFFFE794 BE107FE2 ble r1,r0,LOD1 |
FFFFFFFFFFFFE798 B0100E40 beq r1,#'@',LODEND ; end of program? |
FFFFFFFFFFFFE79C B0100D1A beq r1,#0x1A,LODEND ; or EOF marker |
FFFFFFFFFFFFE7A0 B21FFC3A bne r1,#':',LOD1 ; if not, is it start of line? if not, wait for it |
FFFFFFFFFFFFE7A4 31FFF9F6 call GCHAR ; get line number |
FFFFFFFFFFFFE7A8 60808000 sb r1,[r8] ; store it |
FFFFFFFFFFFFE7AC 06109001 shrui r1,r1,#8 |
FFFFFFFFFFFFE7B0 60808001 sb r1,1[r8] |
FFFFFFFFFFFFE7B4 0A840002 addui r8,r8,#2 |
FFFFFFFFFFFFE7B8 LOD2: |
FFFFFFFFFFFFE7B8 31FFF7D8 call GOAUXI ; get another text char. |
FFFFFFFFFFFFE7BC BE107FE2 ble r1,r0,LOD2 |
FFFFFFFFFFFFE7C0 60808000 sb r1,[r8] |
FFFFFFFFFFFFE7C4 0A840001 addui r8,r8,#1 ; store it |
FFFFFFFFFFFFE7C8 B21FFC0D bne r1,#CR,LOD2 ; is it the end of the line? if not, go back for more |
FFFFFFFFFFFFE7CC BE007E2A bra LOD1 ; if so, start a new line |
FFFFFFFFFFFFE7D0 LODEND: |
FFFFFFFFFFFFE7D0 660410D0 sw r8,TXTUNF ; set end-of program pointer |
FFFFFFFFFFFFE7D4 BE00418A bra WSTART ; back to direct mode |
|
|
; get character from input (16 bit value) |
FFFFFFFFFFFFD6D0 GCHAR: |
FFFFFFFFFFFFD6D0 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFD6D4 67E28000 sw r5,[sp] |
FFFFFFFFFFFFD6D8 67E30008 sw r6,8[sp] |
FFFFFFFFFFFFD6DC 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFD6E0 E1800003 setlo r6,#3 ; repeat four times |
FFFFFFFFFFFFD6E4 E1400000 setlo r5,#0 |
FFFFFFFFFFFFD6E8 GCHAR1: |
FFFFFFFFFFFFD6E8 31FFF396 call GOAUXI ; get a char |
FFFFFFFFFFFFD6EC BE107FE2 ble r1,r0,GCHAR1 |
FFFFFFFFFFFFD6F0 31FFF5C5 call asciiToHex |
FFFFFFFFFFFFD6F4 06528800 shli r5,r5,#4 |
FFFFFFFFFFFFD6F8 04509409 or r5,r5,r1 |
FFFFFFFFFFFFD6FC BE037F6F loop r6,GCHAR1 |
FFFFFFFFFFFFD700 02508009 mov r1,r5 |
FFFFFFFFFFFFD704 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFD708 47E30008 lw r6,8[sp] |
FFFFFFFFFFFFD70C 47E28000 lw r5,[sp] |
FFFFFFFFFFFFD710 37EF8018 ret #24 |
FFFFFFFFFFFFE7D8 GCHAR: |
FFFFFFFFFFFFE7D8 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFE7DC 67E28000 sw r5,[sp] |
FFFFFFFFFFFFE7E0 67E30008 sw r6,8[sp] |
FFFFFFFFFFFFE7E4 67EF8010 sw lr,16[sp] |
FFFFFFFFFFFFE7E8 E1800003 setlo r6,#3 ; repeat four times |
FFFFFFFFFFFFE7EC E1400000 setlo r5,#0 |
FFFFFFFFFFFFE7F0 GCHAR1: |
FFFFFFFFFFFFE7F0 31FFF7D8 call GOAUXI ; get a char |
FFFFFFFFFFFFE7F4 BE107FE2 ble r1,r0,GCHAR1 |
FFFFFFFFFFFFE7F8 31FFFA07 call asciiToHex |
FFFFFFFFFFFFE7FC 06528800 shli r5,r5,#4 |
FFFFFFFFFFFFE800 04509409 or r5,r5,r1 |
FFFFFFFFFFFFE804 BE037F6F loop r6,GCHAR1 |
FFFFFFFFFFFFE808 02508009 mov r1,r5 |
FFFFFFFFFFFFE80C 47EF8010 lw lr,16[sp] |
FFFFFFFFFFFFE810 47E30008 lw r6,8[sp] |
FFFFFFFFFFFFE814 47E28000 lw r5,[sp] |
FFFFFFFFFFFFE818 37EF8018 ret #24 |
|
|
; convert an ascii char to hex code |
3742,96 → 5321,96
; input |
; r1 = char to convert |
|
FFFFFFFFFFFFD714 asciiToHex: |
FFFFFFFFFFFFD714 A4100239 blei r1,#'9',a2h1 ; less than '9' |
FFFFFFFFFFFFD718 0E108007 subui r1,r1,#7 ; shift 'A' to '9'+1 |
FFFFFFFFFFFFD71C a2h1: |
FFFFFFFFFFFFD71C 0E108030 subui r1,r1,#'0' ; |
FFFFFFFFFFFFD720 1410800F andi r1,r1,#15 ; make sure a nybble |
FFFFFFFFFFFFD724 37EF8000 ret |
FFFFFFFFFFFFE81C asciiToHex: |
FFFFFFFFFFFFE81C A4100239 blei r1,#'9',a2h1 ; less than '9' |
FFFFFFFFFFFFE820 0E108007 subui r1,r1,#7 ; shift 'A' to '9'+1 |
FFFFFFFFFFFFE824 a2h1: |
FFFFFFFFFFFFE824 0E108030 subui r1,r1,#'0' ; |
FFFFFFFFFFFFE828 1410800F andi r1,r1,#15 ; make sure a nybble |
FFFFFFFFFFFFE82C 37EF8000 ret |
|
|
|
FFFFFFFFFFFFD728 SAVE: |
FFFFFFFFFFFFD728 46044E60 lw r8,TXTBGN ;set pointer to start of prog. area |
FFFFFFFFFFFFD72C 460490D0 lw r9,TXTUNF ;set pointer to end of prog. area |
FFFFFFFFFFFFD730 SAVE1: |
FFFFFFFFFFFFD730 31FFF5E1 call AUXOCRLF ; send out a CR & LF (CP/M likes this) |
FFFFFFFFFFFFD734 BE8481C5 bgeu r8,r9,SAVEND ; are we finished? |
FFFFFFFFFFFFD738 E040003A setlo r1,#':' ; if not, start a line |
FFFFFFFFFFFFD73C 31FFF395 call GOAUXO |
FFFFFFFFFFFFD740 4A808000 lbu r1,[r8] ; get line number |
FFFFFFFFFFFFD744 4A810001 lbu r2,1[r8] |
FFFFFFFFFFFFD748 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFD74C 04110409 or r1,r1,r2 |
FFFFFFFFFFFFD750 0A840002 addui r8,r8,#2 |
FFFFFFFFFFFFD754 31FFF5E9 call PWORD ; output line number as 4-digit hex |
FFFFFFFFFFFFD758 SAVE2: |
FFFFFFFFFFFFD758 40808000 lb r1,[r8] ; get a text char. |
FFFFFFFFFFFFD75C 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFD760 B01FF40D beqi r1,#CR,SAVE1 ; is it the end of the line? if so, send CR & LF and start new line |
FFFFFFFFFFFFD764 31FFF395 call GOAUXO ; send it out |
FFFFFFFFFFFFD768 BE007F8A bra SAVE2 ; go back for more text |
FFFFFFFFFFFFD76C SAVEND: |
FFFFFFFFFFFFD76C E0400040 setlo r1,#'@' ; send end-of-program indicator |
FFFFFFFFFFFFD770 31FFF395 call GOAUXO |
FFFFFFFFFFFFD774 31FFF5E1 call AUXOCRLF ; followed by a CR & LF |
FFFFFFFFFFFFD778 E040001A setlo r1,#0x1A ; and a control-Z to end the CP/M file |
FFFFFFFFFFFFD77C 31FFF395 call GOAUXO |
FFFFFFFFFFFFD780 BE003BCA bra WSTART ; then go do a warm start |
FFFFFFFFFFFFE830 SAVE: |
FFFFFFFFFFFFE830 46045F68 lw r8,TXTBGN ;set pointer to start of prog. area |
FFFFFFFFFFFFE834 460490D0 lw r9,TXTUNF ;set pointer to end of prog. area |
FFFFFFFFFFFFE838 SAVE1: |
FFFFFFFFFFFFE838 31FFFA23 call AUXOCRLF ; send out a CR & LF (CP/M likes this) |
FFFFFFFFFFFFE83C BE8481C5 bgeu r8,r9,SAVEND ; are we finished? |
FFFFFFFFFFFFE840 E040003A setlo r1,#':' ; if not, start a line |
FFFFFFFFFFFFE844 31FFF7D7 call GOAUXO |
FFFFFFFFFFFFE848 4A808000 lbu r1,[r8] ; get line number |
FFFFFFFFFFFFE84C 4A810001 lbu r2,1[r8] |
FFFFFFFFFFFFE850 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFE854 04110409 or r1,r1,r2 |
FFFFFFFFFFFFE858 0A840002 addui r8,r8,#2 |
FFFFFFFFFFFFE85C 31FFFA2B call PWORD ; output line number as 4-digit hex |
FFFFFFFFFFFFE860 SAVE2: |
FFFFFFFFFFFFE860 40808000 lb r1,[r8] ; get a text char. |
FFFFFFFFFFFFE864 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFE868 B01FF40D beqi r1,#CR,SAVE1 ; is it the end of the line? if so, send CR & LF and start new line |
FFFFFFFFFFFFE86C 31FFF7D7 call GOAUXO ; send it out |
FFFFFFFFFFFFE870 BE007F8A bra SAVE2 ; go back for more text |
FFFFFFFFFFFFE874 SAVEND: |
FFFFFFFFFFFFE874 E0400040 setlo r1,#'@' ; send end-of-program indicator |
FFFFFFFFFFFFE878 31FFF7D7 call GOAUXO |
FFFFFFFFFFFFE87C 31FFFA23 call AUXOCRLF ; followed by a CR & LF |
FFFFFFFFFFFFE880 E040001A setlo r1,#0x1A ; and a control-Z to end the CP/M file |
FFFFFFFFFFFFE884 31FFF7D7 call GOAUXO |
FFFFFFFFFFFFE888 BE003BEA bra WSTART ; then go do a warm start |
|
|
; output a CR LF sequence to auxillary output |
; Registers Affected |
; r3 = LF |
FFFFFFFFFFFFD784 AUXOCRLF: |
FFFFFFFFFFFFD784 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD788 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD78C E040000D setlo r1,#CR |
FFFFFFFFFFFFD790 31FFF395 call GOAUXO |
FFFFFFFFFFFFD794 E040000A setlo r1,#LF |
FFFFFFFFFFFFD798 31FFF395 call GOAUXO |
FFFFFFFFFFFFD79C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD7A0 37EF8008 ret #8 |
FFFFFFFFFFFFE88C AUXOCRLF: |
FFFFFFFFFFFFE88C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE890 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE894 E040000D setlo r1,#CR |
FFFFFFFFFFFFE898 31FFF7D7 call GOAUXO |
FFFFFFFFFFFFE89C E040000A setlo r1,#LF |
FFFFFFFFFFFFE8A0 31FFF7D7 call GOAUXO |
FFFFFFFFFFFFE8A4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE8A8 37EF8008 ret #8 |
|
|
; output a word in hex format |
; tricky because of the need to reverse the order of the chars |
FFFFFFFFFFFFD7A4 PWORD: |
FFFFFFFFFFFFD7A4 0DEF0010 sub sp,sp,#16 |
FFFFFFFFFFFFD7A8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD7AC 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFD7B0 9A02910F lea r5,NUMWKA+15 |
FFFFFFFFFFFFD7B4 02120009 mov r4,r1 ; r4 = value |
FFFFFFFFFFFFD7B8 pword1: |
FFFFFFFFFFFFD7B8 02408009 mov r1,r4 ; r1 = value |
FFFFFFFFFFFFD7BC 06420801 shrui r4,r4,#4 ; shift over to next nybble |
FFFFFFFFFFFFD7C0 31FFF5FD call toAsciiHex ; convert LS nybble to ascii hex |
FFFFFFFFFFFFD7C4 60508000 sb r1,[r5] ; save in work area |
FFFFFFFFFFFFD7C8 0E528001 subui r5,r5,#1 |
FFFFFFFFFFFFD7CC 12509100 cmpui r1,r5,#NUMWKA |
FFFFFFFFFFFFD7D0 BE107F41 bge r1,r0,pword1 |
FFFFFFFFFFFFD7D4 pword2: |
FFFFFFFFFFFFD7D4 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFD7D8 40508000 lb r1,[r5] ; get char to output |
FFFFFFFFFFFFD7DC 31FFF395 call GOAUXO ; send it |
FFFFFFFFFFFFD7E0 1250910F cmpui r1,r5,#NUMWKA+15 |
FFFFFFFFFFFFD7E4 BE107F80 blt r1,r0,pword2 |
FFFFFFFFFFFFD7E8 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFD7EC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD7F0 37EF8010 ret #16 |
FFFFFFFFFFFFE8AC PWORD: |
FFFFFFFFFFFFE8AC 0DEF0010 sub sp,sp,#16 |
FFFFFFFFFFFFE8B0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE8B4 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFE8B8 9A02910F lea r5,NUMWKA+15 |
FFFFFFFFFFFFE8BC 02120009 mov r4,r1 ; r4 = value |
FFFFFFFFFFFFE8C0 pword1: |
FFFFFFFFFFFFE8C0 02408009 mov r1,r4 ; r1 = value |
FFFFFFFFFFFFE8C4 06420801 shrui r4,r4,#4 ; shift over to next nybble |
FFFFFFFFFFFFE8C8 31FFFA3F call toAsciiHex ; convert LS nybble to ascii hex |
FFFFFFFFFFFFE8CC 60508000 sb r1,[r5] ; save in work area |
FFFFFFFFFFFFE8D0 0E528001 subui r5,r5,#1 |
FFFFFFFFFFFFE8D4 12509100 cmpui r1,r5,#NUMWKA |
FFFFFFFFFFFFE8D8 BE107F41 bge r1,r0,pword1 |
FFFFFFFFFFFFE8DC pword2: |
FFFFFFFFFFFFE8DC 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFE8E0 40508000 lb r1,[r5] ; get char to output |
FFFFFFFFFFFFE8E4 31FFF7D7 call GOAUXO ; send it |
FFFFFFFFFFFFE8E8 1250910F cmpui r1,r5,#NUMWKA+15 |
FFFFFFFFFFFFE8EC BE107F80 blt r1,r0,pword2 |
FFFFFFFFFFFFE8F0 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFE8F4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE8F8 37EF8010 ret #16 |
|
|
; convert nybble in r2 to ascii hex char2 |
; r2 = character to convert |
|
FFFFFFFFFFFFD7F4 toAsciiHex: |
FFFFFFFFFFFFD7F4 1410800F andi r1,r1,#15 ; make sure it's a nybble |
FFFFFFFFFFFFD7F8 A010020A blti r1,#10,tah1 ; > 10 ? |
FFFFFFFFFFFFD7FC 08108007 addi r1,r1,#7 ; bump it up to the letter 'A' |
FFFFFFFFFFFFD800 tah1: |
FFFFFFFFFFFFD800 0A108030 addui r1,r1,#'0' ; bump up to ascii '0' |
FFFFFFFFFFFFD804 37EF8000 ret |
FFFFFFFFFFFFE8FC toAsciiHex: |
FFFFFFFFFFFFE8FC 1410800F andi r1,r1,#15 ; make sure it's a nybble |
FFFFFFFFFFFFE900 A010020A blti r1,#10,tah1 ; > 10 ? |
FFFFFFFFFFFFE904 08108007 addi r1,r1,#7 ; bump it up to the letter 'A' |
FFFFFFFFFFFFE908 tah1: |
FFFFFFFFFFFFE908 0A108030 addui r1,r1,#'0' ; bump up to ascii '0' |
FFFFFFFFFFFFE90C 37EF8000 ret |
|
|
|
3847,73 → 5426,73
; The subroutine returns to the interpreter by executing an RET. |
;****************************************************************** |
; |
FFFFFFFFFFFFD808 POKE: |
FFFFFFFFFFFFD808 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD80C 31FFF63A call OREXPR ; get the memory address |
FFFFFFFFFFFFD810 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD814 9A025834 lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFD818 31FFF8F1 call TSTC ; it must be followed by a comma |
FFFFFFFFFFFFD81C 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFD820 31FFF63A call OREXPR ; get the byte to be POKE'd |
FFFFFFFFFFFFD824 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFD828 60208000 sb r1,[r2] ; store the byte in memory |
FFFFFFFFFFFFD82C 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFD830 BE005F0A bra FINISH |
FFFFFFFFFFFFD834 PKER: |
FFFFFFFFFFFFD834 9A00E680 lea r1,msgComma |
FFFFFFFFFFFFD838 BE00374A bra ERROR ; if no comma, say "What?" |
FFFFFFFFFFFFE910 POKE: |
FFFFFFFFFFFFE910 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE914 31FFFA7C call OREXPR ; get the memory address |
FFFFFFFFFFFFE918 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE91C 9A02693C lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFE920 31FFFD30 call TSTC ; it must be followed by a comma |
FFFFFFFFFFFFE924 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFE928 31FFFA7C call OREXPR ; get the byte to be POKE'd |
FFFFFFFFFFFFE92C 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFE930 60208000 sb r1,[r2] ; store the byte in memory |
FFFFFFFFFFFFE934 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE938 BE005F0A bra FINISH |
FFFFFFFFFFFFE93C PKER: |
FFFFFFFFFFFFE93C 9A00F778 lea r1,msgComma |
FFFFFFFFFFFFE940 BE00374A bra ERROR ; if no comma, say "What?" |
|
FFFFFFFFFFFFD83C POKEC: |
FFFFFFFFFFFFD83C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD840 31FFF63A call OREXPR ; get the memory address |
FFFFFFFFFFFFD844 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD848 9A025834 lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFD84C 31FFF8F1 call TSTC ; it must be followed by a comma |
FFFFFFFFFFFFD850 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFD854 31FFF63A call OREXPR ; get the byte to be POKE'd |
FFFFFFFFFFFFD858 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFD85C 62208000 sc r1,[r2] ; store the char in memory |
FFFFFFFFFFFFD860 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFD864 33FFF504 jmp FINISH |
FFFFFFFFFFFFE944 POKEC: |
FFFFFFFFFFFFE944 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE948 31FFFA7C call OREXPR ; get the memory address |
FFFFFFFFFFFFE94C E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE950 9A02693C lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFE954 31FFFD30 call TSTC ; it must be followed by a comma |
FFFFFFFFFFFFE958 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFE95C 31FFFA7C call OREXPR ; get the byte to be POKE'd |
FFFFFFFFFFFFE960 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFE964 62208000 sc r1,[r2] ; store the char in memory |
FFFFFFFFFFFFE968 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE96C 33FFF946 jmp FINISH |
|
FFFFFFFFFFFFD868 POKEH: |
FFFFFFFFFFFFD868 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD86C 31FFF63A call OREXPR ; get the memory address |
FFFFFFFFFFFFD870 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD874 9A025834 lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFD878 31FFF8F1 call TSTC |
FFFFFFFFFFFFD87C 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFD880 31FFF63A call OREXPR ; get the byte to be POKE'd |
FFFFFFFFFFFFD884 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFD888 64208000 sh r1,[r2] ; store the word in memory |
FFFFFFFFFFFFD88C 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFD890 33FFF504 jmp FINISH |
FFFFFFFFFFFFE970 POKEH: |
FFFFFFFFFFFFE970 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE974 31FFFA7C call OREXPR ; get the memory address |
FFFFFFFFFFFFE978 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE97C 9A02693C lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFE980 31FFFD30 call TSTC |
FFFFFFFFFFFFE984 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFE988 31FFFA7C call OREXPR ; get the byte to be POKE'd |
FFFFFFFFFFFFE98C 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFE990 64208000 sh r1,[r2] ; store the word in memory |
FFFFFFFFFFFFE994 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE998 33FFF946 jmp FINISH |
|
FFFFFFFFFFFFD894 POKEW: |
FFFFFFFFFFFFD894 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD898 31FFF63A call OREXPR ; get the memory address |
FFFFFFFFFFFFD89C E0C0002C setlo r3,#',' |
FFFFFFFFFFFFD8A0 9A025834 lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFD8A4 31FFF8F1 call TSTC |
FFFFFFFFFFFFD8A8 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFD8AC 31FFF63A call OREXPR ; get the word to be POKE'd |
FFFFFFFFFFFFD8B0 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFD8B4 66208000 sw r1,[r2] ; store the word in memory |
FFFFFFFFFFFFD8B8 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFD8BC 33FFF504 jmp FINISH |
FFFFFFFFFFFFE99C POKEW: |
FFFFFFFFFFFFE99C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE9A0 31FFFA7C call OREXPR ; get the memory address |
FFFFFFFFFFFFE9A4 E0C0002C setlo r3,#',' |
FFFFFFFFFFFFE9A8 9A02693C lea r4,PKER ; it must be followed by a comma |
FFFFFFFFFFFFE9AC 31FFFD30 call TSTC |
FFFFFFFFFFFFE9B0 67E08000 sw r1,[sp] ; save the address |
FFFFFFFFFFFFE9B4 31FFFA7C call OREXPR ; get the word to be POKE'd |
FFFFFFFFFFFFE9B8 47E10000 lw r2,[sp] ; get the address back |
FFFFFFFFFFFFE9BC 66208000 sw r1,[r2] ; store the word in memory |
FFFFFFFFFFFFE9C0 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE9C4 33FFF946 jmp FINISH |
|
FFFFFFFFFFFFD8C0 SYSX: |
FFFFFFFFFFFFD8C0 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD8C4 31FFF63A call OREXPR ; get the subroutine's address |
FFFFFFFFFFFFD8C8 BE100069 bne r1,r0,sysx1 ; make sure we got a valid address |
FFFFFFFFFFFFD8CC 9A00E6D5 lea r1,msgSYSBad |
FFFFFFFFFFFFD8D0 BE00328A bra ERROR |
FFFFFFFFFFFFD8D4 sysx1: |
FFFFFFFFFFFFD8D4 67E40000 sw r8,[sp] ; save the text pointer |
FFFFFFFFFFFFD8D8 341F8000 jal r31,[r1] ; jump to the subroutine |
FFFFFFFFFFFFD8DC 47E40000 lw r8,[sp] ; restore the text pointer |
FFFFFFFFFFFFD8E0 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFD8E4 BE00596A bra FINISH |
FFFFFFFFFFFFE9C8 SYSX: |
FFFFFFFFFFFFE9C8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE9CC 31FFFA7C call OREXPR ; get the subroutine's address |
FFFFFFFFFFFFE9D0 BE100069 bne r1,r0,sysx1 ; make sure we got a valid address |
FFFFFFFFFFFFE9D4 9A00F7CD lea r1,msgSYSBad |
FFFFFFFFFFFFE9D8 BE00328A bra ERROR |
FFFFFFFFFFFFE9DC sysx1: |
FFFFFFFFFFFFE9DC 67E40000 sw r8,[sp] ; save the text pointer |
FFFFFFFFFFFFE9E0 341F8000 jal r31,[r1] ; jump to the subroutine |
FFFFFFFFFFFFE9E4 47E40000 lw r8,[sp] ; restore the text pointer |
FFFFFFFFFFFFE9E8 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE9EC BE00596A bra FINISH |
|
;****************************************************************** |
; *** EXPR *** |
3938,46 → 5517,46
|
; <OREXPR>::=<ANDEXPR> OR <ANDEXPR> ... |
; |
FFFFFFFFFFFFD8E8 OREXPR: |
FFFFFFFFFFFFD8E8 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD8EC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD8F0 31FFF648 call ANDEXPR ; get first <ANDEXPR> |
FFFFFFFFFFFFD8F4 XP_OR1: |
FFFFFFFFFFFFD8F4 67E08004 sw r1,4[sp] ; save <ANDEXPR> value |
FFFFFFFFFFFFD8F8 9A04D079 lea r9,TAB10 ; look up a logical operator |
FFFFFFFFFFFFD8FC 9A055200 lea r10,TAB10_1 |
FFFFFFFFFFFFD900 33FFF486 jmp EXEC ; go do it |
FFFFFFFFFFFFD904 XP_OR: |
FFFFFFFFFFFFD904 31FFF648 call ANDEXPR |
FFFFFFFFFFFFD908 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFD90C 04110409 or r1,r1,r2 |
FFFFFFFFFFFFD910 BE007F2A bra XP_OR1 |
FFFFFFFFFFFFD914 XP_ORX: |
FFFFFFFFFFFFD914 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFD918 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD91C 37EF8010 ret #16 |
FFFFFFFFFFFFE9F0 OREXPR: |
FFFFFFFFFFFFE9F0 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFE9F4 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE9F8 31FFFA8A call ANDEXPR ; get first <ANDEXPR> |
FFFFFFFFFFFFE9FC XP_OR1: |
FFFFFFFFFFFFE9FC 67E08004 sw r1,4[sp] ; save <ANDEXPR> value |
FFFFFFFFFFFFEA00 9A04E185 lea r9,TAB10 ; look up a logical operator |
FFFFFFFFFFFFEA04 9A056308 lea r10,TAB10_1 |
FFFFFFFFFFFFEA08 33FFF8C8 jmp EXEC ; go do it |
FFFFFFFFFFFFEA0C XP_OR: |
FFFFFFFFFFFFEA0C 31FFFA8A call ANDEXPR |
FFFFFFFFFFFFEA10 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEA14 04110409 or r1,r1,r2 |
FFFFFFFFFFFFEA18 BE007F2A bra XP_OR1 |
FFFFFFFFFFFFEA1C XP_ORX: |
FFFFFFFFFFFFEA1C 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEA20 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEA24 37EF8010 ret #16 |
|
|
; <ANDEXPR>::=<EXPR> AND <EXPR> ... |
; |
FFFFFFFFFFFFD920 ANDEXPR: |
FFFFFFFFFFFFD920 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD924 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD928 31FFF66D call EXPR ; get first <EXPR> |
FFFFFFFFFFFFD92C XP_AND1: |
FFFFFFFFFFFFD92C 67E08008 sw r1,8[sp] ; save <EXPR> value |
FFFFFFFFFFFFD930 9A04D075 lea r9,TAB9 ; look up a logical operator |
FFFFFFFFFFFFD934 9A0551F0 lea r10,TAB9_1 |
FFFFFFFFFFFFD938 33FFF486 jmp EXEC ; go do it |
FFFFFFFFFFFFD93C XP_AND: |
FFFFFFFFFFFFD93C 31FFF66D call EXPR |
FFFFFFFFFFFFD940 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFD944 04110408 and r1,r1,r2 |
FFFFFFFFFFFFD948 BE007F2A bra XP_AND1 |
FFFFFFFFFFFFD94C XP_ANDX: |
FFFFFFFFFFFFD94C 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFD950 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD954 37EF8010 ret #16 |
FFFFFFFFFFFFEA28 ANDEXPR: |
FFFFFFFFFFFFEA28 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEA2C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEA30 31FFFAAF call EXPR ; get first <EXPR> |
FFFFFFFFFFFFEA34 XP_AND1: |
FFFFFFFFFFFFEA34 67E08008 sw r1,8[sp] ; save <EXPR> value |
FFFFFFFFFFFFEA38 9A04E181 lea r9,TAB9 ; look up a logical operator |
FFFFFFFFFFFFEA3C 9A0562F8 lea r10,TAB9_1 |
FFFFFFFFFFFFEA40 33FFF8C8 jmp EXEC ; go do it |
FFFFFFFFFFFFEA44 XP_AND: |
FFFFFFFFFFFFEA44 31FFFAAF call EXPR |
FFFFFFFFFFFFEA48 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEA4C 04110408 and r1,r1,r2 |
FFFFFFFFFFFFEA50 BE007F2A bra XP_AND1 |
FFFFFFFFFFFFEA54 XP_ANDX: |
FFFFFFFFFFFFEA54 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEA58 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEA5C 37EF8010 ret #16 |
|
|
; Determine if the character is a digit |
3986,14 → 5565,14
; Returns |
; r1 = 1 if digit, otherwise 0 |
; |
FFFFFFFFFFFFD958 isDigit: |
FFFFFFFFFFFFD958 A0100430 blt r1,#'0',isDigitFalse |
FFFFFFFFFFFFD95C A6100339 bgt r1,#'9',isDigitFalse |
FFFFFFFFFFFFD960 E0400001 setlo r1,#1 |
FFFFFFFFFFFFD964 37EF8000 ret |
FFFFFFFFFFFFD968 isDigitFalse: |
FFFFFFFFFFFFD968 E0400000 setlo r1,#0 |
FFFFFFFFFFFFD96C 37EF8000 ret |
FFFFFFFFFFFFEA60 isDigit: |
FFFFFFFFFFFFEA60 A0100430 blt r1,#'0',isDigitFalse |
FFFFFFFFFFFFEA64 A6100339 bgt r1,#'9',isDigitFalse |
FFFFFFFFFFFFEA68 E0400001 setlo r1,#1 |
FFFFFFFFFFFFEA6C 37EF8000 ret |
FFFFFFFFFFFFEA70 isDigitFalse: |
FFFFFFFFFFFFEA70 E0400000 setlo r1,#0 |
FFFFFFFFFFFFEA74 37EF8000 ret |
|
|
; Determine if the character is a alphabetic |
4002,17 → 5581,17
; Returns |
; r1 = 1 if alpha, otherwise 0 |
; |
FFFFFFFFFFFFD970 isAlpha: |
FFFFFFFFFFFFD970 A0100641 blt r1,#'A',isAlphaFalse |
FFFFFFFFFFFFD974 A410035A ble r1,#'Z',isAlphaTrue |
FFFFFFFFFFFFD978 A0100461 blt r1,#'a',isAlphaFalse |
FFFFFFFFFFFFD97C A610037A bgt r1,#'z',isAlphaFalse |
FFFFFFFFFFFFD980 isAlphaTrue: |
FFFFFFFFFFFFD980 E0400001 setlo r1,#1 |
FFFFFFFFFFFFD984 37EF8000 ret |
FFFFFFFFFFFFD988 isAlphaFalse: |
FFFFFFFFFFFFD988 E0400000 setlo r1,#0 |
FFFFFFFFFFFFD98C 37EF8000 ret |
FFFFFFFFFFFFEA78 isAlpha: |
FFFFFFFFFFFFEA78 A0100641 blt r1,#'A',isAlphaFalse |
FFFFFFFFFFFFEA7C A410035A ble r1,#'Z',isAlphaTrue |
FFFFFFFFFFFFEA80 A0100461 blt r1,#'a',isAlphaFalse |
FFFFFFFFFFFFEA84 A610037A bgt r1,#'z',isAlphaFalse |
FFFFFFFFFFFFEA88 isAlphaTrue: |
FFFFFFFFFFFFEA88 E0400001 setlo r1,#1 |
FFFFFFFFFFFFEA8C 37EF8000 ret |
FFFFFFFFFFFFEA90 isAlphaFalse: |
FFFFFFFFFFFFEA90 E0400000 setlo r1,#0 |
FFFFFFFFFFFFEA94 37EF8000 ret |
|
|
; Determine if the character is a alphanumeric |
4021,150 → 5600,150
; Returns |
; r1 = 1 if alpha, otherwise 0 |
; |
FFFFFFFFFFFFD990 isAlnum: |
FFFFFFFFFFFFD990 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFD994 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD998 04100809 or r2,r1,r0 ; save test char |
FFFFFFFFFFFFD99C 31FFF656 call isDigit |
FFFFFFFFFFFFD9A0 BE100069 bne r1,r0,isDigitx ; if it is a digit |
FFFFFFFFFFFFD9A4 04200409 or r1,r2,r0 ; get back test char |
FFFFFFFFFFFFD9A8 31FFF65C call isAlpha |
FFFFFFFFFFFFD9AC isDigitx: |
FFFFFFFFFFFFD9AC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFD9B0 37EF8008 ret #8 |
FFFFFFFFFFFFEA98 isAlnum: |
FFFFFFFFFFFFEA98 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFEA9C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEAA0 04100809 or r2,r1,r0 ; save test char |
FFFFFFFFFFFFEAA4 31FFFA98 call isDigit |
FFFFFFFFFFFFEAA8 BE100069 bne r1,r0,isDigitx ; if it is a digit |
FFFFFFFFFFFFEAAC 04200409 or r1,r2,r0 ; get back test char |
FFFFFFFFFFFFEAB0 31FFFA9E call isAlpha |
FFFFFFFFFFFFEAB4 isDigitx: |
FFFFFFFFFFFFEAB4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEAB8 37EF8008 ret #8 |
|
|
FFFFFFFFFFFFD9B4 EXPR: |
FFFFFFFFFFFFD9B4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFD9B8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFD9BC 31FFF69C call EXPR2 |
FFFFFFFFFFFFD9C0 67E08008 sw r1,8[sp] ; save <EXPR2> value |
FFFFFFFFFFFFD9C4 9A04D06B lea r9,TAB8 ; look up a relational operator |
FFFFFFFFFFFFD9C8 9A0551B8 lea r10,TAB8_1 |
FFFFFFFFFFFFD9CC 33FFF486 jmp EXEC ; go do it |
FFFFFFFFFFFFD9D0 XP11: |
FFFFFFFFFFFFD9D0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFD9D4 31FFF695 call XP18 ; is it ">="? |
FFFFFFFFFFFFD9D8 BE208321 bge r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFD9DC BE0002AA bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFD9E0 XP12: |
FFFFFFFFFFFFD9E0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFD9E4 31FFF695 call XP18 ; is it "<>"? |
FFFFFFFFFFFFD9E8 BE2082A9 bne r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFD9EC BE00022A bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFD9F0 XP13: |
FFFFFFFFFFFFD9F0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFD9F4 31FFF695 call XP18 ; is it ">"? |
FFFFFFFFFFFFD9F8 BE208223 bgt r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFD9FC BE0001AA bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFDA00 XP14: |
FFFFFFFFFFFFDA00 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFDA04 31FFF695 call XP18 ; is it "<="? |
FFFFFFFFFFFFDA08 BE2081A2 ble r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFDA0C BE00012A bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFDA10 XP15: |
FFFFFFFFFFFFDA10 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFDA14 31FFF695 call XP18 ; is it "="? |
FFFFFFFFFFFFDA18 BE208128 beq r2,r1,XPRT1 ; if not, return r2=1 |
FFFFFFFFFFFFDA1C BE0000AA bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFDA20 XP16: |
FFFFFFFFFFFFDA20 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFDA24 31FFF695 call XP18 ; is it "<"? |
FFFFFFFFFFFFDA28 BE2080A0 blt r2,r1,XPRT1 ; if not, return r2=1 |
FFFFFFFFFFFFDA2C BE00002A bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFDA30 XPRT0: |
FFFFFFFFFFFFDA30 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDA34 E0400000 setlo r1,#0 ; return r1=0 (false) |
FFFFFFFFFFFFDA38 37EF8010 ret #16 |
FFFFFFFFFFFFDA3C XPRT1: |
FFFFFFFFFFFFDA3C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDA40 E0400001 setlo r1,#1 ; return r1=1 (true) |
FFFFFFFFFFFFDA44 37EF8010 ret #16 |
FFFFFFFFFFFFEABC EXPR: |
FFFFFFFFFFFFEABC 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEAC0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEAC4 31FFFADE call EXPR2 |
FFFFFFFFFFFFEAC8 67E08008 sw r1,8[sp] ; save <EXPR2> value |
FFFFFFFFFFFFEACC 9A04E177 lea r9,TAB8 ; look up a relational operator |
FFFFFFFFFFFFEAD0 9A0562C0 lea r10,TAB8_1 |
FFFFFFFFFFFFEAD4 33FFF8C8 jmp EXEC ; go do it |
FFFFFFFFFFFFEAD8 XP11: |
FFFFFFFFFFFFEAD8 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEADC 31FFFAD7 call XP18 ; is it ">="? |
FFFFFFFFFFFFEAE0 BE208321 bge r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFEAE4 BE0002AA bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFEAE8 XP12: |
FFFFFFFFFFFFEAE8 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEAEC 31FFFAD7 call XP18 ; is it "<>"? |
FFFFFFFFFFFFEAF0 BE2082A9 bne r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFEAF4 BE00022A bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFEAF8 XP13: |
FFFFFFFFFFFFEAF8 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEAFC 31FFFAD7 call XP18 ; is it ">"? |
FFFFFFFFFFFFEB00 BE208223 bgt r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFEB04 BE0001AA bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFEB08 XP14: |
FFFFFFFFFFFFEB08 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEB0C 31FFFAD7 call XP18 ; is it "<="? |
FFFFFFFFFFFFEB10 BE2081A2 ble r2,r1,XPRT1 ; no, return r2=1 |
FFFFFFFFFFFFEB14 BE00012A bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFEB18 XP15: |
FFFFFFFFFFFFEB18 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEB1C 31FFFAD7 call XP18 ; is it "="? |
FFFFFFFFFFFFEB20 BE208128 beq r2,r1,XPRT1 ; if not, return r2=1 |
FFFFFFFFFFFFEB24 BE0000AA bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFEB28 XP16: |
FFFFFFFFFFFFEB28 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEB2C 31FFFAD7 call XP18 ; is it "<"? |
FFFFFFFFFFFFEB30 BE2080A0 blt r2,r1,XPRT1 ; if not, return r2=1 |
FFFFFFFFFFFFEB34 BE00002A bra XPRT0 ; else return r2=0 |
FFFFFFFFFFFFEB38 XPRT0: |
FFFFFFFFFFFFEB38 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEB3C E0400000 setlo r1,#0 ; return r1=0 (false) |
FFFFFFFFFFFFEB40 37EF8010 ret #16 |
FFFFFFFFFFFFEB44 XPRT1: |
FFFFFFFFFFFFEB44 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEB48 E0400001 setlo r1,#1 ; return r1=1 (true) |
FFFFFFFFFFFFEB4C 37EF8010 ret #16 |
|
FFFFFFFFFFFFDA48 XP17: ; it's not a rel. operator |
FFFFFFFFFFFFDA48 47E08008 lw r1,8[sp] ; return r2=<EXPR2> |
FFFFFFFFFFFFDA4C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDA50 37EF8010 ret #16 |
FFFFFFFFFFFFEB50 XP17: ; it's not a rel. operator |
FFFFFFFFFFFFEB50 47E08008 lw r1,8[sp] ; return r2=<EXPR2> |
FFFFFFFFFFFFEB54 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEB58 37EF8010 ret #16 |
|
FFFFFFFFFFFFDA54 XP18: |
FFFFFFFFFFFFDA54 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDA58 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDA5C 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFDA60 31FFF69C call EXPR2 ; do a second <EXPR2> |
FFFFFFFFFFFFDA64 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDA68 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDA6C 37EF8010 ret #16 |
FFFFFFFFFFFFEB5C XP18: |
FFFFFFFFFFFFEB5C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEB60 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEB64 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFEB68 31FFFADE call EXPR2 ; do a second <EXPR2> |
FFFFFFFFFFFFEB6C 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEB70 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEB74 37EF8010 ret #16 |
|
; <EXPR2>::=(+ or -)<EXPR3>(+ or -)<EXPR3>(... |
|
FFFFFFFFFFFFDA70 EXPR2: |
FFFFFFFFFFFFDA70 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDA74 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDA78 E0C0002D setlo r3,#'-' |
FFFFFFFFFFFFDA7C 9A025A90 lea r4,XP21 |
FFFFFFFFFFFFDA80 31FFF8F1 call TSTC ; negative sign? |
FFFFFFFFFFFFDA84 E0400000 setlo r1,#0 ; yes, fake '0-' |
FFFFFFFFFFFFDA88 67E00008 sw r0,8[sp] |
FFFFFFFFFFFFDA8C BE00020A bra XP26 |
FFFFFFFFFFFFDA90 XP21: |
FFFFFFFFFFFFDA90 E0C0002B setlo r3,#'+' |
FFFFFFFFFFFFDA94 9A025A9C lea r4,XP22 |
FFFFFFFFFFFFDA98 31FFF8F1 call TSTC ; positive sign? ignore it |
FFFFFFFFFFFFDA9C XP22: |
FFFFFFFFFFFFDA9C 31FFF6B9 call EXPR3 ; first <EXPR3> |
FFFFFFFFFFFFDAA0 XP23: |
FFFFFFFFFFFFDAA0 67E08008 sw r1,8[sp] ; yes, save the value |
FFFFFFFFFFFFDAA4 E0C0002B setlo r3,#'+' |
FFFFFFFFFFFFDAA8 9A025AC0 lea r4,XP25 |
FFFFFFFFFFFFDAAC 31FFF8F1 call TSTC ; add? |
FFFFFFFFFFFFDAB0 31FFF6B9 call EXPR3 ; get the second <EXPR3> |
FFFFFFFFFFFFDAB4 XP24: |
FFFFFFFFFFFFDAB4 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDAB8 04110402 add r1,r1,r2 ; add it to the first <EXPR3> |
FFFFFFFFFFFFEB78 EXPR2: |
FFFFFFFFFFFFEB78 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEB7C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEB80 E0C0002D setlo r3,#'-' |
FFFFFFFFFFFFEB84 9A026B98 lea r4,XP21 |
FFFFFFFFFFFFEB88 31FFFD30 call TSTC ; negative sign? |
FFFFFFFFFFFFEB8C E0400000 setlo r1,#0 ; yes, fake '0-' |
FFFFFFFFFFFFEB90 67E00008 sw r0,8[sp] |
FFFFFFFFFFFFEB94 BE00020A bra XP26 |
FFFFFFFFFFFFEB98 XP21: |
FFFFFFFFFFFFEB98 E0C0002B setlo r3,#'+' |
FFFFFFFFFFFFEB9C 9A026BA4 lea r4,XP22 |
FFFFFFFFFFFFEBA0 31FFFD30 call TSTC ; positive sign? ignore it |
FFFFFFFFFFFFEBA4 XP22: |
FFFFFFFFFFFFEBA4 31FFFAFB call EXPR3 ; first <EXPR3> |
FFFFFFFFFFFFEBA8 XP23: |
FFFFFFFFFFFFEBA8 67E08008 sw r1,8[sp] ; yes, save the value |
FFFFFFFFFFFFEBAC E0C0002B setlo r3,#'+' |
FFFFFFFFFFFFEBB0 9A026BC8 lea r4,XP25 |
FFFFFFFFFFFFEBB4 31FFFD30 call TSTC ; add? |
FFFFFFFFFFFFEBB8 31FFFAFB call EXPR3 ; get the second <EXPR3> |
FFFFFFFFFFFFEBBC XP24: |
FFFFFFFFFFFFEBBC 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEBC0 04110402 add r1,r1,r2 ; add it to the first <EXPR3> |
; BVS.L QHOW brnch if there's an overflow |
FFFFFFFFFFFFDABC BE007F2A bra XP23 ; else go back for more operations |
FFFFFFFFFFFFDAC0 XP25: |
FFFFFFFFFFFFDAC0 E0C0002D setlo r3,#'-' |
FFFFFFFFFFFFDAC4 9A025AD8 lea r4,XP45 |
FFFFFFFFFFFFDAC8 31FFF8F1 call TSTC ; subtract? |
FFFFFFFFFFFFDACC XP26: |
FFFFFFFFFFFFDACC 31FFF6B9 call EXPR3 ; get second <EXPR3> |
FFFFFFFFFFFFDAD0 02108006 neg r1,r1 ; change its sign |
FFFFFFFFFFFFDAD4 BE007F0A bra XP24 ; and do an addition |
FFFFFFFFFFFFDAD8 XP45: |
FFFFFFFFFFFFDAD8 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFDADC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDAE0 37EF8010 ret #16 |
FFFFFFFFFFFFEBC4 BE007F2A bra XP23 ; else go back for more operations |
FFFFFFFFFFFFEBC8 XP25: |
FFFFFFFFFFFFEBC8 E0C0002D setlo r3,#'-' |
FFFFFFFFFFFFEBCC 9A026BE0 lea r4,XP45 |
FFFFFFFFFFFFEBD0 31FFFD30 call TSTC ; subtract? |
FFFFFFFFFFFFEBD4 XP26: |
FFFFFFFFFFFFEBD4 31FFFAFB call EXPR3 ; get second <EXPR3> |
FFFFFFFFFFFFEBD8 02108006 neg r1,r1 ; change its sign |
FFFFFFFFFFFFEBDC BE007F0A bra XP24 ; and do an addition |
FFFFFFFFFFFFEBE0 XP45: |
FFFFFFFFFFFFEBE0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEBE4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEBE8 37EF8010 ret #16 |
|
|
; <EXPR3>::=<EXPR4>( <* or /><EXPR4> )(... |
|
FFFFFFFFFFFFDAE4 EXPR3: |
FFFFFFFFFFFFDAE4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDAE8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDAEC 31FFF6CF call EXPR4 ; get first <EXPR4> |
FFFFFFFFFFFFDAF0 XP31: |
FFFFFFFFFFFFDAF0 67E08008 sw r1,8[sp] ; yes, save that first result |
FFFFFFFFFFFFDAF4 E0C0002A setlo r3,#'*' |
FFFFFFFFFFFFDAF8 9A025B10 lea r4,XP34 |
FFFFFFFFFFFFDAFC 31FFF8F1 call TSTC ; multiply? |
FFFFFFFFFFFFDB00 31FFF6CF call EXPR4 ; get second <EXPR4> |
FFFFFFFFFFFFDB04 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDB08 04110419 muls r1,r1,r2 ; multiply the two |
FFFFFFFFFFFFDB0C BE007F2A bra XP31 ; then look for more terms |
FFFFFFFFFFFFDB10 XP34: |
FFFFFFFFFFFFDB10 E0C0002F setlo r3,#'/' |
FFFFFFFFFFFFDB14 9A025B30 lea r4,XP47 |
FFFFFFFFFFFFDB18 31FFF8F1 call TSTC ; divide? |
FFFFFFFFFFFFDB1C 31FFF6CF call EXPR4 ; get second <EXPR4> |
FFFFFFFFFFFFDB20 04100809 or r2,r1,r0 |
FFFFFFFFFFFFDB24 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFDB28 0411041B divs r1,r1,r2 ; do the division |
FFFFFFFFFFFFDB2C BE007E2A bra XP31 ; go back for any more terms |
FFFFFFFFFFFFDB30 XP47: |
FFFFFFFFFFFFDB30 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFDB34 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDB38 37EF8010 ret #16 |
FFFFFFFFFFFFEBEC EXPR3: |
FFFFFFFFFFFFEBEC 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEBF0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEBF4 31FFFB11 call EXPR4 ; get first <EXPR4> |
FFFFFFFFFFFFEBF8 XP31: |
FFFFFFFFFFFFEBF8 67E08008 sw r1,8[sp] ; yes, save that first result |
FFFFFFFFFFFFEBFC E0C0002A setlo r3,#'*' |
FFFFFFFFFFFFEC00 9A026C18 lea r4,XP34 |
FFFFFFFFFFFFEC04 31FFFD30 call TSTC ; multiply? |
FFFFFFFFFFFFEC08 31FFFB11 call EXPR4 ; get second <EXPR4> |
FFFFFFFFFFFFEC0C 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEC10 04110419 muls r1,r1,r2 ; multiply the two |
FFFFFFFFFFFFEC14 BE007F2A bra XP31 ; then look for more terms |
FFFFFFFFFFFFEC18 XP34: |
FFFFFFFFFFFFEC18 E0C0002F setlo r3,#'/' |
FFFFFFFFFFFFEC1C 9A026C38 lea r4,XP47 |
FFFFFFFFFFFFEC20 31FFFD30 call TSTC ; divide? |
FFFFFFFFFFFFEC24 31FFFB11 call EXPR4 ; get second <EXPR4> |
FFFFFFFFFFFFEC28 04100809 or r2,r1,r0 |
FFFFFFFFFFFFEC2C 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEC30 0411041B divs r1,r1,r2 ; do the division |
FFFFFFFFFFFFEC34 BE007E2A bra XP31 ; go back for any more terms |
FFFFFFFFFFFFEC38 XP47: |
FFFFFFFFFFFFEC38 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFEC3C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEC40 37EF8010 ret #16 |
|
|
; Functions are called through EXPR4 |
4172,45 → 5751,45
; <function> |
; (<EXPR>) |
|
FFFFFFFFFFFFDB3C EXPR4: |
FFFFFFFFFFFFDB3C 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFDB40 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDB44 9A04D042 lea r9,TAB4 ; find possible function |
FFFFFFFFFFFFDB48 9A055150 lea r10,TAB4_1 |
FFFFFFFFFFFFDB4C 33FFF486 jmp EXEC ; branch to function which does subsequent ret for EXPR4 |
FFFFFFFFFFFFDB50 XP40: ; we get here if it wasn't a function |
FFFFFFFFFFFFDB50 E0400000 setlo r1,#0 |
FFFFFFFFFFFFDB54 31FFF6EC call TSTV |
FFFFFFFFFFFFDB58 BE100088 beq r1,r0,XP41 ; nor a variable |
FFFFFFFFFFFFDB5C 46108000 lw r1,[r1] ; if a variable, return its value in r1 |
FFFFFFFFFFFFDB60 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDB64 37EF8018 ret #24 |
FFFFFFFFFFFFDB68 XP41: |
FFFFFFFFFFFFDB68 31FFF8FF call TSTNUM ; or is it a number? |
FFFFFFFFFFFFDB6C BE200049 bne r2,r0,XP46 ; (if not, # of digits will be zero) if so, return it in r1 |
FFFFFFFFFFFFDB70 31FFF6DF call PARN ; check for (EXPR) |
FFFFFFFFFFFFDB74 XP46: |
FFFFFFFFFFFFDB74 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDB78 37EF8018 ret #24 |
FFFFFFFFFFFFEC44 EXPR4: |
FFFFFFFFFFFFEC44 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFEC48 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEC4C 9A04E14E lea r9,TAB4 ; find possible function |
FFFFFFFFFFFFEC50 9A056258 lea r10,TAB4_1 |
FFFFFFFFFFFFEC54 33FFF8C8 jmp EXEC ; branch to function which does subsequent ret for EXPR4 |
FFFFFFFFFFFFEC58 XP40: ; we get here if it wasn't a function |
FFFFFFFFFFFFEC58 E0400000 setlo r1,#0 |
FFFFFFFFFFFFEC5C 31FFFB2E call TSTV |
FFFFFFFFFFFFEC60 BE100088 beq r1,r0,XP41 ; nor a variable |
FFFFFFFFFFFFEC64 46108000 lw r1,[r1] ; if a variable, return its value in r1 |
FFFFFFFFFFFFEC68 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEC6C 37EF8018 ret #24 |
FFFFFFFFFFFFEC70 XP41: |
FFFFFFFFFFFFEC70 31FFFD3E call TSTNUM ; or is it a number? |
FFFFFFFFFFFFEC74 BE200049 bne r2,r0,XP46 ; (if not, # of digits will be zero) if so, return it in r1 |
FFFFFFFFFFFFEC78 31FFFB21 call PARN ; check for (EXPR) |
FFFFFFFFFFFFEC7C XP46: |
FFFFFFFFFFFFEC7C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEC80 37EF8018 ret #24 |
|
|
; Check for a parenthesized expression |
FFFFFFFFFFFFDB7C PARN: |
FFFFFFFFFFFFDB7C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFDB80 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDB84 E0C00028 setlo r3,#'(' |
FFFFFFFFFFFFDB88 9A025BA8 lea r4,XP43 |
FFFFFFFFFFFFDB8C 31FFF8F1 call TSTC ; else look for ( OREXPR ) |
FFFFFFFFFFFFDB90 31FFF63A call OREXPR |
FFFFFFFFFFFFDB94 E0C00029 setlo r3,#')' |
FFFFFFFFFFFFDB98 9A025BA8 lea r4,XP43 |
FFFFFFFFFFFFDB9C 31FFF8F1 call TSTC |
FFFFFFFFFFFFDBA0 XP42: |
FFFFFFFFFFFFDBA0 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDBA4 37EF8008 ret #8 |
FFFFFFFFFFFFDBA8 XP43: |
FFFFFFFFFFFFDBA8 9A00E5FD lea r1,msgWhat |
FFFFFFFFFFFFDBAC BE001BAA bra ERROR |
FFFFFFFFFFFFEC84 PARN: |
FFFFFFFFFFFFEC84 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFEC88 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEC8C E0C00028 setlo r3,#'(' |
FFFFFFFFFFFFEC90 9A026CB0 lea r4,XP43 |
FFFFFFFFFFFFEC94 31FFFD30 call TSTC ; else look for ( OREXPR ) |
FFFFFFFFFFFFEC98 31FFFA7C call OREXPR |
FFFFFFFFFFFFEC9C E0C00029 setlo r3,#')' |
FFFFFFFFFFFFECA0 9A026CB0 lea r4,XP43 |
FFFFFFFFFFFFECA4 31FFFD30 call TSTC |
FFFFFFFFFFFFECA8 XP42: |
FFFFFFFFFFFFECA8 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFECAC 37EF8008 ret #8 |
FFFFFFFFFFFFECB0 XP43: |
FFFFFFFFFFFFECB0 9A00F6F5 lea r1,msgWhat |
FFFFFFFFFFFFECB4 BE001BAA bra ERROR |
|
|
; ===== Test for a valid variable name. Returns Z=1 if not |
4221,105 → 5800,105
; Returns |
; r1 = address of variable, zero if not found |
|
FFFFFFFFFFFFDBB0 TSTV: |
FFFFFFFFFFFFDBB0 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFDBB4 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDBB8 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFDBBC 04101409 or r5,r1,r0 ; allocate flag |
FFFFFFFFFFFFDBC0 31FFF914 call IGNBLK |
FFFFFFFFFFFFDBC4 4A808000 lbu r1,[r8] ; look at the program text |
FFFFFFFFFFFFDBC8 A0101740 blt r1,#'@',tstv_notfound ; C=1: not a variable |
FFFFFFFFFFFFDBCC B2100F40 bne r1,#'@',TV1 ; brnch if not "@" array |
FFFFFFFFFFFFDBD0 0A840001 addui r8,r8,#1 ; If it is, it should be |
FFFFFFFFFFFFDBD4 31FFF6DF call PARN ; followed by (EXPR) as its index. |
FFFFFFFFFFFFDBD8 06108600 shli r1,r1,#3 |
FFFFFFFFFFFFECB8 TSTV: |
FFFFFFFFFFFFECB8 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFECBC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFECC0 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFECC4 04101409 or r5,r1,r0 ; allocate flag |
FFFFFFFFFFFFECC8 31FFFD55 call IGNBLK |
FFFFFFFFFFFFECCC 4A808000 lbu r1,[r8] ; look at the program text |
FFFFFFFFFFFFECD0 A0101740 blt r1,#'@',tstv_notfound ; C=1: not a variable |
FFFFFFFFFFFFECD4 B2100F40 bne r1,#'@',TV1 ; brnch if not "@" array |
FFFFFFFFFFFFECD8 0A840001 addui r8,r8,#1 ; If it is, it should be |
FFFFFFFFFFFFECDC 31FFFB21 call PARN ; followed by (EXPR) as its index. |
FFFFFFFFFFFFECE0 06108600 shli r1,r1,#3 |
; BCS.L QHOW say "How?" if index is too big |
FFFFFFFFFFFFDBDC 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFDBE0 67E08008 sw r1,8[sp] ; save the index |
FFFFFFFFFFFFDBE4 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDBE8 31FFF793 call SIZEX ; get amount of free memory |
FFFFFFFFFFFFDBEC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDBF0 47E10008 lw r2,8[sp] ; get back the index |
FFFFFFFFFFFFDBF4 BE208044 bltu r2,r1,TV2 ; see if there's enough memory |
FFFFFFFFFFFFDBF8 33FFF7C5 jmp QSORRY ; if not, say "Sorry" |
FFFFFFFFFFFFDBFC TV2: |
FFFFFFFFFFFFDBFC 9A0090D8 lea r1,VARBGN ; put address of array element... |
FFFFFFFFFFFFDC00 04110405 subu r1,r1,r2 ; into r1 (neg. offset is used) |
FFFFFFFFFFFFDC04 BE0000AA bra TSTVRT |
FFFFFFFFFFFFDC08 TV1: |
FFFFFFFFFFFFDC08 31FFF70D call getVarName ; get variable name |
FFFFFFFFFFFFDC0C BE100068 beq r1,r0,TSTVRT ; if not, return r1=0 |
FFFFFFFFFFFFDC10 02510009 mov r2,r5 |
FFFFFFFFFFFFDC14 31FFF733 call findVar ; find or allocate |
FFFFFFFFFFFFDC18 TSTVRT: |
FFFFFFFFFFFFDC18 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFDC1C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDC20 37EF8018 ret #24 ; r1<>0 (found) |
FFFFFFFFFFFFDC24 tstv_notfound: |
FFFFFFFFFFFFDC24 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFDC28 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDC2C E0400000 setlo r1,#0 ; r1=0 if not found |
FFFFFFFFFFFFDC30 37EF8018 ret #24 |
FFFFFFFFFFFFECE4 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFECE8 67E08008 sw r1,8[sp] ; save the index |
FFFFFFFFFFFFECEC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFECF0 31FFFBD5 call SIZEX ; get amount of free memory |
FFFFFFFFFFFFECF4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFECF8 47E10008 lw r2,8[sp] ; get back the index |
FFFFFFFFFFFFECFC BE208044 bltu r2,r1,TV2 ; see if there's enough memory |
FFFFFFFFFFFFED00 33FFFC07 jmp QSORRY ; if not, say "Sorry" |
FFFFFFFFFFFFED04 TV2: |
FFFFFFFFFFFFED04 9A0090D8 lea r1,VARBGN ; put address of array element... |
FFFFFFFFFFFFED08 04110405 subu r1,r1,r2 ; into r1 (neg. offset is used) |
FFFFFFFFFFFFED0C BE0000AA bra TSTVRT |
FFFFFFFFFFFFED10 TV1: |
FFFFFFFFFFFFED10 31FFFB4F call getVarName ; get variable name |
FFFFFFFFFFFFED14 BE100068 beq r1,r0,TSTVRT ; if not, return r1=0 |
FFFFFFFFFFFFED18 02510009 mov r2,r5 |
FFFFFFFFFFFFED1C 31FFFB75 call findVar ; find or allocate |
FFFFFFFFFFFFED20 TSTVRT: |
FFFFFFFFFFFFED20 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFED24 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFED28 37EF8018 ret #24 ; r1<>0 (found) |
FFFFFFFFFFFFED2C tstv_notfound: |
FFFFFFFFFFFFED2C 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFED30 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFED34 E0400000 setlo r1,#0 ; r1=0 if not found |
FFFFFFFFFFFFED38 37EF8018 ret #24 |
|
|
; Returns |
; r1 = 6 character variable name + type |
; |
FFFFFFFFFFFFDC34 getVarName: |
FFFFFFFFFFFFDC34 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFDC38 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDC3C 67E28010 sw r5,16[sp] |
FFFFFFFFFFFFED3C getVarName: |
FFFFFFFFFFFFED3C 0FEF0018 subui sp,sp,#24 |
FFFFFFFFFFFFED40 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFED44 67E28010 sw r5,16[sp] |
|
FFFFFFFFFFFFDC40 40808000 lb r1,[r8] ; get first character |
FFFFFFFFFFFFDC44 67E08008 sw r1,8[sp] ; save off current name |
FFFFFFFFFFFFDC48 31FFF65C call isAlpha |
FFFFFFFFFFFFDC4C BE100388 beq r1,r0,gvn1 |
FFFFFFFFFFFFDC50 E1400005 setlo r5,#5 ; loop six more times |
FFFFFFFFFFFFED48 40808000 lb r1,[r8] ; get first character |
FFFFFFFFFFFFED4C 67E08008 sw r1,8[sp] ; save off current name |
FFFFFFFFFFFFED50 31FFFA9E call isAlpha |
FFFFFFFFFFFFED54 BE100388 beq r1,r0,gvn1 |
FFFFFFFFFFFFED58 E1400005 setlo r5,#5 ; loop six more times |
|
; check for second/third character |
FFFFFFFFFFFFDC54 gvn4: |
FFFFFFFFFFFFDC54 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFDC58 40808000 lb r1,[r8] ; do we have another char ? |
FFFFFFFFFFFFDC5C 31FFF664 call isAlnum |
FFFFFFFFFFFFDC60 BE100168 beq r1,r0,gvn2 ; nope |
FFFFFFFFFFFFDC64 47E08008 lw r1,8[sp] ; get varname |
FFFFFFFFFFFFDC68 06109000 shli r1,r1,#8 |
FFFFFFFFFFFFDC6C 40810000 lb r2,[r8] |
FFFFFFFFFFFFDC70 04110409 or r1,r1,r2 ; add in new char |
FFFFFFFFFFFFDC74 67E08008 sw r1,8[sp] ; save off name again |
FFFFFFFFFFFFDC78 BE02FEEF loop r5,gvn4 |
FFFFFFFFFFFFED5C gvn4: |
FFFFFFFFFFFFED5C 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFED60 40808000 lb r1,[r8] ; do we have another char ? |
FFFFFFFFFFFFED64 31FFFAA6 call isAlnum |
FFFFFFFFFFFFED68 BE100168 beq r1,r0,gvn2 ; nope |
FFFFFFFFFFFFED6C 47E08008 lw r1,8[sp] ; get varname |
FFFFFFFFFFFFED70 06109000 shli r1,r1,#8 |
FFFFFFFFFFFFED74 40810000 lb r2,[r8] |
FFFFFFFFFFFFED78 04110409 or r1,r1,r2 ; add in new char |
FFFFFFFFFFFFED7C 67E08008 sw r1,8[sp] ; save off name again |
FFFFFFFFFFFFED80 BE02FEEF loop r5,gvn4 |
|
; now ignore extra variable name characters |
FFFFFFFFFFFFDC7C gvn6: |
FFFFFFFFFFFFDC7C 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFDC80 40808000 lb r1,[r8] |
FFFFFFFFFFFFDC84 31FFF664 call isAlnum |
FFFFFFFFFFFFDC88 BE107FA9 bne r1,r0,gvn6 ; keep looping as long as we have identifier chars |
FFFFFFFFFFFFED84 gvn6: |
FFFFFFFFFFFFED84 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFED88 40808000 lb r1,[r8] |
FFFFFFFFFFFFED8C 31FFFAA6 call isAlnum |
FFFFFFFFFFFFED90 BE107FA9 bne r1,r0,gvn6 ; keep looping as long as we have identifier chars |
|
; check for a variable type |
FFFFFFFFFFFFDC8C gvn2: |
FFFFFFFFFFFFDC8C 40808000 lb r1,[r8] |
FFFFFFFFFFFFDC90 B0100425 beq r1,#'%',gvn3 |
FFFFFFFFFFFFDC94 B0100324 beq r1,#'$',gvn3 |
FFFFFFFFFFFFDC98 E0400000 setlo r1,#0 |
FFFFFFFFFFFFDC9C 0E840001 subui r8,r8,#1 |
FFFFFFFFFFFFED94 gvn2: |
FFFFFFFFFFFFED94 40808000 lb r1,[r8] |
FFFFFFFFFFFFED98 B0100425 beq r1,#'%',gvn3 |
FFFFFFFFFFFFED9C B0100324 beq r1,#'$',gvn3 |
FFFFFFFFFFFFEDA0 E0400000 setlo r1,#0 |
FFFFFFFFFFFFEDA4 0E840001 subui r8,r8,#1 |
|
; insert variable type indicator and return |
FFFFFFFFFFFFDCA0 gvn3: |
FFFFFFFFFFFFDCA0 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFDCA4 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFDCA8 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFDCAC 04110409 or r1,r1,r2 ; add in variable type |
FFFFFFFFFFFFDCB0 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDCB4 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFDCB8 37EF8018 ret #24 ; return Z = 0, r1 = varname |
FFFFFFFFFFFFEDA8 gvn3: |
FFFFFFFFFFFFEDA8 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFEDAC 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEDB0 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFEDB4 04110409 or r1,r1,r2 ; add in variable type |
FFFFFFFFFFFFEDB8 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEDBC 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFEDC0 37EF8018 ret #24 ; return Z = 0, r1 = varname |
|
; not a variable name |
FFFFFFFFFFFFDCBC gvn1: |
FFFFFFFFFFFFDCBC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDCC0 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFDCC4 E0400000 setlo r1,#0 ; return Z = 1 if not a varname |
FFFFFFFFFFFFDCC8 37EF8018 ret #24 |
FFFFFFFFFFFFEDC4 gvn1: |
FFFFFFFFFFFFEDC4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEDC8 47E28010 lw r5,16[sp] |
FFFFFFFFFFFFEDCC E0400000 setlo r1,#0 ; return Z = 1 if not a varname |
FFFFFFFFFFFFEDD0 37EF8018 ret #24 |
|
|
; Find variable |
4328,24 → 5907,24
; Returns |
; r1 = variable address, Z =0 if found / allocated, Z=1 if not found |
|
FFFFFFFFFFFFDCCC findVar: |
FFFFFFFFFFFFDCCC 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDCD0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDCD4 67E38008 sw r7,8[sp] |
FFFFFFFFFFFFDCD8 460190D8 lw r3,VARBGN |
FFFFFFFFFFFFDCDC fv4: |
FFFFFFFFFFFFDCDC 46338000 lw r7,[r3] ; get varname / type |
FFFFFFFFFFFFDCE0 BE700108 beq r7,r0,fv3 ; no more vars ? |
FFFFFFFFFFFFDCE4 BE138128 beq r1,r7,fv1 ; match ? |
FFFFFFFFFFFFDCE8 08318008 add r3,r3,#8 ; move to next var |
FFFFFFFFFFFFDCEC 460390F8 lw r7,STKBOT |
FFFFFFFFFFFFDCF0 BE33FF60 blt r3,r7,fv4 ; loop back to look at next var |
FFFFFFFFFFFFEDD4 findVar: |
FFFFFFFFFFFFEDD4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEDD8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEDDC 67E38008 sw r7,8[sp] |
FFFFFFFFFFFFEDE0 460190D8 lw r3,VARBGN |
FFFFFFFFFFFFEDE4 fv4: |
FFFFFFFFFFFFEDE4 46338000 lw r7,[r3] ; get varname / type |
FFFFFFFFFFFFEDE8 BE700108 beq r7,r0,fv3 ; no more vars ? |
FFFFFFFFFFFFEDEC BE138128 beq r1,r7,fv1 ; match ? |
FFFFFFFFFFFFEDF0 08318008 add r3,r3,#8 ; move to next var |
FFFFFFFFFFFFEDF4 460390F8 lw r7,STKBOT |
FFFFFFFFFFFFEDF8 BE33FF60 blt r3,r7,fv4 ; loop back to look at next var |
|
; variable not found |
; no more memory |
FFFFFFFFFFFFDCF4 E07FE650 setlo r1,#<msgVarSpace |
FFFFFFFFFFFFDCF8 F04FFFFF sethi r1,#>msgVarSpace |
FFFFFFFFFFFFDCFC BE00112A bra ERROR |
FFFFFFFFFFFFEDFC E07FF748 setlo r1,#<msgVarSpace |
FFFFFFFFFFFFEE00 F04FFFFF sethi r1,#>msgVarSpace |
FFFFFFFFFFFFEE04 BE00112A bra ERROR |
; lw lr,[sp] |
; lw r7,4[sp] |
; add sp,sp,#8 |
4354,24 → 5933,24
|
; variable not found |
; allocate new ? |
FFFFFFFFFFFFDD00 fv3: |
FFFFFFFFFFFFDD00 BE2000C8 beq r2,r0,fv2 |
FFFFFFFFFFFFDD04 66308000 sw r1,[r3] ; save varname / type |
FFFFFFFFFFFFEE08 fv3: |
FFFFFFFFFFFFEE08 BE2000C8 beq r2,r0,fv2 |
FFFFFFFFFFFFEE0C 66308000 sw r1,[r3] ; save varname / type |
; found variable |
; return address |
FFFFFFFFFFFFDD08 fv1: |
FFFFFFFFFFFFDD08 0A308008 addui r1,r3,#8 |
FFFFFFFFFFFFDD0C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDD10 47E38008 lw r7,8[sp] |
FFFFFFFFFFFFDD14 37EF8010 ret #16 ; Z = 0, r1 = address |
FFFFFFFFFFFFEE10 fv1: |
FFFFFFFFFFFFEE10 0A308008 addui r1,r3,#8 |
FFFFFFFFFFFFEE14 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEE18 47E38008 lw r7,8[sp] |
FFFFFFFFFFFFEE1C 37EF8010 ret #16 ; Z = 0, r1 = address |
|
; didn't find var and not allocating |
FFFFFFFFFFFFDD18 fv2: |
FFFFFFFFFFFFDD18 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDD1C 47E38008 lw r7,8[sp] |
FFFFFFFFFFFFDD20 0BEF0010 addui sp,sp,#16 ; Z = 0, r1 = address |
FFFFFFFFFFFFDD24 E0400000 setlo r1,#0 ; Z = 1, r1 = 0 |
FFFFFFFFFFFFDD28 37EF8000 ret |
FFFFFFFFFFFFEE20 fv2: |
FFFFFFFFFFFFEE20 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEE24 47E38008 lw r7,8[sp] |
FFFFFFFFFFFFEE28 0BEF0010 addui sp,sp,#16 ; Z = 0, r1 = address |
FFFFFFFFFFFFEE2C E0400000 setlo r1,#0 ; Z = 1, r1 = 0 |
FFFFFFFFFFFFEE30 37EF8000 ret |
|
|
; ===== Multiplies the 32 bit values in r1 and r2, returning |
4397,76 → 5976,76
; ===== The PEEK function returns the byte stored at the address |
; contained in the following expression. |
; |
FFFFFFFFFFFFDD2C PEEK: |
FFFFFFFFFFFFDD2C 31FFF6DF call PARN ; get the memory address |
FFFFFFFFFFFFDD30 4A108000 lbu r1,[r1] ; get the addressed byte |
FFFFFFFFFFFFDD34 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFDD38 37EF8018 ret #24 |
FFFFFFFFFFFFEE34 PEEK: |
FFFFFFFFFFFFEE34 31FFFB21 call PARN ; get the memory address |
FFFFFFFFFFFFEE38 4A108000 lbu r1,[r1] ; get the addressed byte |
FFFFFFFFFFFFEE3C 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFEE40 37EF8018 ret #24 |
|
; ===== The PEEK function returns the byte stored at the address |
; contained in the following expression. |
; |
FFFFFFFFFFFFDD3C PEEKC: |
FFFFFFFFFFFFDD3C 31FFF6DF call PARN ; get the memory address |
FFFFFFFFFFFFDD40 1410FFFE andi r1,r1,#-2 ; align to char address |
FFFFFFFFFFFFDD44 4C108000 lcu r1,[r1] ; get the addressed char |
FFFFFFFFFFFFDD48 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFDD4C 37EF8018 ret #24 |
FFFFFFFFFFFFEE44 PEEKC: |
FFFFFFFFFFFFEE44 31FFFB21 call PARN ; get the memory address |
FFFFFFFFFFFFEE48 1410FFFE andi r1,r1,#-2 ; align to char address |
FFFFFFFFFFFFEE4C 4C108000 lcu r1,[r1] ; get the addressed char |
FFFFFFFFFFFFEE50 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFEE54 37EF8018 ret #24 |
|
; ===== The PEEK function returns the byte stored at the address |
; contained in the following expression. |
; |
FFFFFFFFFFFFDD50 PEEKH: |
FFFFFFFFFFFFDD50 31FFF6DF call PARN ; get the memory address |
FFFFFFFFFFFFDD54 1410FFFC andi r1,r1,#-4 ; align to half-word address |
FFFFFFFFFFFFDD58 4E108000 lhu r1,[r1] ; get the addressed char |
FFFFFFFFFFFFDD5C 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFDD60 37EF8018 ret #24 |
FFFFFFFFFFFFEE58 PEEKH: |
FFFFFFFFFFFFEE58 31FFFB21 call PARN ; get the memory address |
FFFFFFFFFFFFEE5C 1410FFFC andi r1,r1,#-4 ; align to half-word address |
FFFFFFFFFFFFEE60 4E108000 lhu r1,[r1] ; get the addressed char |
FFFFFFFFFFFFEE64 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFEE68 37EF8018 ret #24 |
|
; ===== The PEEK function returns the byte stored at the address |
; contained in the following expression. |
; |
FFFFFFFFFFFFDD64 PEEKW: |
FFFFFFFFFFFFDD64 31FFF6DF call PARN ; get the memory address |
FFFFFFFFFFFFDD68 1410FFF8 andi r1,r1,#-8 ; align to word address |
FFFFFFFFFFFFDD6C 46108000 lw r1,[r1] ; get the addressed word |
FFFFFFFFFFFFDD70 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFDD74 37EF8018 ret #24 |
FFFFFFFFFFFFEE6C PEEKW: |
FFFFFFFFFFFFEE6C 31FFFB21 call PARN ; get the memory address |
FFFFFFFFFFFFEE70 1410FFF8 andi r1,r1,#-8 ; align to word address |
FFFFFFFFFFFFEE74 46108000 lw r1,[r1] ; get the addressed word |
FFFFFFFFFFFFEE78 47EF8000 lw lr,[sp] ; and return it |
FFFFFFFFFFFFEE7C 37EF8018 ret #24 |
|
; user function call |
; call the user function with argument in r1 |
FFFFFFFFFFFFDD78 USRX: |
FFFFFFFFFFFFDD78 31FFF6DF call PARN ; get expression value |
FFFFFFFFFFFFDD7C 67E40008 sw r8,8[sp] ; save the text pointer |
FFFFFFFFFFFFDD80 46011028 lw r2,usrJmp ; get usr vector |
FFFFFFFFFFFFDD84 342F8000 jal r31,[r2] ; jump to the subroutine |
FFFFFFFFFFFFDD88 47E40008 lw r8,8[sp] ; restore the text pointer |
FFFFFFFFFFFFDD8C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDD90 37EF8018 ret #24 |
FFFFFFFFFFFFEE80 USRX: |
FFFFFFFFFFFFEE80 31FFFB21 call PARN ; get expression value |
FFFFFFFFFFFFEE84 67E40008 sw r8,8[sp] ; save the text pointer |
FFFFFFFFFFFFEE88 46011028 lw r2,usrJmp ; get usr vector |
FFFFFFFFFFFFEE8C 342F8000 jal r31,[r2] ; jump to the subroutine |
FFFFFFFFFFFFEE90 47E40008 lw r8,8[sp] ; restore the text pointer |
FFFFFFFFFFFFEE94 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEE98 37EF8018 ret #24 |
|
|
; ===== The RND function returns a random number from 1 to |
; the value of the following expression in D0. |
; |
FFFFFFFFFFFFDD94 RND: |
FFFFFFFFFFFFDD94 31FFF6DF call PARN ; get the upper limit |
FFFFFFFFFFFFDD98 BE100168 beq r1,r0,rnd2 ; it must be positive and non-zero |
FFFFFFFFFFFFDD9C BE100100 blt r1,r0,rnd1 |
FFFFFFFFFFFFDDA0 04100809 lw r2,r1 |
FFFFFFFFFFFFDDA4 00000050 gran ; generate a random number |
FFFFFFFFFFFFDDA8 020088A8 mfspr r1,rand ; get the number |
FFFFFFFFFFFFDDAC 31FFF775 call modu4 ; RND(n)=MOD(number,n)+1 |
FFFFFFFFFFFFDDB0 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFDDB4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDDB8 37EF8018 ret #24 |
FFFFFFFFFFFFDDBC rnd1: |
FFFFFFFFFFFFDDBC 9A00E6C1 lea r1,msgRNDBad |
FFFFFFFFFFFFDDC0 BE000B0A bra ERROR |
FFFFFFFFFFFFDDC4 rnd2: |
FFFFFFFFFFFFDDC4 00000050 gran |
FFFFFFFFFFFFDDC8 020088A8 mfspr r1,rand |
FFFFFFFFFFFFDDCC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDDD0 37EF8018 ret #24 |
FFFFFFFFFFFFEE9C RND: |
FFFFFFFFFFFFEE9C 31FFFB21 call PARN ; get the upper limit |
FFFFFFFFFFFFEEA0 BE100168 beq r1,r0,rnd2 ; it must be positive and non-zero |
FFFFFFFFFFFFEEA4 BE100100 blt r1,r0,rnd1 |
FFFFFFFFFFFFEEA8 04100809 lw r2,r1 |
FFFFFFFFFFFFEEAC 00000050 gran ; generate a random number |
FFFFFFFFFFFFEEB0 020088A8 mfspr r1,rand ; get the number |
FFFFFFFFFFFFEEB4 31FFFBB7 call modu4 ; RND(n)=MOD(number,n)+1 |
FFFFFFFFFFFFEEB8 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFEEBC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEEC0 37EF8018 ret #24 |
FFFFFFFFFFFFEEC4 rnd1: |
FFFFFFFFFFFFEEC4 9A00F7B9 lea r1,msgRNDBad |
FFFFFFFFFFFFEEC8 BE000B0A bra ERROR |
FFFFFFFFFFFFEECC rnd2: |
FFFFFFFFFFFFEECC 00000050 gran |
FFFFFFFFFFFFEED0 020088A8 mfspr r1,rand |
FFFFFFFFFFFFEED4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEED8 37EF8018 ret #24 |
|
|
; r = a mod b |
4473,57 → 6052,57
; a = r1 |
; b = r2 |
; r = r6 |
FFFFFFFFFFFFDDD4 modu4: |
FFFFFFFFFFFFDDD4 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFDDD8 67E18000 sw r3,[sp] |
FFFFFFFFFFFFDDDC 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFDDE0 67E30010 sw r6,16[sp] |
FFFFFFFFFFFFDDE4 67E38018 sw r7,24[sp] |
FFFFFFFFFFFFDDE8 1603803F lw r7,#63 ; n = 64 |
FFFFFFFFFFFFDDEC 0452940A xor r5,r5,r5 ; w = 0 |
FFFFFFFFFFFFDDF0 0463180A xor r6,r6,r6 ; r = 0 |
FFFFFFFFFFFFDDF4 mod2: |
FFFFFFFFFFFFDDF4 06108202 roli r1,r1,#1 ; a <<= 1 |
FFFFFFFFFFFFDDF8 14118001 andi r3,r1,#1 |
FFFFFFFFFFFFDDFC 06630200 shli r6,r6,#1 ; r <<= 1 |
FFFFFFFFFFFFDE00 04619809 or r6,r6,r3 |
FFFFFFFFFFFFDE04 1410FFFE andi r1,r1,#-2 |
FFFFFFFFFFFFDE08 BE230047 bgtu r2,r6,mod1 ; b < r ? |
FFFFFFFFFFFFDE0C 04611805 subu r6,r6,r2 ; r -= b |
FFFFFFFFFFFFDE10 mod1: |
FFFFFFFFFFFFDE10 BE03FF2F loop r7,mod2 ; n-- |
FFFFFFFFFFFFDE14 02608009 mov r1,r6 |
FFFFFFFFFFFFDE18 47E18000 lw r3,[sp] |
FFFFFFFFFFFFDE1C 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFDE20 47E30010 lw r6,16[sp] |
FFFFFFFFFFFFDE24 47E38018 lw r7,24[sp] |
FFFFFFFFFFFFDE28 37EF8020 ret #32 |
FFFFFFFFFFFFEEDC modu4: |
FFFFFFFFFFFFEEDC 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFEEE0 67E18000 sw r3,[sp] |
FFFFFFFFFFFFEEE4 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFEEE8 67E30010 sw r6,16[sp] |
FFFFFFFFFFFFEEEC 67E38018 sw r7,24[sp] |
FFFFFFFFFFFFEEF0 1603803F lw r7,#63 ; n = 64 |
FFFFFFFFFFFFEEF4 0452940A xor r5,r5,r5 ; w = 0 |
FFFFFFFFFFFFEEF8 0463180A xor r6,r6,r6 ; r = 0 |
FFFFFFFFFFFFEEFC mod2: |
FFFFFFFFFFFFEEFC 06108202 roli r1,r1,#1 ; a <<= 1 |
FFFFFFFFFFFFEF00 14118001 andi r3,r1,#1 |
FFFFFFFFFFFFEF04 06630200 shli r6,r6,#1 ; r <<= 1 |
FFFFFFFFFFFFEF08 04619809 or r6,r6,r3 |
FFFFFFFFFFFFEF0C 1410FFFE andi r1,r1,#-2 |
FFFFFFFFFFFFEF10 BE230047 bgtu r2,r6,mod1 ; b < r ? |
FFFFFFFFFFFFEF14 04611805 subu r6,r6,r2 ; r -= b |
FFFFFFFFFFFFEF18 mod1: |
FFFFFFFFFFFFEF18 BE03FF2F loop r7,mod2 ; n-- |
FFFFFFFFFFFFEF1C 02608009 mov r1,r6 |
FFFFFFFFFFFFEF20 47E18000 lw r3,[sp] |
FFFFFFFFFFFFEF24 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFEF28 47E30010 lw r6,16[sp] |
FFFFFFFFFFFFEF2C 47E38018 lw r7,24[sp] |
FFFFFFFFFFFFEF30 37EF8020 ret #32 |
|
|
; ===== The ABS function returns an absolute value in r2. |
; |
FFFFFFFFFFFFDE2C ABS: |
FFFFFFFFFFFFDE2C 31FFF6DF call PARN ; get the following expr.'s value |
FFFFFFFFFFFFDE30 02108007 abs r1,r1 |
FFFFFFFFFFFFDE34 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDE38 37EF8018 ret #24 |
FFFFFFFFFFFFEF34 ABS: |
FFFFFFFFFFFFEF34 31FFFB21 call PARN ; get the following expr.'s value |
FFFFFFFFFFFFEF38 02108007 abs r1,r1 |
FFFFFFFFFFFFEF3C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEF40 37EF8018 ret #24 |
|
; ===== The SGN function returns the sign in r1. +1,0, or -1 |
; |
FFFFFFFFFFFFDE3C SGN: |
FFFFFFFFFFFFDE3C 31FFF6DF call PARN ; get the following expr.'s value |
FFFFFFFFFFFFDE40 02108008 sgn r1,r1 |
FFFFFFFFFFFFDE44 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDE48 37EF8018 ret #24 |
FFFFFFFFFFFFEF44 SGN: |
FFFFFFFFFFFFEF44 31FFFB21 call PARN ; get the following expr.'s value |
FFFFFFFFFFFFEF48 02108008 sgn r1,r1 |
FFFFFFFFFFFFEF4C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEF50 37EF8018 ret #24 |
|
; ===== The SIZE function returns the size of free memory in r1. |
; |
FFFFFFFFFFFFDE4C SIZEX: |
FFFFFFFFFFFFDE4C 460090D8 lw r1,VARBGN ; get the number of free bytes... |
FFFFFFFFFFFFDE50 460110D0 lw r2,TXTUNF ; between 'TXTUNF' and 'VARBGN' |
FFFFFFFFFFFFDE54 04110405 subu r1,r1,r2 |
FFFFFFFFFFFFDE58 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDE5C 37EF8018 ret #24 ; return the number in r2 |
FFFFFFFFFFFFEF54 SIZEX: |
FFFFFFFFFFFFEF54 460090D8 lw r1,VARBGN ; get the number of free bytes... |
FFFFFFFFFFFFEF58 460110D0 lw r2,TXTUNF ; between 'TXTUNF' and 'VARBGN' |
FFFFFFFFFFFFEF5C 04110405 subu r1,r1,r2 |
FFFFFFFFFFFFEF60 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEF64 37EF8018 ret #24 ; return the number in r2 |
|
|
;****************************************************************** |
4560,47 → 6139,47
; returns |
; r2 = variable's address |
; |
FFFFFFFFFFFFDE60 SETVAL: |
FFFFFFFFFFFFDE60 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDE64 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDE68 E0400001 setlo r1,#1 ; allocate var |
FFFFFFFFFFFFDE6C 31FFF6EC call TSTV ; variable name? |
FFFFFFFFFFFFDE70 BE100069 bne r1,r0,sv2 |
FFFFFFFFFFFFDE74 9A00E6AA lea r1,msgVar |
FFFFFFFFFFFFDE78 BE00054A bra ERROR |
FFFFFFFFFFFFDE7C sv2: |
FFFFFFFFFFFFDE7C 67E08008 sw r1,8[sp] ; save the variable's address |
FFFFFFFFFFFFDE80 E0C0003D setlo r3,#'=' |
FFFFFFFFFFFFDE84 9A025EA4 lea r4,SV1 |
FFFFFFFFFFFFDE88 31FFF8F1 call TSTC ; get past the "=" sign |
FFFFFFFFFFFFDE8C 31FFF63A call OREXPR ; evaluate the expression |
FFFFFFFFFFFFDE90 47E10008 lw r2,8[sp] ; get back the variable's address |
FFFFFFFFFFFFDE94 66208000 sw r1,[r2] ; and save value in the variable |
FFFFFFFFFFFFDE98 04200409 lw r1,r2 ; return r1 = variable address |
FFFFFFFFFFFFDE9C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDEA0 37EF8010 ret #16 |
FFFFFFFFFFFFDEA4 SV1: |
FFFFFFFFFFFFDEA4 BE0003CA bra QWHAT ; if no "=" sign |
FFFFFFFFFFFFEF68 SETVAL: |
FFFFFFFFFFFFEF68 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFEF6C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEF70 E0400001 setlo r1,#1 ; allocate var |
FFFFFFFFFFFFEF74 31FFFB2E call TSTV ; variable name? |
FFFFFFFFFFFFEF78 BE100069 bne r1,r0,sv2 |
FFFFFFFFFFFFEF7C 9A00F7A2 lea r1,msgVar |
FFFFFFFFFFFFEF80 BE00054A bra ERROR |
FFFFFFFFFFFFEF84 sv2: |
FFFFFFFFFFFFEF84 67E08008 sw r1,8[sp] ; save the variable's address |
FFFFFFFFFFFFEF88 E0C0003D setlo r3,#'=' |
FFFFFFFFFFFFEF8C 9A026FAC lea r4,SV1 |
FFFFFFFFFFFFEF90 31FFFD30 call TSTC ; get past the "=" sign |
FFFFFFFFFFFFEF94 31FFFA7C call OREXPR ; evaluate the expression |
FFFFFFFFFFFFEF98 47E10008 lw r2,8[sp] ; get back the variable's address |
FFFFFFFFFFFFEF9C 66208000 sw r1,[r2] ; and save value in the variable |
FFFFFFFFFFFFEFA0 04200409 lw r1,r2 ; return r1 = variable address |
FFFFFFFFFFFFEFA4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFEFA8 37EF8010 ret #16 |
FFFFFFFFFFFFEFAC SV1: |
FFFFFFFFFFFFEFAC BE0003CA bra QWHAT ; if no "=" sign |
|
|
FFFFFFFFFFFFDEA8 FIN: |
FFFFFFFFFFFFDEA8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFDEAC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDEB0 E0C0003A setlo r3,#':' |
FFFFFFFFFFFFDEB4 9A025EC4 lea r4,FI1 |
FFFFFFFFFFFFDEB8 31FFF8F1 call TSTC ; *** FIN *** |
FFFFFFFFFFFFDEBC 0BEF0008 addui sp,sp,#8 ; if ":", discard return address |
FFFFFFFFFFFFDEC0 BE0020AA bra RUNSML ; continue on the same line |
FFFFFFFFFFFFDEC4 FI1: |
FFFFFFFFFFFFDEC4 E0C0000D setlo r3,#CR |
FFFFFFFFFFFFDEC8 9A025EDC lea r4,FI2 |
FFFFFFFFFFFFDECC 31FFF8F1 call TSTC ; not ":", is it a CR? |
FFFFFFFFFFFFDED0 47EF8000 lw lr,[sp] ; else return to the caller |
FFFFFFFFFFFFDED4 0BEF0008 addui sp,sp,#8 ; yes, purge return address |
FFFFFFFFFFFFDED8 BE001EAA bra RUNNXL ; execute the next line |
FFFFFFFFFFFFDEDC FI2: |
FFFFFFFFFFFFDEDC 47EF8000 lw lr,[sp] ; else return to the caller |
FFFFFFFFFFFFDEE0 37EF8008 ret #8 |
FFFFFFFFFFFFEFB0 FIN: |
FFFFFFFFFFFFEFB0 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFEFB4 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEFB8 E0C0003A setlo r3,#':' |
FFFFFFFFFFFFEFBC 9A026FCC lea r4,FI1 |
FFFFFFFFFFFFEFC0 31FFFD30 call TSTC ; *** FIN *** |
FFFFFFFFFFFFEFC4 0BEF0008 addui sp,sp,#8 ; if ":", discard return address |
FFFFFFFFFFFFEFC8 BE0020AA bra RUNSML ; continue on the same line |
FFFFFFFFFFFFEFCC FI1: |
FFFFFFFFFFFFEFCC E0C0000D setlo r3,#CR |
FFFFFFFFFFFFEFD0 9A026FE4 lea r4,FI2 |
FFFFFFFFFFFFEFD4 31FFFD30 call TSTC ; not ":", is it a CR? |
FFFFFFFFFFFFEFD8 47EF8000 lw lr,[sp] ; else return to the caller |
FFFFFFFFFFFFEFDC 0BEF0008 addui sp,sp,#8 ; yes, purge return address |
FFFFFFFFFFFFEFE0 BE001EAA bra RUNNXL ; execute the next line |
FFFFFFFFFFFFEFE4 FI2: |
FFFFFFFFFFFFEFE4 47EF8000 lw lr,[sp] ; else return to the caller |
FFFFFFFFFFFFEFE8 37EF8008 ret #8 |
|
|
; Check that there is nothing else on the line |
4607,45 → 6186,45
; Registers Affected |
; r1 |
; |
FFFFFFFFFFFFDEE4 ENDCHK: |
FFFFFFFFFFFFDEE4 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFDEE8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDEEC 31FFF914 call IGNBLK |
FFFFFFFFFFFFDEF0 40808000 lb r1,[r8] |
FFFFFFFFFFFFDEF4 B010040D beq r1,#CR,ec1 ; does it end with a CR? |
FFFFFFFFFFFFDEF8 E07FE784 setlo r1,#<msgExtraChars |
FFFFFFFFFFFFDEFC F04FFFFF sethi r1,#>msgExtraChars |
FFFFFFFFFFFFDF00 33FFF7C8 jmp ERROR |
FFFFFFFFFFFFDF04 ec1: |
FFFFFFFFFFFFDF04 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFDF08 37EF8008 ret #8 |
FFFFFFFFFFFFEFEC ENDCHK: |
FFFFFFFFFFFFEFEC 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFEFF0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFEFF4 31FFFD55 call IGNBLK |
FFFFFFFFFFFFEFF8 40808000 lb r1,[r8] |
FFFFFFFFFFFFEFFC B010040D beq r1,#CR,ec1 ; does it end with a CR? |
FFFFFFFFFFFFF000 E07FF87C setlo r1,#<msgExtraChars |
FFFFFFFFFFFFF004 F04FFFFF sethi r1,#>msgExtraChars |
FFFFFFFFFFFFF008 33FFFC0A jmp ERROR |
FFFFFFFFFFFFF00C ec1: |
FFFFFFFFFFFFF00C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF010 37EF8008 ret #8 |
|
|
FFFFFFFFFFFFDF0C TOOBIG: |
FFFFFFFFFFFFDF0C 9A00E76F lea r1,msgTooBig |
FFFFFFFFFFFFDF10 BE00008A bra ERROR |
FFFFFFFFFFFFDF14 QSORRY: |
FFFFFFFFFFFFDF14 9A00E605 lea r1,SRYMSG |
FFFFFFFFFFFFDF18 BE00004A bra ERROR |
FFFFFFFFFFFFDF1C QWHAT: |
FFFFFFFFFFFFDF1C 9A00E5FD lea r1,msgWhat |
FFFFFFFFFFFFDF20 ERROR: |
FFFFFFFFFFFFDF20 31FFF940 call PRMESG ; display the error message |
FFFFFFFFFFFFDF24 46009090 lw r1,CURRNT ; get the current line number |
FFFFFFFFFFFFDF28 BE107E88 beq r1,r0,WSTART ; if zero, do a warm start |
FFFFFFFFFFFFDF2C B01D9AFF beq r1,#-1,INPERR ; is the line no. pointer = -1? if so, redo input |
FFFFFFFFFFFFDF30 40828000 lb r5,[r8] ; save the char. pointed to |
FFFFFFFFFFFFDF34 60800000 sb r0,[r8] ; put a zero where the error is |
FFFFFFFFFFFFDF38 46009090 lw r1,CURRNT ; point to start of current line |
FFFFFFFFFFFFDF3C 31FFF8DF call PRTLN ; display the line in error up to the 0 |
FFFFFFFFFFFFDF40 04101809 or r6,r1,r0 ; save off end pointer |
FFFFFFFFFFFFDF44 60828000 sb r5,[r8] ; restore the character |
FFFFFFFFFFFFDF48 E040003F setlo r1,#'?' ; display a "?" |
FFFFFFFFFFFFDF4C 31FFF393 call GOOUT |
FFFFFFFFFFFFDF50 E0800000 setlo r2,#0 ; stop char = 0 |
FFFFFFFFFFFFDF54 0E608001 subui r1,r6,#1 ; point back to the error char. |
FFFFFFFFFFFFDF58 31FFF851 call PRTSTG ; display the rest of the line |
FFFFFFFFFFFFDF5C 33FFF3BE jmp WSTART ; and do a warm start |
FFFFFFFFFFFFF014 TOOBIG: |
FFFFFFFFFFFFF014 9A00F867 lea r1,msgTooBig |
FFFFFFFFFFFFF018 BE00008A bra ERROR |
FFFFFFFFFFFFF01C QSORRY: |
FFFFFFFFFFFFF01C 9A00F6FD lea r1,SRYMSG |
FFFFFFFFFFFFF020 BE00004A bra ERROR |
FFFFFFFFFFFFF024 QWHAT: |
FFFFFFFFFFFFF024 9A00F6F5 lea r1,msgWhat |
FFFFFFFFFFFFF028 ERROR: |
FFFFFFFFFFFFF028 31FFFD81 call PRMESG ; display the error message |
FFFFFFFFFFFFF02C 46009090 lw r1,CURRNT ; get the current line number |
FFFFFFFFFFFFF030 BE107EA8 beq r1,r0,WSTART ; if zero, do a warm start |
FFFFFFFFFFFFF034 B01D9AFF beq r1,#-1,INPERR ; is the line no. pointer = -1? if so, redo input |
FFFFFFFFFFFFF038 40828000 lb r5,[r8] ; save the char. pointed to |
FFFFFFFFFFFFF03C 60800000 sb r0,[r8] ; put a zero where the error is |
FFFFFFFFFFFFF040 46009090 lw r1,CURRNT ; point to start of current line |
FFFFFFFFFFFFF044 31FFFD1E call PRTLN ; display the line in error up to the 0 |
FFFFFFFFFFFFF048 04101809 or r6,r1,r0 ; save off end pointer |
FFFFFFFFFFFFF04C 60828000 sb r5,[r8] ; restore the character |
FFFFFFFFFFFFF050 E040003F setlo r1,#'?' ; display a "?" |
FFFFFFFFFFFFF054 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF058 E0800000 setlo r2,#0 ; stop char = 0 |
FFFFFFFFFFFFF05C 0E608001 subui r1,r6,#1 ; point back to the error char. |
FFFFFFFFFFFFF060 31FFFC93 call PRTSTG ; display the rest of the line |
FFFFFFFFFFFFF064 33FFF801 jmp WSTART ; and do a warm start |
|
;****************************************************************** |
; |
4660,66 → 6239,66
; and causes 'GETLN' to return. |
; |
; |
FFFFFFFFFFFFDF60 GETLN: |
FFFFFFFFFFFFDF60 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFDF64 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFDF68 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFDF6C 31FFF393 call GOOUT ; display the prompt |
FFFFFFFFFFFFDF70 E0400001 setlo r1,#1 ; turn on cursor flash |
FFFFFFFFFFFFDF74 60009046 sb r1,cursFlash |
FFFFFFFFFFFFDF78 E0400020 setlo r1,#' ' ; and a space |
FFFFFFFFFFFFDF7C 31FFF393 call GOOUT |
FFFFFFFFFFFFDF80 E200111B setlo r8,#<BUFFER ; r8 is the buffer pointer |
FFFFFFFFFFFFDF84 F2000000 sethi r8,#>BUFFER |
FFFFFFFFFFFFDF88 GL1: |
FFFFFFFFFFFFDF88 31FFF936 call CHKIO ; check keyboard |
FFFFFFFFFFFFDF8C BE107FE8 beq r1,r0,GL1 ; wait for a char. to come in |
FFFFFFFFFFFFDF90 B0100B08 beq r1,#CTRLH,GL3 ; delete last character? if so |
FFFFFFFFFFFFDF94 B0101418 beq r1,#CTRLX,GL4 ; delete the whole line? |
FFFFFFFFFFFFDF98 B010020D beq r1,#CR,GL2 ; accept a CR |
FFFFFFFFFFFFDF9C A81FFB20 bltu r1,#' ',GL1 ; if other control char., discard it |
FFFFFFFFFFFFDFA0 GL2: |
FFFFFFFFFFFFDFA0 60808000 sb r1,[r8] ; save the char. |
FFFFFFFFFFFFDFA4 08840001 add r8,r8,#1 |
FFFFFFFFFFFFDFA8 31FFF393 call GOOUT ; echo the char back out |
FFFFFFFFFFFFDFAC 4080FFFF lb r1,-1[r8] ; get char back (GOOUT destroys r1) |
FFFFFFFFFFFFDFB0 B010190D beq r1,#CR,GL7 ; if it's a CR, end the line |
FFFFFFFFFFFFDFB4 1280916A cmpui r1,r8,#BUFFER+BUFLEN-1 ; any more room? |
FFFFFFFFFFFFDFB8 BE107E80 blt r1,r0,GL1 ; yes: get some more, else delete last char. |
FFFFFFFFFFFFDFBC GL3: |
FFFFFFFFFFFFDFBC E0400008 setlo r1,#CTRLH ; delete a char. if possible |
FFFFFFFFFFFFDFC0 31FFF393 call GOOUT |
FFFFFFFFFFFFDFC4 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFDFC8 31FFF393 call GOOUT |
FFFFFFFFFFFFDFCC 1280911B cmpui r1,r8,#BUFFER ; any char.'s left? |
FFFFFFFFFFFFDFD0 BE107DC2 ble r1,r0,GL1 ; if not |
FFFFFFFFFFFFDFD4 E0400008 setlo r1,#CTRLH ; if so, finish the BS-space-BS sequence |
FFFFFFFFFFFFDFD8 31FFF393 call GOOUT |
FFFFFFFFFFFFDFDC 0C840001 sub r8,r8,#1 ; decrement the text pointer |
FFFFFFFFFFFFDFE0 BE007D4A bra GL1 ; back for more |
FFFFFFFFFFFFDFE4 GL4: |
FFFFFFFFFFFFDFE4 04800409 or r1,r8,r0 ; delete the whole line |
FFFFFFFFFFFFDFE8 0E12911B subui r5,r1,#BUFFER ; figure out how many backspaces we need |
FFFFFFFFFFFFDFEC BE500108 beq r5,r0,GL6 ; if none needed, brnch |
FFFFFFFFFFFFDFF0 GL5: |
FFFFFFFFFFFFDFF0 E0400008 setlo r1,#CTRLH ; and display BS-space-BS sequences |
FFFFFFFFFFFFDFF4 31FFF393 call GOOUT |
FFFFFFFFFFFFDFF8 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFDFFC 31FFF393 call GOOUT |
FFFFFFFFFFFFE000 E0400008 setlo r1,#CTRLH |
FFFFFFFFFFFFE004 31FFF393 call GOOUT |
FFFFFFFFFFFFE008 BE02FF4F loop r5,GL5 |
FFFFFFFFFFFFE00C GL6: |
FFFFFFFFFFFFE00C 9A04111B lea r8,BUFFER ; reinitialize the text pointer |
FFFFFFFFFFFFE010 BE007BCA bra GL1 ; and go back for more |
FFFFFFFFFFFFE014 GL7: |
FFFFFFFFFFFFE014 E0400000 setlo r1,#0 ; turn off cursor flash |
FFFFFFFFFFFFE018 60009046 sb r1,cursFlash |
FFFFFFFFFFFFE01C E040000A setlo r1,#LF ; echo a LF for the CR |
FFFFFFFFFFFFE020 31FFF393 call GOOUT |
FFFFFFFFFFFFE024 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE028 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFE02C 37EF8010 ret #16 |
FFFFFFFFFFFFF068 GETLN: |
FFFFFFFFFFFFF068 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFF06C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF070 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFF074 31FFF7D5 call GOOUT ; display the prompt |
FFFFFFFFFFFFF078 E0400001 setlo r1,#1 ; turn on cursor flash |
FFFFFFFFFFFFF07C 60009052 sb r1,cursFlash |
FFFFFFFFFFFFF080 E0400020 setlo r1,#' ' ; and a space |
FFFFFFFFFFFFF084 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF088 E200111B setlo r8,#<BUFFER ; r8 is the buffer pointer |
FFFFFFFFFFFFF08C F2000000 sethi r8,#>BUFFER |
FFFFFFFFFFFFF090 GL1: |
FFFFFFFFFFFFF090 31FFFD77 call CHKIO ; check keyboard |
FFFFFFFFFFFFF094 BE107FE8 beq r1,r0,GL1 ; wait for a char. to come in |
FFFFFFFFFFFFF098 B0100B08 beq r1,#CTRLH,GL3 ; delete last character? if so |
FFFFFFFFFFFFF09C B0101418 beq r1,#CTRLX,GL4 ; delete the whole line? |
FFFFFFFFFFFFF0A0 B010020D beq r1,#CR,GL2 ; accept a CR |
FFFFFFFFFFFFF0A4 A81FFB20 bltu r1,#' ',GL1 ; if other control char., discard it |
FFFFFFFFFFFFF0A8 GL2: |
FFFFFFFFFFFFF0A8 60808000 sb r1,[r8] ; save the char. |
FFFFFFFFFFFFF0AC 08840001 add r8,r8,#1 |
FFFFFFFFFFFFF0B0 31FFF7D5 call GOOUT ; echo the char back out |
FFFFFFFFFFFFF0B4 4080FFFF lb r1,-1[r8] ; get char back (GOOUT destroys r1) |
FFFFFFFFFFFFF0B8 B010190D beq r1,#CR,GL7 ; if it's a CR, end the line |
FFFFFFFFFFFFF0BC 1280916A cmpui r1,r8,#BUFFER+BUFLEN-1 ; any more room? |
FFFFFFFFFFFFF0C0 BE107E80 blt r1,r0,GL1 ; yes: get some more, else delete last char. |
FFFFFFFFFFFFF0C4 GL3: |
FFFFFFFFFFFFF0C4 E0400008 setlo r1,#CTRLH ; delete a char. if possible |
FFFFFFFFFFFFF0C8 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF0CC E0400020 setlo r1,#' ' |
FFFFFFFFFFFFF0D0 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF0D4 1280911B cmpui r1,r8,#BUFFER ; any char.'s left? |
FFFFFFFFFFFFF0D8 BE107DC2 ble r1,r0,GL1 ; if not |
FFFFFFFFFFFFF0DC E0400008 setlo r1,#CTRLH ; if so, finish the BS-space-BS sequence |
FFFFFFFFFFFFF0E0 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF0E4 0C840001 sub r8,r8,#1 ; decrement the text pointer |
FFFFFFFFFFFFF0E8 BE007D4A bra GL1 ; back for more |
FFFFFFFFFFFFF0EC GL4: |
FFFFFFFFFFFFF0EC 04800409 or r1,r8,r0 ; delete the whole line |
FFFFFFFFFFFFF0F0 0E12911B subui r5,r1,#BUFFER ; figure out how many backspaces we need |
FFFFFFFFFFFFF0F4 BE500108 beq r5,r0,GL6 ; if none needed, brnch |
FFFFFFFFFFFFF0F8 GL5: |
FFFFFFFFFFFFF0F8 E0400008 setlo r1,#CTRLH ; and display BS-space-BS sequences |
FFFFFFFFFFFFF0FC 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF100 E0400020 setlo r1,#' ' |
FFFFFFFFFFFFF104 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF108 E0400008 setlo r1,#CTRLH |
FFFFFFFFFFFFF10C 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF110 BE02FF4F loop r5,GL5 |
FFFFFFFFFFFFF114 GL6: |
FFFFFFFFFFFFF114 9A04111B lea r8,BUFFER ; reinitialize the text pointer |
FFFFFFFFFFFFF118 BE007BCA bra GL1 ; and go back for more |
FFFFFFFFFFFFF11C GL7: |
FFFFFFFFFFFFF11C E0400000 setlo r1,#0 ; turn off cursor flash |
FFFFFFFFFFFFF120 60009052 sb r1,cursFlash |
FFFFFFFFFFFFF124 E040000A setlo r1,#LF ; echo a LF for the CR |
FFFFFFFFFFFFF128 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF12C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF130 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFF134 37EF8010 ret #16 |
|
|
; 'FNDLN' finds a line with a given line no. (in r1) in the |
4750,42 → 6329,42
; Parameters |
; r1 = line number to find |
; |
FFFFFFFFFFFFE030 FNDLN: |
FFFFFFFFFFFFE030 AC1003FF bleui r1,#0xFFFF,fl1 ; line no. must be < 65535 |
FFFFFFFFFFFFE034 9A00E694 lea r1,msgLineRange |
FFFFFFFFFFFFE038 BE00774A bra ERROR |
FFFFFFFFFFFFE03C fl1: |
FFFFFFFFFFFFE03C 4604CE60 lw r9,TXTBGN ; init. the text save pointer |
FFFFFFFFFFFFF138 FNDLN: |
FFFFFFFFFFFFF138 AC1003FF bleui r1,#0xFFFF,fl1 ; line no. must be < 65535 |
FFFFFFFFFFFFF13C 9A00F78C lea r1,msgLineRange |
FFFFFFFFFFFFF140 BE00774A bra ERROR |
FFFFFFFFFFFFF144 fl1: |
FFFFFFFFFFFFF144 4604DF68 lw r9,TXTBGN ; init. the text save pointer |
|
FFFFFFFFFFFFE040 FNDLNP: |
FFFFFFFFFFFFE040 460510D0 lw r10,TXTUNF ; check if we passed the end |
FFFFFFFFFFFFE044 0EA50001 subui r10,r10,#1 |
FFFFFFFFFFFFE048 BE950127 bgtu r9,r10,FNDRET1 ; if so, return with r9=0,r1=0 |
FFFFFFFFFFFFE04C 4A918000 lbu r3,[r9] ; get low order byte of line number |
FFFFFFFFFFFFE050 4A910001 lbu r2,1[r9] ; get high order byte |
FFFFFFFFFFFFE054 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFE058 04218809 or r2,r2,r3 ; build whole line number |
FFFFFFFFFFFFE05C BE110127 bgtu r1,r2,FNDNXT ; is this the line we want? no, not there yet |
FFFFFFFFFFFFE060 BE1100C8 beq r1,r2,FNDRET2 |
FFFFFFFFFFFFE064 FNDRET: |
FFFFFFFFFFFFE064 0410840A xor r1,r1,r1 ; line not found, but r9=next line pointer |
FFFFFFFFFFFFE068 37EF8000 ret ; return the cond. codes |
FFFFFFFFFFFFE06C FNDRET1: |
FFFFFFFFFFFFE06C 0494A40A xor r9,r9,r9 ; no higher line |
FFFFFFFFFFFFE070 0410840A xor r1,r1,r1 ; line not found |
FFFFFFFFFFFFE074 37EF8000 ret |
FFFFFFFFFFFFE078 FNDRET2: |
FFFFFFFFFFFFE078 E0400001 setlo r1,#1 ; line found |
FFFFFFFFFFFFE07C 37EF8000 ret |
FFFFFFFFFFFFF148 FNDLNP: |
FFFFFFFFFFFFF148 460510D0 lw r10,TXTUNF ; check if we passed the end |
FFFFFFFFFFFFF14C 0EA50001 subui r10,r10,#1 |
FFFFFFFFFFFFF150 BE950127 bgtu r9,r10,FNDRET1 ; if so, return with r9=0,r1=0 |
FFFFFFFFFFFFF154 4A918000 lbu r3,[r9] ; get low order byte of line number |
FFFFFFFFFFFFF158 4A910001 lbu r2,1[r9] ; get high order byte |
FFFFFFFFFFFFF15C 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFF160 04218809 or r2,r2,r3 ; build whole line number |
FFFFFFFFFFFFF164 BE110127 bgtu r1,r2,FNDNXT ; is this the line we want? no, not there yet |
FFFFFFFFFFFFF168 BE1100C8 beq r1,r2,FNDRET2 |
FFFFFFFFFFFFF16C FNDRET: |
FFFFFFFFFFFFF16C 0410840A xor r1,r1,r1 ; line not found, but r9=next line pointer |
FFFFFFFFFFFFF170 37EF8000 ret ; return the cond. codes |
FFFFFFFFFFFFF174 FNDRET1: |
FFFFFFFFFFFFF174 0494A40A xor r9,r9,r9 ; no higher line |
FFFFFFFFFFFFF178 0410840A xor r1,r1,r1 ; line not found |
FFFFFFFFFFFFF17C 37EF8000 ret |
FFFFFFFFFFFFF180 FNDRET2: |
FFFFFFFFFFFFF180 E0400001 setlo r1,#1 ; line found |
FFFFFFFFFFFFF184 37EF8000 ret |
|
FFFFFFFFFFFFE080 FNDNXT: |
FFFFFFFFFFFFE080 0A948002 addui r9,r9,#2 ; find the next line |
FFFFFFFFFFFFF188 FNDNXT: |
FFFFFFFFFFFFF188 0A948002 addui r9,r9,#2 ; find the next line |
|
FFFFFFFFFFFFE084 FNDSKP: |
FFFFFFFFFFFFE084 4A910000 lbu r2,[r9] |
FFFFFFFFFFFFE088 0A948001 addui r9,r9,#1 |
FFFFFFFFFFFFE08C B22FFE0D bnei r2,#CR,FNDSKP ; try to find a CR, keep looking |
FFFFFFFFFFFFE090 BE007D8A bra FNDLNP ; check if end of text |
FFFFFFFFFFFFF18C FNDSKP: |
FFFFFFFFFFFFF18C 4A910000 lbu r2,[r9] |
FFFFFFFFFFFFF190 0A948001 addui r9,r9,#1 |
FFFFFFFFFFFFF194 B22FFE0D bnei r2,#CR,FNDSKP ; try to find a CR, keep looking |
FFFFFFFFFFFFF198 BE007D8A bra FNDLNP ; check if end of text |
|
|
;****************************************************************** |
4792,28 → 6371,28
; 'MVUP' moves a block up from where r1 points to where r2 points |
; until r1=r3 |
; |
FFFFFFFFFFFFE094 MVUP1: |
FFFFFFFFFFFFE094 40120000 lb r4,[r1] |
FFFFFFFFFFFFE098 60220000 sb r4,[r2] |
FFFFFFFFFFFFE09C 08108001 add r1,r1,#1 |
FFFFFFFFFFFFE0A0 08210001 add r2,r2,#1 |
FFFFFFFFFFFFE0A4 MVUP: |
FFFFFFFFFFFFE0A4 BE11FF89 bne r1,r3,MVUP1 |
FFFFFFFFFFFFE0A8 MVRET: |
FFFFFFFFFFFFE0A8 37EF8000 ret |
FFFFFFFFFFFFF19C MVUP1: |
FFFFFFFFFFFFF19C 40120000 lb r4,[r1] |
FFFFFFFFFFFFF1A0 60220000 sb r4,[r2] |
FFFFFFFFFFFFF1A4 08108001 add r1,r1,#1 |
FFFFFFFFFFFFF1A8 08210001 add r2,r2,#1 |
FFFFFFFFFFFFF1AC MVUP: |
FFFFFFFFFFFFF1AC BE11FF89 bne r1,r3,MVUP1 |
FFFFFFFFFFFFF1B0 MVRET: |
FFFFFFFFFFFFF1B0 37EF8000 ret |
|
|
; 'MVDOWN' moves a block down from where r1 points to where r2 |
; points until r1=r3 |
; |
FFFFFFFFFFFFE0AC MVDOWN1: |
FFFFFFFFFFFFE0AC 0C108001 sub r1,r1,#1 |
FFFFFFFFFFFFE0B0 0C210001 sub r2,r2,#1 |
FFFFFFFFFFFFE0B4 40120000 lb r4,[r1] |
FFFFFFFFFFFFE0B8 60220000 sb r4,[r2] |
FFFFFFFFFFFFE0BC MVDOWN: |
FFFFFFFFFFFFE0BC BE11FF89 bne r1,r3,MVDOWN1 |
FFFFFFFFFFFFE0C0 37EF8000 ret |
FFFFFFFFFFFFF1B4 MVDOWN1: |
FFFFFFFFFFFFF1B4 0C108001 sub r1,r1,#1 |
FFFFFFFFFFFFF1B8 0C210001 sub r2,r2,#1 |
FFFFFFFFFFFFF1BC 40120000 lb r4,[r1] |
FFFFFFFFFFFFF1C0 60220000 sb r4,[r2] |
FFFFFFFFFFFFF1C4 MVDOWN: |
FFFFFFFFFFFFF1C4 BE11FF89 bne r1,r3,MVDOWN1 |
FFFFFFFFFFFFF1C8 37EF8000 ret |
|
|
; 'POPA' restores the 'FOR' loop variable save area from the stack |
4824,44 → 6403,44
; case that no FOR loops need to be saved. This needs to be |
; done because PUSHA / POPA is called all the time. |
|
FFFFFFFFFFFFE0C4 POPA: |
FFFFFFFFFFFFE0C4 47E08000 lw r1,[sp] ; restore LOPVAR, but zero means no more |
FFFFFFFFFFFFE0C8 660090A8 sw r1,LOPVAR |
FFFFFFFFFFFFE0CC BE100148 beq r1,r0,PP1 |
FFFFFFFFFFFFE0D0 47E08020 lw r1,32[sp] ; if not zero, restore the rest |
FFFFFFFFFFFFE0D4 660090C8 sw r1,LOPPT |
FFFFFFFFFFFFE0D8 47E08018 lw r1,24[sp] |
FFFFFFFFFFFFE0DC 660090C0 sw r1,LOPLN |
FFFFFFFFFFFFE0E0 47E08010 lw r1,16[sp] |
FFFFFFFFFFFFE0E4 660090B8 sw r1,LOPLMT |
FFFFFFFFFFFFE0E8 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFE0EC 660090B0 sw r1,LOPINC |
FFFFFFFFFFFFE0F0 37EF8028 ret #40 |
FFFFFFFFFFFFE0F4 PP1: |
FFFFFFFFFFFFE0F4 37EF8008 ret #8 |
FFFFFFFFFFFFF1CC POPA: |
FFFFFFFFFFFFF1CC 47E08000 lw r1,[sp] ; restore LOPVAR, but zero means no more |
FFFFFFFFFFFFF1D0 660090A8 sw r1,LOPVAR |
FFFFFFFFFFFFF1D4 BE100148 beq r1,r0,PP1 |
FFFFFFFFFFFFF1D8 47E08020 lw r1,32[sp] ; if not zero, restore the rest |
FFFFFFFFFFFFF1DC 660090C8 sw r1,LOPPT |
FFFFFFFFFFFFF1E0 47E08018 lw r1,24[sp] |
FFFFFFFFFFFFF1E4 660090C0 sw r1,LOPLN |
FFFFFFFFFFFFF1E8 47E08010 lw r1,16[sp] |
FFFFFFFFFFFFF1EC 660090B8 sw r1,LOPLMT |
FFFFFFFFFFFFF1F0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFF1F4 660090B0 sw r1,LOPINC |
FFFFFFFFFFFFF1F8 37EF8028 ret #40 |
FFFFFFFFFFFFF1FC PP1: |
FFFFFFFFFFFFF1FC 37EF8008 ret #8 |
|
|
FFFFFFFFFFFFE0F8 PUSHA: |
FFFFFFFFFFFFE0F8 460090F8 lw r1,STKBOT ; Are we running out of stack room? |
FFFFFFFFFFFFE0FC 0A108028 addui r1,r1,#40 ; we might need this many bytes |
FFFFFFFFFFFFE100 BFE0F0A4 bltu sp,r1,QSORRY ; out of stack space |
FFFFFFFFFFFFE104 460090A8 lw r1,LOPVAR ; save loop variables |
FFFFFFFFFFFFE108 BE100188 beq r1,r0,PU1 ; if LOPVAR is zero, that's all |
FFFFFFFFFFFFE10C 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFE110 67E08000 sw r1,[sp] |
FFFFFFFFFFFFE114 460090C8 lw r1,LOPPT |
FFFFFFFFFFFFE118 67E08020 sw r1,32[sp] ; else save all the others |
FFFFFFFFFFFFE11C 460090C0 lw r1,LOPLN |
FFFFFFFFFFFFE120 67E08018 sw r1,24[sp] |
FFFFFFFFFFFFE124 460090B8 lw r1,LOPLMT |
FFFFFFFFFFFFE128 67E08010 sw r1,16[sp] |
FFFFFFFFFFFFE12C 460090B0 lw r1,LOPINC |
FFFFFFFFFFFFE130 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFE134 37EF8000 ret |
FFFFFFFFFFFFE138 PU1: |
FFFFFFFFFFFFE138 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE13C 67E08000 sw r1,[sp] |
FFFFFFFFFFFFE140 37EF8000 ret |
FFFFFFFFFFFFF200 PUSHA: |
FFFFFFFFFFFFF200 460090F8 lw r1,STKBOT ; Are we running out of stack room? |
FFFFFFFFFFFFF204 0A108028 addui r1,r1,#40 ; we might need this many bytes |
FFFFFFFFFFFFF208 BFE0F0A4 bltu sp,r1,QSORRY ; out of stack space |
FFFFFFFFFFFFF20C 460090A8 lw r1,LOPVAR ; save loop variables |
FFFFFFFFFFFFF210 BE100188 beq r1,r0,PU1 ; if LOPVAR is zero, that's all |
FFFFFFFFFFFFF214 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFF218 67E08000 sw r1,[sp] |
FFFFFFFFFFFFF21C 460090C8 lw r1,LOPPT |
FFFFFFFFFFFFF220 67E08020 sw r1,32[sp] ; else save all the others |
FFFFFFFFFFFFF224 460090C0 lw r1,LOPLN |
FFFFFFFFFFFFF228 67E08018 sw r1,24[sp] |
FFFFFFFFFFFFF22C 460090B8 lw r1,LOPLMT |
FFFFFFFFFFFFF230 67E08010 sw r1,16[sp] |
FFFFFFFFFFFFF234 460090B0 lw r1,LOPINC |
FFFFFFFFFFFFF238 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFF23C 37EF8000 ret |
FFFFFFFFFFFFF240 PU1: |
FFFFFFFFFFFFF240 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFF244 67E08000 sw r1,[sp] |
FFFFFFFFFFFFF248 37EF8000 ret |
|
|
;****************************************************************** |
4894,82 → 6473,79
; r2 = stop character |
; return r1 = pointer to end of line + 1 |
|
FFFFFFFFFFFFE144 PRTSTG: |
FFFFFFFFFFFFE144 0DEF0020 sub sp,sp,#32 |
FFFFFFFFFFFFE148 67E28000 sw r5,[sp] |
FFFFFFFFFFFFE14C 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFE150 67E38010 sw r7,16[sp] |
FFFFFFFFFFFFE154 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFE158 02128009 mov r5,r1 ; r5 = pointer |
FFFFFFFFFFFFE15C 02230009 mov r6,r2 ; r6 = stop char |
FFFFFFFFFFFFE160 PS1: |
FFFFFFFFFFFFE160 4A538000 lbu r7,[r5] ; get a text character |
FFFFFFFFFFFFE164 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFE168 BE7300C8 beq r7,r6,PRTRET ; same as stop character? if so, return |
FFFFFFFFFFFFE16C 02708009 mov r1,r7 |
FFFFFFFFFFFFE170 31FFF393 call GOOUT ; display the char. |
FFFFFFFFFFFFE174 B27FFB0D bnei r7,#CR,PS1 ; is it a C.R.? no, go back for more |
FFFFFFFFFFFFE178 E040000A setlo r1,#LF ; yes, add a L.F. |
FFFFFFFFFFFFE17C 31FFF393 call GOOUT |
FFFFFFFFFFFFE180 PRTRET: |
FFFFFFFFFFFFE180 02710009 mov r2,r7 ; return r2 = stop char |
FFFFFFFFFFFFE184 02508009 mov r1,r5 ; return r1 = line pointer |
FFFFFFFFFFFFE188 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFE18C 47E38010 lw r7,16[sp] |
FFFFFFFFFFFFE190 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFE194 47E28000 lw r5,[sp] |
FFFFFFFFFFFFE198 37EF8020 ret #32 ; then return |
FFFFFFFFFFFFF24C PRTSTG: |
FFFFFFFFFFFFF24C 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFF250 67E28000 sw r5,[sp] |
FFFFFFFFFFFFF254 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFF258 67E38010 sw r7,16[sp] |
FFFFFFFFFFFFF25C 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFF260 02128009 mov r5,r1 ; r5 = pointer |
FFFFFFFFFFFFF264 02230009 mov r6,r2 ; r6 = stop char |
FFFFFFFFFFFFF268 PS1: |
FFFFFFFFFFFFF268 4A538000 lbu r7,[r5] ; get a text character |
FFFFFFFFFFFFF26C 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFF270 BE7300C8 beq r7,r6,PRTRET ; same as stop character? if so, return |
FFFFFFFFFFFFF274 02708009 mov r1,r7 |
FFFFFFFFFFFFF278 31FFF7D5 call GOOUT ; display the char. |
FFFFFFFFFFFFF27C B27FFB0D bnei r7,#CR,PS1 ; is it a C.R.? no, go back for more |
FFFFFFFFFFFFF280 E040000A setlo r1,#LF ; yes, add a L.F. |
FFFFFFFFFFFFF284 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF288 PRTRET: |
FFFFFFFFFFFFF288 02710009 mov r2,r7 ; return r2 = stop char |
FFFFFFFFFFFFF28C 02508009 mov r1,r5 ; return r1 = line pointer |
FFFFFFFFFFFFF290 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFF294 47E38010 lw r7,16[sp] |
FFFFFFFFFFFFF298 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFF29C 47E28000 lw r5,[sp] |
FFFFFFFFFFFFF2A0 37EF8020 ret #32 ; then return |
|
|
FFFFFFFFFFFFE19C QTSTG: |
FFFFFFFFFFFFE19C 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE1A0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE1A4 E0C00022 setlo r3,#'"' |
FFFFFFFFFFFFE1A8 E13FE1D0 setlo r4,#<QT3 |
FFFFFFFFFFFFE1AC F10FFFFF sethi r4,#>QT3 |
FFFFFFFFFFFFE1B0 31FFF8F1 call TSTC ; *** QTSTG *** |
FFFFFFFFFFFFE1B4 E0800022 setlo r2,#'"' ; it is a " |
FFFFFFFFFFFFE1B8 QT1: |
FFFFFFFFFFFFE1B8 04800409 or r1,r8,r0 |
FFFFFFFFFFFFE1BC 31FFF851 call PRTSTG ; print until another |
FFFFFFFFFFFFE1C0 04102009 lw r8,r1 |
FFFFFFFFFFFFE1C4 B2200F0A bne r2,#LF,QT2 ; was last one a CR? |
FFFFFFFFFFFFE1C8 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE1CC BE00070A bra RUNNXL ; if so, run next line |
FFFFFFFFFFFFE1D0 QT3: |
FFFFFFFFFFFFE1D0 E0C00027 setlo r3,#'''' |
FFFFFFFFFFFFE1D4 E13FE1E8 setlo r4,#<QT4 |
FFFFFFFFFFFFE1D8 F10FFFFF sethi r4,#>QT4 |
FFFFFFFFFFFFE1DC 31FFF8F1 call TSTC ; is it a single quote? |
FFFFFFFFFFFFE1E0 E0800027 setlo r2,#'''' ; if so, do same as above |
FFFFFFFFFFFFE1E4 BE007EAA bra QT1 |
FFFFFFFFFFFFE1E8 QT4: |
FFFFFFFFFFFFE1E8 E0C0005F setlo r3,#'_' |
FFFFFFFFFFFFE1EC E13FE20C setlo r4,#<QT5 |
FFFFFFFFFFFFE1F0 F10FFFFF sethi r4,#>QT5 |
FFFFFFFFFFFFE1F4 31FFF8F1 call TSTC ; is it an underline? |
FFFFFFFFFFFFE1F8 E040000D setlo r1,#CR ; if so, output a CR without LF |
FFFFFFFFFFFFE1FC 31FFF393 call GOOUT |
FFFFFFFFFFFFE200 QT2: |
FFFFFFFFFFFFE200 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE204 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFE208 35F00004 jal r0,4[lr] ; skip over next i-word when returning |
FFFFFFFFFFFFE20C QT5: ; not " ' or _ |
FFFFFFFFFFFFE20C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE210 37EF8008 ret #8 |
FFFFFFFFFFFFF2A4 QTSTG: |
FFFFFFFFFFFFF2A4 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFF2A8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF2AC E0C00022 setlo r3,#'"' |
FFFFFFFFFFFFF2B0 9A0272D4 lea r4,QT3 |
FFFFFFFFFFFFF2B4 31FFFD30 call TSTC ; *** QTSTG *** |
FFFFFFFFFFFFF2B8 E0800022 setlo r2,#'"' ; it is a " |
FFFFFFFFFFFFF2BC QT1: |
FFFFFFFFFFFFF2BC 04800409 or r1,r8,r0 |
FFFFFFFFFFFFF2C0 31FFFC93 call PRTSTG ; print until another |
FFFFFFFFFFFFF2C4 04102009 lw r8,r1 |
FFFFFFFFFFFFF2C8 B2200D0A bne r2,#LF,QT2 ; was last one a CR? |
FFFFFFFFFFFFF2CC 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFF2D0 BE00072A bra RUNNXL ; if so, run next line |
FFFFFFFFFFFFF2D4 QT3: |
FFFFFFFFFFFFF2D4 E0C00027 setlo r3,#'''' |
FFFFFFFFFFFFF2D8 9A0272E8 lea r4,QT4 |
FFFFFFFFFFFFF2DC 31FFFD30 call TSTC ; is it a single quote? |
FFFFFFFFFFFFF2E0 E0800027 setlo r2,#'''' ; if so, do same as above |
FFFFFFFFFFFFF2E4 BE007ECA bra QT1 |
FFFFFFFFFFFFF2E8 QT4: |
FFFFFFFFFFFFF2E8 E0C0005F setlo r3,#'_' |
FFFFFFFFFFFFF2EC 9A027308 lea r4,QT5 |
FFFFFFFFFFFFF2F0 31FFFD30 call TSTC ; is it an underline? |
FFFFFFFFFFFFF2F4 E040000D setlo r1,#CR ; if so, output a CR without LF |
FFFFFFFFFFFFF2F8 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF2FC QT2: |
FFFFFFFFFFFFF2FC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF300 0BEF0008 addui sp,sp,#8 |
FFFFFFFFFFFFF304 35F00004 jal r0,4[lr] ; skip over next i-word when returning |
FFFFFFFFFFFFF308 QT5: ; not " ' or _ |
FFFFFFFFFFFFF308 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF30C 37EF8008 ret #8 |
|
|
; Output a CR LF sequence |
; |
FFFFFFFFFFFFE214 prCRLF: |
FFFFFFFFFFFFE214 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE218 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE21C E040000D setlo r1,#CR |
FFFFFFFFFFFFE220 31FFF393 call GOOUT |
FFFFFFFFFFFFE224 E040000A setlo r1,#LF |
FFFFFFFFFFFFE228 31FFF393 call GOOUT |
FFFFFFFFFFFFE22C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE230 37EF8008 ret #8 |
FFFFFFFFFFFFF310 prCRLF: |
FFFFFFFFFFFFF310 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFF314 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF318 E040000D setlo r1,#CR |
FFFFFFFFFFFFF31C 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF320 E040000A setlo r1,#LF |
FFFFFFFFFFFFF324 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF328 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF32C 37EF8008 ret #8 |
|
|
; r1 = number to print |
4976,132 → 6552,132
; r2 = number of digits |
; Register Usage |
; r5 = number of padding spaces |
FFFFFFFFFFFFE234 PRTNUM: |
FFFFFFFFFFFFE234 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFE238 67E18000 sw r3,[sp] |
FFFFFFFFFFFFE23C 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFE240 67E30010 sw r6,16[sp] |
FFFFFFFFFFFFE244 67E38018 sw r7,24[sp] |
FFFFFFFFFFFFE248 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFE24C 16039100 ori r7,r0,#NUMWKA ; r7 = pointer to numeric work area |
FFFFFFFFFFFFE250 02130009 mov r6,r1 ; save number for later |
FFFFFFFFFFFFE254 02228009 mov r5,r2 ; r5 = min number of chars |
FFFFFFFFFFFFE258 BE100063 bgt r1,r0,PN1 ; is it negative? if not |
FFFFFFFFFFFFE25C 02108006 neg r1,r1 ; else make it positive |
FFFFFFFFFFFFE260 0E528001 subui r5,r5,#1 ; one less for width count |
FFFFFFFFFFFFE264 PN1: |
FFFFFFFFFFFFE264 1601800A lw r3,#10 |
FFFFFFFFFFFFE268 0411881C mod r2,r1,r3 ; r2 = r1 mod 10 |
FFFFFFFFFFFFE26C 1C10800A divui r1,r1,#10 ; r1 /= 10 divide by 10 |
FFFFFFFFFFFFE270 0A210030 addui r2,r2,#'0' ; convert remainder to ascii |
FFFFFFFFFFFFE274 60710000 sb r2,[r7] ; and store in buffer |
FFFFFFFFFFFFE278 0A738001 addui r7,r7,#1 |
FFFFFFFFFFFFE27C 0E528001 subui r5,r5,#1 ; decrement width |
FFFFFFFFFFFFE280 BE107F29 bne r1,r0,PN1 |
FFFFFFFFFFFFE284 PN6: |
FFFFFFFFFFFFE284 BE500082 ble r5,r0,PN4 ; test pad count, skip padding if not needed |
FFFFFFFFFFFFE288 PN3: |
FFFFFFFFFFFFE288 E0400020 setlo r1,#' ' ; display the required leading spaces |
FFFFFFFFFFFFE28C 31FFF393 call GOOUT |
FFFFFFFFFFFFE290 BE02FFCF loop r5,PN3 |
FFFFFFFFFFFFE294 PN4: |
FFFFFFFFFFFFE294 BE600063 bgt r6,r0,PN5 ; is number negative? |
FFFFFFFFFFFFE298 E040002D setlo r1,#'-' ; if so, display the sign |
FFFFFFFFFFFFE29C 31FFF393 call GOOUT |
FFFFFFFFFFFFE2A0 PN5: |
FFFFFFFFFFFFE2A0 0E738001 subui r7,r7,#1 |
FFFFFFFFFFFFE2A4 40708000 lb r1,[r7] ; now unstack the digits and display |
FFFFFFFFFFFFE2A8 31FFF393 call GOOUT |
FFFFFFFFFFFFE2AC 12709100 cmpui r1,r7,#NUMWKA |
FFFFFFFFFFFFE2B0 BE107F87 bgtu r1,r0,PN5 |
FFFFFFFFFFFFE2B4 PNRET: |
FFFFFFFFFFFFE2B4 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFE2B8 47E38018 lw r7,24[sp] |
FFFFFFFFFFFFE2BC 47E30010 lw r6,16[sp] |
FFFFFFFFFFFFE2C0 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFE2C4 47E18000 lw r3,[sp] |
FFFFFFFFFFFFE2C8 37EF8028 ret #40 |
FFFFFFFFFFFFF330 PRTNUM: |
FFFFFFFFFFFFF330 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFF334 67E18000 sw r3,[sp] |
FFFFFFFFFFFFF338 67E28008 sw r5,8[sp] |
FFFFFFFFFFFFF33C 67E30010 sw r6,16[sp] |
FFFFFFFFFFFFF340 67E38018 sw r7,24[sp] |
FFFFFFFFFFFFF344 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFF348 9A039100 lea r7,NUMWKA ; r7 = pointer to numeric work area |
FFFFFFFFFFFFF34C 02130009 mov r6,r1 ; save number for later |
FFFFFFFFFFFFF350 02228009 mov r5,r2 ; r5 = min number of chars |
FFFFFFFFFFFFF354 BE100063 bgt r1,r0,PN2 ; is it negative? if not |
FFFFFFFFFFFFF358 02108006 neg r1,r1 ; else make it positive |
FFFFFFFFFFFFF35C 0E528001 subui r5,r5,#1 ; one less for width count |
FFFFFFFFFFFFF360 PN2: |
FFFFFFFFFFFFF360 1601800A lw r3,#10 |
FFFFFFFFFFFFF364 PN1: |
FFFFFFFFFFFFF364 0411881C modu r2,r1,r3 ; r2 = r1 mod 10 |
FFFFFFFFFFFFF368 1E10800A divui r1,r1,#10 ; r1 /= 10 divide by 10 |
FFFFFFFFFFFFF36C 0A210030 addui r2,r2,#'0' ; convert remainder to ascii |
FFFFFFFFFFFFF370 60710000 sb r2,[r7] ; and store in buffer |
FFFFFFFFFFFFF374 0A738001 addui r7,r7,#1 |
FFFFFFFFFFFFF378 0E528001 subui r5,r5,#1 ; decrement width |
FFFFFFFFFFFFF37C BE107F49 bne r1,r0,PN1 |
FFFFFFFFFFFFF380 PN6: |
FFFFFFFFFFFFF380 BE500082 ble r5,r0,PN4 ; test pad count, skip padding if not needed |
FFFFFFFFFFFFF384 PN3: |
FFFFFFFFFFFFF384 E0400020 setlo r1,#' ' ; display the required leading spaces |
FFFFFFFFFFFFF388 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF38C BE02FFCF loop r5,PN3 |
FFFFFFFFFFFFF390 PN4: |
FFFFFFFFFFFFF390 BE600061 bge r6,r0,PN5 ; is number negative? |
FFFFFFFFFFFFF394 E040002D setlo r1,#'-' ; if so, display the sign |
FFFFFFFFFFFFF398 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF39C PN5: |
FFFFFFFFFFFFF39C 0E738001 subui r7,r7,#1 |
FFFFFFFFFFFFF3A0 40708000 lb r1,[r7] ; now unstack the digits and display |
FFFFFFFFFFFFF3A4 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF3A8 12709100 cmpui r1,r7,#NUMWKA |
FFFFFFFFFFFFF3AC BE107F87 bgtu r1,r0,PN5 |
FFFFFFFFFFFFF3B0 PNRET: |
FFFFFFFFFFFFF3B0 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFF3B4 47E38018 lw r7,24[sp] |
FFFFFFFFFFFFF3B8 47E30010 lw r6,16[sp] |
FFFFFFFFFFFFF3BC 47E28008 lw r5,8[sp] |
FFFFFFFFFFFFF3C0 47E18000 lw r3,[sp] |
FFFFFFFFFFFFF3C4 37EF8028 ret #40 |
|
|
; r1 = number to print |
; r2 = number of digits |
FFFFFFFFFFFFE2CC PRTHEXNUM: |
FFFFFFFFFFFFE2CC 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFE2D0 67E28000 sw r5,[sp] |
FFFFFFFFFFFFE2D4 67E30008 sw r6,8[sp] |
FFFFFFFFFFFFE2D8 67E38010 sw r7,16[sp] |
FFFFFFFFFFFFE2DC 67E40018 sw r8,24[sp] |
FFFFFFFFFFFFE2E0 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFE2E4 E1C01100 setlo r7,#<NUMWKA ; r7 = pointer to numeric work area |
FFFFFFFFFFFFE2E8 F1C00000 sethi r7,#>NUMWKA |
FFFFFFFFFFFFE2EC 04101809 or r6,r1,r0 ; save number for later |
FFFFFFFFFFFFE2F0 E1400014 setlo r5,#20 ; r5 = min number of chars |
FFFFFFFFFFFFE2F4 04101009 or r4,r1,r0 |
FFFFFFFFFFFFE2F8 BE400083 bgt r4,r0,PHN1 ; is it negative? if not |
FFFFFFFFFFFFE2FC 02420006 neg r4,r4 ; else make it positive |
FFFFFFFFFFFFE300 0C528001 sub r5,r5,#1 ; one less for width count |
FFFFFFFFFFFFE304 E2000014 setlo r8,#20 ; maximum of 10 digits |
FFFFFFFFFFFFE308 PHN1: |
FFFFFFFFFFFFE308 04400409 or r1,r4,r0 |
FFFFFFFFFFFFE30C 1410800F andi r1,r1,#15 |
FFFFFFFFFFFFE310 A010030A blt r1,#10,PHN7 |
FFFFFFFFFFFFE314 0A108037 addui r1,r1,#'A'-10 |
FFFFFFFFFFFFE318 BE00004A bra PHN8 |
FFFFFFFFFFFFE31C PHN7: |
FFFFFFFFFFFFE31C 08108030 add r1,r1,#'0' ; convert remainder to ascii |
FFFFFFFFFFFFE320 PHN8: |
FFFFFFFFFFFFE320 60708000 sb r1,[r7] ; and store in buffer |
FFFFFFFFFFFFE324 08738001 add r7,r7,#1 |
FFFFFFFFFFFFE328 0C528001 sub r5,r5,#1 ; decrement width |
FFFFFFFFFFFFE32C shru r4,r4,#4 |
FFFFFFFFFFFFE32C BE400048 beq r4,r0,PHN6 ; is it zero yet ? |
FFFFFFFFFFFFE330 BE047ECF loop r8,PHN1 ; safety |
FFFFFFFFFFFFE334 PHN6: ; test pad count |
FFFFFFFFFFFFE334 BE500082 ble r5,r0,PHN4 ; skip padding if not needed |
FFFFFFFFFFFFE338 PHN3: |
FFFFFFFFFFFFE338 E0400020 setlo r1,#' ' ; display the required leading spaces |
FFFFFFFFFFFFE33C 31FFF393 call GOOUT |
FFFFFFFFFFFFE340 BE02FFCF loop r5,PHN3 |
FFFFFFFFFFFFE344 PHN4: |
FFFFFFFFFFFFE344 BE600063 bgt r6,r0,PHN5 ; is number negative? |
FFFFFFFFFFFFE348 E040002D setlo r1,#'-' ; if so, display the sign |
FFFFFFFFFFFFE34C 31FFF393 call GOOUT |
FFFFFFFFFFFFE350 PHN5: |
FFFFFFFFFFFFE350 0C738001 sub r7,r7,#1 |
FFFFFFFFFFFFE354 40708000 lb r1,[r7] ; now unstack the digits and display |
FFFFFFFFFFFFE358 31FFF393 call GOOUT |
FFFFFFFFFFFFE35C 12709100 cmpui r1,r7,#NUMWKA |
FFFFFFFFFFFFE360 BE107F83 bgt r1,r0,PHN5 |
FFFFFFFFFFFFE364 PHNRET: |
FFFFFFFFFFFFE364 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFE368 47E40018 lw r8,24[sp] |
FFFFFFFFFFFFE36C 47E38010 lw r7,16[sp] |
FFFFFFFFFFFFE370 47E30008 lw r6,8[sp] |
FFFFFFFFFFFFE374 47E28000 lw r5,[sp] |
FFFFFFFFFFFFE378 37EF8028 ret #40 |
FFFFFFFFFFFFF3C8 PRTHEXNUM: |
FFFFFFFFFFFFF3C8 0FEF0028 subui sp,sp,#40 |
FFFFFFFFFFFFF3CC 67E28000 sw r5,[sp] |
FFFFFFFFFFFFF3D0 67E30008 sw r6,8[sp] |
FFFFFFFFFFFFF3D4 67E38010 sw r7,16[sp] |
FFFFFFFFFFFFF3D8 67E40018 sw r8,24[sp] |
FFFFFFFFFFFFF3DC 67EF8020 sw lr,32[sp] |
FFFFFFFFFFFFF3E0 9A039100 lea r7,NUMWKA ; r7 = pointer to numeric work area |
FFFFFFFFFFFFF3E4 04101809 or r6,r1,r0 ; save number for later |
FFFFFFFFFFFFF3E8 E1400014 setlo r5,#20 ; r5 = min number of chars |
FFFFFFFFFFFFF3EC 02120009 mov r4,r1 |
FFFFFFFFFFFFF3F0 BE400083 bgt r4,r0,PHN1 ; is it negative? if not |
FFFFFFFFFFFFF3F4 02420006 neg r4,r4 ; else make it positive |
FFFFFFFFFFFFF3F8 0E528001 subui r5,r5,#1 ; one less for width count |
FFFFFFFFFFFFF3FC E2000014 setlo r8,#20 ; maximum of 10 digits |
FFFFFFFFFFFFF400 PHN1: |
FFFFFFFFFFFFF400 02408009 mov r1,r4 |
FFFFFFFFFFFFF404 1410800F andi r1,r1,#15 |
FFFFFFFFFFFFF408 A010030A blt r1,#10,PHN7 |
FFFFFFFFFFFFF40C 0A108037 addui r1,r1,#'A'-10 |
FFFFFFFFFFFFF410 BE00004A bra PHN8 |
FFFFFFFFFFFFF414 PHN7: |
FFFFFFFFFFFFF414 08108030 add r1,r1,#'0' ; convert remainder to ascii |
FFFFFFFFFFFFF418 PHN8: |
FFFFFFFFFFFFF418 60708000 sb r1,[r7] ; and store in buffer |
FFFFFFFFFFFFF41C 0A738001 addui r7,r7,#1 |
FFFFFFFFFFFFF420 0E528001 subui r5,r5,#1 ; decrement width |
FFFFFFFFFFFFF424 06420801 shrui r4,r4,#4 |
FFFFFFFFFFFFF428 BE400048 beq r4,r0,PHN6 ; is it zero yet ? |
FFFFFFFFFFFFF42C BE047EAF loop r8,PHN1 ; safety |
FFFFFFFFFFFFF430 PHN6: ; test pad count |
FFFFFFFFFFFFF430 BE500082 ble r5,r0,PHN4 ; skip padding if not needed |
FFFFFFFFFFFFF434 PHN3: |
FFFFFFFFFFFFF434 E0400020 setlo r1,#' ' ; display the required leading spaces |
FFFFFFFFFFFFF438 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF43C BE02FFCF loop r5,PHN3 |
FFFFFFFFFFFFF440 PHN4: |
FFFFFFFFFFFFF440 BE600063 bgt r6,r0,PHN5 ; is number negative? |
FFFFFFFFFFFFF444 E040002D setlo r1,#'-' ; if so, display the sign |
FFFFFFFFFFFFF448 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF44C PHN5: |
FFFFFFFFFFFFF44C 0E738001 subui r7,r7,#1 |
FFFFFFFFFFFFF450 40708000 lb r1,[r7] ; now unstack the digits and display |
FFFFFFFFFFFFF454 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF458 12709100 cmpui r1,r7,#NUMWKA |
FFFFFFFFFFFFF45C BE107F83 bgt r1,r0,PHN5 |
FFFFFFFFFFFFF460 PHNRET: |
FFFFFFFFFFFFF460 47EF8020 lw lr,32[sp] |
FFFFFFFFFFFFF464 47E40018 lw r8,24[sp] |
FFFFFFFFFFFFF468 47E38010 lw r7,16[sp] |
FFFFFFFFFFFFF46C 47E30008 lw r6,8[sp] |
FFFFFFFFFFFFF470 47E28000 lw r5,[sp] |
FFFFFFFFFFFFF474 37EF8028 ret #40 |
|
|
; r1 = pointer to line |
; returns r1 = pointer to end of line + 1 |
FFFFFFFFFFFFE37C PRTLN: |
FFFFFFFFFFFFE37C 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFE380 67E28000 sw r5,[sp] |
FFFFFFFFFFFFE384 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFE388 08128002 addi r5,r1,#2 |
FFFFFFFFFFFFE38C 4A50FFFE lbu r1,-2[r5] ; get the binary line number |
FFFFFFFFFFFFE390 4A517FFF lbu r2,-1[r5] |
FFFFFFFFFFFFE394 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFE398 04110409 or r1,r1,r2 |
FFFFFFFFFFFFE39C E0800000 setlo r2,#0 ; display a 0 or more digit line no. |
FFFFFFFFFFFFE3A0 31FFF88D call PRTNUM |
FFFFFFFFFFFFE3A4 E0400020 setlo r1,#' ' ; followed by a blank |
FFFFFFFFFFFFE3A8 31FFF393 call GOOUT |
FFFFFFFFFFFFE3AC E0800000 setlo r2,#0 ; stop char. is a zero |
FFFFFFFFFFFFE3B0 04500409 or r1,r5,r0 |
FFFFFFFFFFFFE3B4 31FFF851 call PRTSTG ; display the rest of the line |
FFFFFFFFFFFFE3B8 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFE3BC 47E28000 lw r5,[sp] |
FFFFFFFFFFFFE3C0 37EF8010 ret #16 |
FFFFFFFFFFFFF478 PRTLN: |
FFFFFFFFFFFFF478 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFF47C 67E28000 sw r5,[sp] |
FFFFFFFFFFFFF480 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFF484 08128002 addi r5,r1,#2 |
FFFFFFFFFFFFF488 4A50FFFE lbu r1,-2[r5] ; get the binary line number |
FFFFFFFFFFFFF48C 4A517FFF lbu r2,-1[r5] |
FFFFFFFFFFFFF490 06211000 shli r2,r2,#8 |
FFFFFFFFFFFFF494 04110409 or r1,r1,r2 |
FFFFFFFFFFFFF498 E0800000 setlo r2,#0 ; display a 0 or more digit line no. |
FFFFFFFFFFFFF49C 31FFFCCC call PRTNUM |
FFFFFFFFFFFFF4A0 E0400020 setlo r1,#' ' ; followed by a blank |
FFFFFFFFFFFFF4A4 31FFF7D5 call GOOUT |
FFFFFFFFFFFFF4A8 E0800000 setlo r2,#0 ; stop char. is a zero |
FFFFFFFFFFFFF4AC 04500409 or r1,r5,r0 |
FFFFFFFFFFFFF4B0 31FFFC93 call PRTSTG ; display the rest of the line |
FFFFFFFFFFFFF4B4 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFF4B8 47E28000 lw r5,[sp] |
FFFFFFFFFFFFF4BC 37EF8010 ret #16 |
|
|
; ===== Test text byte following the call to this subroutine. If it |
5114,22 → 6690,22
; Returns |
; r8 = updated text pointer |
; |
FFFFFFFFFFFFE3C4 TSTC |
FFFFFFFFFFFFE3C4 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFE3C8 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE3CC 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFE3D0 31FFF914 call IGNBLK ; ignore leading blanks |
FFFFFFFFFFFFE3D4 40808000 lb r1,[r8] |
FFFFFFFFFFFFE3D8 BE3080A8 beq r3,r1,TC1 ; is it = to what r8 points to? if so |
FFFFFFFFFFFFE3DC 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFE3E0 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE3E4 0BEF0010 addui sp,sp,#16 |
FFFFFFFFFFFFE3E8 34400000 jal r0,[r4] ; jump to the routine |
FFFFFFFFFFFFE3EC TC1: |
FFFFFFFFFFFFE3EC 08840001 add r8,r8,#1 ; if equal, bump text pointer |
FFFFFFFFFFFFE3F0 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFE3F4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE3F8 37EF8010 ret #16 |
FFFFFFFFFFFFF4C0 TSTC |
FFFFFFFFFFFFF4C0 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFF4C4 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF4C8 67E08008 sw r1,8[sp] |
FFFFFFFFFFFFF4CC 31FFFD55 call IGNBLK ; ignore leading blanks |
FFFFFFFFFFFFF4D0 40808000 lb r1,[r8] |
FFFFFFFFFFFFF4D4 BE3080A8 beq r3,r1,TC1 ; is it = to what r8 points to? if so |
FFFFFFFFFFFFF4D8 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFF4DC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF4E0 0BEF0010 addui sp,sp,#16 |
FFFFFFFFFFFFF4E4 34400000 jal r0,[r4] ; jump to the routine |
FFFFFFFFFFFFF4E8 TC1: |
FFFFFFFFFFFFF4E8 0A840001 addui r8,r8,#1 ; if equal, bump text pointer |
FFFFFFFFFFFFF4EC 47E08008 lw r1,8[sp] |
FFFFFFFFFFFFF4F0 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF4F4 37EF8010 ret #16 |
|
; ===== See if the text pointed to by r8 is a number. If so, |
; return the number in r2 and the number of digits in r3, |
5141,31 → 6717,33
; r2 = number of digits in number |
; r8 = updated text pointer |
; |
FFFFFFFFFFFFE3FC TSTNUM: |
FFFFFFFFFFFFE3FC 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE400 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE404 31FFF914 call IGNBLK ; skip over blanks |
FFFFFFFFFFFFE408 E0400000 setlo r1,#0 ; initialize return parameters |
FFFFFFFFFFFFE40C E0800000 setlo r2,#0 |
FFFFFFFFFFFFE410 TN1: |
FFFFFFFFFFFFE410 40818000 lb r3,[r8] |
FFFFFFFFFFFFE414 A8300D30 bltui r3,#'0',TSNMRET ; is it less than zero? |
FFFFFFFFFFFFE418 AE300C39 bgtui r3,#'9',TSNMRET ; is it greater than nine? |
FFFFFFFFFFFFE41C E13FFFFF setlo r4,#0xFFFFFFFF |
FFFFFFFFFFFFE420 F10FFFFF sethi r4,#0x07FFFFFF |
FFFFFFFFFFFFE424 BE120066 bleu r1,r4,TN2 ; see if there's room for new digit |
FFFFFFFFFFFFE428 E07FE629 setlo r1,msgNumTooBig |
FFFFFFFFFFFFE42C BE0057AA bra ERROR ; if not, we've overflowd |
FFFFFFFFFFFFE430 TN2: |
FFFFFFFFFFFFE430 1A10800A mului r1,r1,#10 ; quickly multiply result by 10 |
FFFFFFFFFFFFE434 08840001 addi r8,r8,#1 ; adjust text pointer |
FFFFFFFFFFFFE438 1431800F andi r3,r3,#0x0F ; add in the new digit |
FFFFFFFFFFFFE43C 04118402 add r1,r1,r3 |
FFFFFFFFFFFFE440 08210001 addi r2,r2,#1 ; increment the no. of digits |
FFFFFFFFFFFFE444 BE007E6A bra TN1 |
FFFFFFFFFFFFE448 TSNMRET: |
FFFFFFFFFFFFE448 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE44C 37EF8008 ret #8 |
FFFFFFFFFFFFF4F8 TSTNUM: |
FFFFFFFFFFFFF4F8 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFF4FC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF500 31FFFD55 call IGNBLK ; skip over blanks |
FFFFFFFFFFFFF504 E0400000 setlo r1,#0 ; initialize return parameters |
FFFFFFFFFFFFF508 E0800000 setlo r2,#0 |
FFFFFFFFFFFFF50C TN1: |
FFFFFFFFFFFFF50C 40818000 lb r3,[r8] |
FFFFFFFFFFFFF510 A8300F30 bltui r3,#'0',TSNMRET ; is it less than zero? |
FFFFFFFFFFFFF514 AE300E39 bgtui r3,#'9',TSNMRET ; is it greater than nine? |
FFFFFFFFFFFFF518 E6BFFFFF ; SETLO |
FFFFFFFFFFFFF51C EEBFFFFF ; SETMID |
FFFFFFFFFFFFF520 F6807FFF ; SETHI |
FFFFFFFFFFFFF524 040D1009 lw r4,#0x07FFFFFF_FFFFFFFF |
FFFFFFFFFFFFF528 BE120066 bleu r1,r4,TN2 ; see if there's room for new digit |
FFFFFFFFFFFFF52C 9A00F721 lea r1,msgNumTooBig |
FFFFFFFFFFFFF530 BE0057CA bra ERROR ; if not, we've overflowd |
FFFFFFFFFFFFF534 TN2: |
FFFFFFFFFFFFF534 1A10800A mului r1,r1,#10 ; quickly multiply result by 10 |
FFFFFFFFFFFFF538 0A840001 addui r8,r8,#1 ; adjust text pointer |
FFFFFFFFFFFFF53C 1431800F andi r3,r3,#0x0F ; add in the new digit |
FFFFFFFFFFFFF540 04118403 addu r1,r1,r3 |
FFFFFFFFFFFFF544 0A210001 addui r2,r2,#1 ; increment the no. of digits |
FFFFFFFFFFFFF548 BE007E2A bra TN1 |
FFFFFFFFFFFFF54C TSNMRET: |
FFFFFFFFFFFFF54C 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF550 37EF8008 ret #8 |
|
|
;===== Skip over blanks in the text pointed to by r8. |
5175,19 → 6753,19
; Returns |
; r8 = pointer updateded past any spaces or tabs |
; |
FFFFFFFFFFFFE450 IGNBLK: |
FFFFFFFFFFFFE450 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE454 67E08000 sw r1,[sp] |
FFFFFFFFFFFFE458 IGB2: |
FFFFFFFFFFFFE458 40808000 lb r1,[r8] ; get char |
FFFFFFFFFFFFE45C B0100220 beqi r1,#' ',IGB1 ; see if it's a space |
FFFFFFFFFFFFE460 B2100300 bnei r1,#'\t',IGBRET ; or a tab |
FFFFFFFFFFFFE464 IGB1: |
FFFFFFFFFFFFE464 08840001 add r8,r8,#1 ; increment the text pointer |
FFFFFFFFFFFFE468 BE007F8A bra IGB2 |
FFFFFFFFFFFFE46C IGBRET: |
FFFFFFFFFFFFE46C 47E08000 lw r1,[sp] |
FFFFFFFFFFFFE470 37EF8008 ret #8 |
FFFFFFFFFFFFF554 IGNBLK: |
FFFFFFFFFFFFF554 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFF558 67E08000 sw r1,[sp] |
FFFFFFFFFFFFF55C IGB2: |
FFFFFFFFFFFFF55C 40808000 lb r1,[r8] ; get char |
FFFFFFFFFFFFF560 B0100220 beqi r1,#' ',IGB1 ; see if it's a space |
FFFFFFFFFFFFF564 B2100300 bnei r1,#'\t',IGBRET ; or a tab |
FFFFFFFFFFFFF568 IGB1: |
FFFFFFFFFFFFF568 0A840001 addui r8,r8,#1 ; increment the text pointer |
FFFFFFFFFFFFF56C BE007F8A bra IGB2 |
FFFFFFFFFFFFF570 IGBRET: |
FFFFFFFFFFFFF570 47E08000 lw r1,[sp] |
FFFFFFFFFFFFF574 37EF8008 ret #8 |
|
|
; ===== Convert the line of text in the input buffer to upper |
5198,42 → 6776,42
; Returns |
; r8 = pointing to end of text in buffer |
; |
FFFFFFFFFFFFE474 TOUPBUF: |
FFFFFFFFFFFFE474 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFE478 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE47C E200111B setlo r8,BUFFER ; set up text pointer |
FFFFFFFFFFFFE480 E0C00000 setlo r3,#0 ; clear quote flag |
FFFFFFFFFFFFE484 TOUPB1: |
FFFFFFFFFFFFE484 40808000 lb r1,[r8] ; get the next text char. |
FFFFFFFFFFFFE488 08840001 add r8,r8,#1 |
FFFFFFFFFFFFE48C B0100D0D beqi r1,#CR,TOUPBRT ; is it end of line? |
FFFFFFFFFFFFE490 B0100622 beqi r1,#'"',DOQUO ; a double quote? |
FFFFFFFFFFFFE494 B0100527 beqi r1,#'''',DOQUO ; or a single quote? |
FFFFFFFFFFFFE498 BE307F69 bne r3,r0,TOUPB1 ; inside quotes? |
FFFFFFFFFFFFE49C 31FFF932 call toUpper ; convert to upper case |
FFFFFFFFFFFFE4A0 6080FFFF sb r1,-1[r8] ; store it |
FFFFFFFFFFFFE4A4 BE007F0A bra TOUPB1 ; and go back for more |
FFFFFFFFFFFFE4A8 DOQUO: |
FFFFFFFFFFFFE4A8 BE300069 bne r3,r0,DOQUO1; are we inside quotes? |
FFFFFFFFFFFFE4AC 04100C09 or r3,r1,r0 ; if not, toggle inside-quotes flag |
FFFFFFFFFFFFE4B0 BE007EAA bra TOUPB1 |
FFFFFFFFFFFFE4B4 DOQUO1: |
FFFFFFFFFFFFE4B4 BE30FE89 bne r3,r1,TOUPB1 ; make sure we're ending proper quote |
FFFFFFFFFFFFE4B8 E0C00000 setlo r3,#0 ; else clear quote flag |
FFFFFFFFFFFFE4BC BE007E4A bra TOUPB1 |
FFFFFFFFFFFFE4C0 TOUPBRT: |
FFFFFFFFFFFFE4C0 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE4C4 37EF8008 ret #8 |
FFFFFFFFFFFFF578 TOUPBUF: |
FFFFFFFFFFFFF578 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFF57C 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF580 9A04111B lea r8,BUFFER ; set up text pointer |
FFFFFFFFFFFFF584 E0C00000 setlo r3,#0 ; clear quote flag |
FFFFFFFFFFFFF588 TOUPB1: |
FFFFFFFFFFFFF588 40808000 lb r1,[r8] ; get the next text char. |
FFFFFFFFFFFFF58C 0A840001 addui r8,r8,#1 |
FFFFFFFFFFFFF590 B0100D0D beqi r1,#CR,TOUPBRT ; is it end of line? |
FFFFFFFFFFFFF594 B0100622 beqi r1,#'"',DOQUO ; a double quote? |
FFFFFFFFFFFFF598 B0100527 beqi r1,#'''',DOQUO ; or a single quote? |
FFFFFFFFFFFFF59C BE307F69 bne r3,r0,TOUPB1 ; inside quotes? |
FFFFFFFFFFFFF5A0 31FFFD73 call toUpper ; convert to upper case |
FFFFFFFFFFFFF5A4 6080FFFF sb r1,-1[r8] ; store it |
FFFFFFFFFFFFF5A8 BE007F0A bra TOUPB1 ; and go back for more |
FFFFFFFFFFFFF5AC DOQUO: |
FFFFFFFFFFFFF5AC BE300069 bne r3,r0,DOQUO1; are we inside quotes? |
FFFFFFFFFFFFF5B0 02118009 mov r3,r1 ; if not, toggle inside-quotes flag |
FFFFFFFFFFFFF5B4 BE007EAA bra TOUPB1 |
FFFFFFFFFFFFF5B8 DOQUO1: |
FFFFFFFFFFFFF5B8 BE30FE89 bne r3,r1,TOUPB1 ; make sure we're ending proper quote |
FFFFFFFFFFFFF5BC E0C00000 setlo r3,#0 ; else clear quote flag |
FFFFFFFFFFFFF5C0 BE007E4A bra TOUPB1 |
FFFFFFFFFFFFF5C4 TOUPBRT: |
FFFFFFFFFFFFF5C4 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF5C8 37EF8008 ret #8 |
|
|
; ===== Convert the character in r1 to upper case |
; |
FFFFFFFFFFFFE4C8 toUpper |
FFFFFFFFFFFFE4C8 A0100361 blt r1,#'a',TOUPRET ; is it < 'a'? |
FFFFFFFFFFFFE4CC A610027A bgt r1,#'z',TOUPRET ; or > 'z'? |
FFFFFFFFFFFFE4D0 0C108020 sub r1,r1,#32 ; if not, make it upper case |
FFFFFFFFFFFFE4D4 TOUPRET |
FFFFFFFFFFFFE4D4 37EF8000 ret |
FFFFFFFFFFFFF5CC toUpper |
FFFFFFFFFFFFF5CC A0100361 blti r1,#'a',TOUPRET ; is it < 'a'? |
FFFFFFFFFFFFF5D0 A610027A bgti r1,#'z',TOUPRET ; or > 'z'? |
FFFFFFFFFFFFF5D4 0E108020 subui r1,r1,#32 ; if not, make it upper case |
FFFFFFFFFFFFF5D8 TOUPRET |
FFFFFFFFFFFFF5D8 37EF8000 ret |
|
|
; 'CHKIO' checks the input. If there's no input, it will return |
5241,24 → 6819,24
; However, if a control-C is read, 'CHKIO' will warm-start BASIC and will |
; not return to the caller. |
; |
FFFFFFFFFFFFE4D8 CHKIO: |
FFFFFFFFFFFFE4D8 0FEF0008 subui sp,sp,#8 ; save link reg |
FFFFFFFFFFFFE4DC 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFE4E0 31FFF394 call GOIN ; get input if possible |
FFFFFFFFFFFFE4E4 B01003FF beq r1,#-1,CHKRET2 ; if Zero, no input |
FFFFFFFFFFFFE4E8 B2100303 bnei r1,#CTRLC,CHKRET ; is it control-C? |
FFFFFFFFFFFFE4EC 33FFF3BE jmp WSTART ; if so, do a warm start |
FFFFFFFFFFFFE4F0 CHKRET2: |
FFFFFFFFFFFFE4F0 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFE4F4 CHKRET: |
FFFFFFFFFFFFE4F4 47EF8000 lw lr,[sp] ;r1=0 |
FFFFFFFFFFFFE4F8 37EF8008 ret #8 |
FFFFFFFFFFFFF5DC CHKIO: |
FFFFFFFFFFFFF5DC 0FEF0008 subui sp,sp,#8 ; save link reg |
FFFFFFFFFFFFF5E0 67EF8000 sw lr,[sp] |
FFFFFFFFFFFFF5E4 31FFF7D6 call GOIN ; get input if possible |
FFFFFFFFFFFFF5E8 B01003FF beqi r1,#-1,CHKRET2 ; if Zero, no input |
FFFFFFFFFFFFF5EC B2100303 bnei r1,#CTRLC,CHKRET ; is it control-C? |
FFFFFFFFFFFFF5F0 33FFF801 jmp WSTART ; if so, do a warm start |
FFFFFFFFFFFFF5F4 CHKRET2: |
FFFFFFFFFFFFF5F4 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFF5F8 CHKRET: |
FFFFFFFFFFFFF5F8 47EF8000 lw lr,[sp] ;r1=0 |
FFFFFFFFFFFFF5FC 37EF8008 ret #8 |
|
|
; ===== Display a CR-LF sequence |
; |
FFFFFFFFFFFFE4FC CRLF: |
FFFFFFFFFFFFE4FC E07FE60B setlo r1,CLMSG |
FFFFFFFFFFFFF600 CRLF: |
FFFFFFFFFFFFF600 E07FF703 setlo r1,CLMSG |
|
|
; ===== Display a zero-ended string pointed to by register r1 |
5265,22 → 6843,22
; Registers Affected |
; r1,r2,r4 |
; |
FFFFFFFFFFFFE500 PRMESG: |
FFFFFFFFFFFFE500 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFE504 67E28000 sw r5,[sp] |
FFFFFFFFFFFFE508 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFE50C 02128009 mov r5,r1 ; r5 = pointer to message |
FFFFFFFFFFFFE510 PRMESG1: |
FFFFFFFFFFFFE510 08528001 add r5,r5,#1 |
FFFFFFFFFFFFE514 4050FFFF lb r1,-1[r5] ; get the char. |
FFFFFFFFFFFFE518 BE100068 beq r1,r0,PRMRET |
FFFFFFFFFFFFE51C 31FFF393 call GOOUT ;else display it trashes r4 |
FFFFFFFFFFFFE520 BE007F8A bra PRMESG1 |
FFFFFFFFFFFFE524 PRMRET: |
FFFFFFFFFFFFE524 02508009 mov r1,r5 |
FFFFFFFFFFFFE528 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFE52C 47E28000 lw r5,[sp] |
FFFFFFFFFFFFE530 37EF8010 ret #16 |
FFFFFFFFFFFFF604 PRMESG: |
FFFFFFFFFFFFF604 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFF608 67E28000 sw r5,[sp] |
FFFFFFFFFFFFF60C 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFF610 02128009 mov r5,r1 ; r5 = pointer to message |
FFFFFFFFFFFFF614 PRMESG1: |
FFFFFFFFFFFFF614 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFF618 4A50FFFF lbu r1,-1[r5] ; get the char. |
FFFFFFFFFFFFF61C BE100068 beq r1,r0,PRMRET |
FFFFFFFFFFFFF620 31FFF7D5 call GOOUT ;else display it trashes r4 |
FFFFFFFFFFFFF624 BE007F8A bra PRMESG1 |
FFFFFFFFFFFFF628 PRMRET: |
FFFFFFFFFFFFF628 02508009 mov r1,r5 |
FFFFFFFFFFFFF62C 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFF630 47E28000 lw r5,[sp] |
FFFFFFFFFFFFF634 37EF8010 ret #16 |
|
|
; ===== Display a zero-ended string pointed to by register r1 |
5287,22 → 6865,22
; Registers Affected |
; r1,r2,r3 |
; |
FFFFFFFFFFFFE534 PRMESGAUX: |
FFFFFFFFFFFFE534 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFE538 67E28000 sw r5,[sp] |
FFFFFFFFFFFFE53C 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFE540 02128009 mov r5,r1 ; r3 = pointer |
FFFFFFFFFFFFE544 PRMESGA1: |
FFFFFFFFFFFFE544 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFE548 4050FFFF lb r1,-1[r5] ; get the char. |
FFFFFFFFFFFFE54C BE100068 beq r1,r0,PRMRETA |
FFFFFFFFFFFFE550 31FFF395 call GOAUXO ;else display it |
FFFFFFFFFFFFE554 BE007F8A bra PRMESGA1 |
FFFFFFFFFFFFE558 PRMRETA: |
FFFFFFFFFFFFE558 02508009 mov r1,r5 |
FFFFFFFFFFFFE55C 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFE560 47E28000 lw r5,[sp] |
FFFFFFFFFFFFE564 37EF8010 ret #16 |
FFFFFFFFFFFFF638 PRMESGAUX: |
FFFFFFFFFFFFF638 0FEF0010 subui sp,sp,#16 |
FFFFFFFFFFFFF63C 67E28000 sw r5,[sp] |
FFFFFFFFFFFFF640 67EF8008 sw lr,8[sp] |
FFFFFFFFFFFFF644 02128009 mov r5,r1 ; r3 = pointer |
FFFFFFFFFFFFF648 PRMESGA1: |
FFFFFFFFFFFFF648 0A528001 addui r5,r5,#1 |
FFFFFFFFFFFFF64C 4050FFFF lb r1,-1[r5] ; get the char. |
FFFFFFFFFFFFF650 BE100068 beq r1,r0,PRMRETA |
FFFFFFFFFFFFF654 31FFF7D7 call GOAUXO ;else display it |
FFFFFFFFFFFFF658 BE007F8A bra PRMESGA1 |
FFFFFFFFFFFFF65C PRMRETA: |
FFFFFFFFFFFFF65C 02508009 mov r1,r5 |
FFFFFFFFFFFFF660 47EF8008 lw lr,8[sp] |
FFFFFFFFFFFFF664 47E28000 lw r5,[sp] |
FFFFFFFFFFFFF668 37EF8010 ret #16 |
|
;***************************************************** |
; The following routines are the only ones that need * |
5313,15 → 6891,15
; ===== Output character to the console (Port 1) from register r1 |
; (Preserves all registers.) |
; |
FFFFFFFFFFFFE568 OUTC: |
FFFFFFFFFFFFE568 33FFEF47 jmp DisplayChar |
FFFFFFFFFFFFF66C OUTC: |
FFFFFFFFFFFFF66C 33FFF07F jmp DisplayChar |
|
|
; ===== Input a character from the console into register D0 (or |
; ===== Input a character from the console into register R1 (or |
; return Zero status if there's no character available). |
; |
FFFFFFFFFFFFE56C INC: |
FFFFFFFFFFFFE56C 33FFEE08 jmp KeybdGetChar |
FFFFFFFFFFFFF670 INC: |
FFFFFFFFFFFFF670 33FFEF07 jmp KeybdGetChar |
|
|
;* |
5328,115 → 6906,112
;* ===== Input a character from the host into register r1 (or |
;* return Zero status if there's no character available). |
;* |
FFFFFFFFFFFFE570 AUXIN: |
FFFFFFFFFFFFE570 31FFED54 call SerialGetChar |
FFFFFFFFFFFFE574 B01003FF beqi r1,#-1,AXIRET_ZERO |
FFFFFFFFFFFFE578 1410807F andi r1,r1,#0x7f ;zero out the high bit |
FFFFFFFFFFFFE57C AXIRET: |
FFFFFFFFFFFFE57C 37EF8000 ret |
FFFFFFFFFFFFE580 AXIRET_ZERO: |
FFFFFFFFFFFFE580 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFE584 37EF8000 ret |
FFFFFFFFFFFFF674 AUXIN: |
FFFFFFFFFFFFF674 31FFEDA4 call SerialGetChar |
FFFFFFFFFFFFF678 B01003FF beqi r1,#-1,AXIRET_ZERO |
FFFFFFFFFFFFF67C 1410807F andi r1,r1,#0x7f ;zero out the high bit |
FFFFFFFFFFFFF680 AXIRET: |
FFFFFFFFFFFFF680 37EF8000 ret |
FFFFFFFFFFFFF684 AXIRET_ZERO: |
FFFFFFFFFFFFF684 0410840A xor r1,r1,r1 |
FFFFFFFFFFFFF688 37EF8000 ret |
|
; ===== Output character to the host (Port 2) from register r1 |
; (Preserves all registers.) |
; |
FFFFFFFFFFFFE588 AUXOUT |
FFFFFFFFFFFFE588 33FFED0C jmp SerialPutChar ; call boot rom routine |
FFFFFFFFFFFFF68C AUXOUT |
FFFFFFFFFFFFF68C 33FFED5C jmp SerialPutChar ; call boot rom routine |
|
|
FFFFFFFFFFFFE58C _cls |
FFFFFFFFFFFFE58C 31FFEED9 call clearScreen |
FFFFFFFFFFFFE590 BE00740A bra FINISH |
FFFFFFFFFFFFF690 _cls |
FFFFFFFFFFFFF690 31FFF011 call clearScreen |
FFFFFFFFFFFFF694 BE00742A bra FINISH |
|
FFFFFFFFFFFFE594 _wait10 |
FFFFFFFFFFFFE594 37EF8000 ret |
FFFFFFFFFFFFE598 _getATAStatus |
FFFFFFFFFFFFE598 37EF8000 ret |
FFFFFFFFFFFFE59C _waitCFNotBusy |
FFFFFFFFFFFFE59C 37EF8000 ret |
FFFFFFFFFFFFE5A0 _rdcf |
FFFFFFFFFFFFE5A0 BE00738A br FINISH |
FFFFFFFFFFFFE5A4 rdcf6 |
FFFFFFFFFFFFE5A4 BE004BEA br ERROR |
FFFFFFFFFFFFF698 _wait10 |
FFFFFFFFFFFFF698 37EF8000 ret |
FFFFFFFFFFFFF69C _getATAStatus |
FFFFFFFFFFFFF69C 37EF8000 ret |
FFFFFFFFFFFFF6A0 _waitCFNotBusy |
FFFFFFFFFFFFF6A0 37EF8000 ret |
FFFFFFFFFFFFF6A4 _rdcf |
FFFFFFFFFFFFF6A4 BE0073AA br FINISH |
FFFFFFFFFFFFF6A8 rdcf6 |
FFFFFFFFFFFFF6A8 BE004C0A br ERROR |
|
|
; ===== Return to the resident monitor, operating system, etc. |
; |
FFFFFFFFFFFFE5A8 BYEBYE: |
FFFFFFFFFFFFE5A8 460F1088 lw sp,OSSP |
FFFFFFFFFFFFE5AC 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFE5B0 37EF8008 ret #8 |
FFFFFFFFFFFFF6AC BYEBYE: |
FFFFFFFFFFFFF6AC 460F1088 lw sp,OSSP |
FFFFFFFFFFFFF6B0 47EF8000 lw lr,[sp] |
FFFFFFFFFFFFF6B4 37EF8008 ret #8 |
|
; MOVE.B #228,D7 return to Tutor |
; TRAP #14 |
|
FFFFFFFFFFFFE5B0 C44E4100BCBD3CBD .align 16 |
FFFFFFFFFFFFE5B8 0000000000D24F00 |
FFFFFFFFFFFFE5C0 .align 16 |
FFFFFFFFFFFFE5C0 726F747061520A0D msgInit db CR,LF,"Raptor64 Tiny BASIC v1.0",CR,LF,"(C) 2012 Robert Finch",CR,LF,LF,0 |
FFFFFFFFFFFFE5C8 20796E6954203436 |
FFFFFFFFFFFFE5D0 3176204349534142 |
FFFFFFFFFFFFE5D8 202943280A0D302E |
FFFFFFFFFFFFE5E0 6F52202032313032 |
FFFFFFFFFFFFE5E8 6E69462074726562 |
FFFFFFFFFFFFE5F0 0A0D000A0A0D6863 OKMSG db CR,LF,"OK",CR,LF,0 |
FFFFFFFFFFFFE5F8 616857000A0D4B4F msgWhat db "What?",CR,LF,0 |
FFFFFFFFFFFFE600 726F53000A0D3F74 SRYMSG db "Sorry." |
FFFFFFFFFFFFE608 6F43000A0D2E7972 msgReadError db "Compact FLASH read error",CR,LF,0 |
FFFFFFFFFFFFE610 4C4620746361706D |
FFFFFFFFFFFFE618 6461657220485341 |
FFFFFFFFFFFFE620 0A0D726F72726520 |
FFFFFFFFFFFFE628 207265626D754E00 msgNumTooBig db "Number is too big",CR,LF,0 |
FFFFFFFFFFFFE630 62206F6F74207369 |
FFFFFFFFFFFFE638 766944000A0D6769 msgDivZero db "Division by zero",CR,LF,0 |
FFFFFFFFFFFFE640 7962206E6F697369 |
FFFFFFFFFFFFE648 000A0D6F72657A20 |
FFFFFFFFFFFFE650 7620666F2074754F msgVarSpace db "Out of variable space",CR,LF,0 |
FFFFFFFFFFFFE658 20656C6261697261 |
FFFFFFFFFFFFE660 000A0D6563617073 |
FFFFFFFFFFFFE668 6620736574796220 msgBytesFree db " bytes free",CR,LF,0 |
FFFFFFFFFFFFE670 0A0D000A0D656572 msgReady db CR,LF,"Ready",CR,LF,0 |
FFFFFFFFFFFFE678 000A0D7964616552 |
FFFFFFFFFFFFE680 6E69746365707845 msgComma db "Expecting a comma",CR,LF,0 |
FFFFFFFFFFFFE688 6D6D6F6320612067 |
FFFFFFFFFFFFE690 656E694C000A0D61 msgLineRange db "Line number too big",CR,LF,0 |
FFFFFFFFFFFFE698 207265626D756E20 |
FFFFFFFFFFFFE6A0 0D676962206F6F74 |
FFFFFFFFFFFFE6A8 746365707845000A msgVar db "Expecting a variable",CR,LF,0 |
FFFFFFFFFFFFE6B0 6176206120676E69 |
FFFFFFFFFFFFE6B8 0A0D656C62616972 |
FFFFFFFFFFFFE6C0 64616220444E5200 msgRNDBad db "RND bad parameter",CR,LF,0 |
FFFFFFFFFFFFE6C8 74656D6172617020 |
FFFFFFFFFFFFE6D0 535953000A0D7265 msgSYSBad db "SYS bad address",CR,LF,0 |
FFFFFFFFFFFFE6D8 6464612064616220 |
FFFFFFFFFFFFE6E0 49000A0D73736572 msgInputVar db "INPUT expecting a variable",CR,LF,0 |
FFFFFFFFFFFFE6E8 707865205455504E |
FFFFFFFFFFFFE6F0 6120676E69746365 |
FFFFFFFFFFFFE6F8 6C62616972617620 |
FFFFFFFFFFFFE700 5458454E000A0D65 msgNextFor db "NEXT without FOR",CR,LF,0 |
FFFFFFFFFFFFE708 74756F6874697720 |
FFFFFFFFFFFFE710 4E000A0D524F4620 msgNextVar db "NEXT expecting a defined variable",CR,LF,0 |
FFFFFFFFFFFFE718 6570786520545845 |
FFFFFFFFFFFFE720 206120676E697463 |
FFFFFFFFFFFFE728 2064656E69666564 |
FFFFFFFFFFFFE730 656C626169726176 |
FFFFFFFFFFFFE738 2F4F544F47000A0D msgBadGotoGosub db "GOTO/GOSUB bad line number",CR,LF,0 |
FFFFFFFFFFFFE740 6162204255534F47 |
FFFFFFFFFFFFE748 6E20656E696C2064 |
FFFFFFFFFFFFE750 000A0D7265626D75 |
FFFFFFFFFFFFE758 77204E5255544552 msgRetWoGosub db "RETURN without GOSUB",CR,LF,0 |
FFFFFFFFFFFFE760 472074756F687469 |
FFFFFFFFFFFFE768 50000A0D4255534F msgTooBig db "Program is too big",CR,LF,0 |
FFFFFFFFFFFFE770 69206D6172676F72 |
FFFFFFFFFFFFE778 6962206F6F742073 |
FFFFFFFFFFFFE780 72747845000A0D67 msgExtraChars db "Extra characters on line ignored",CR,LF,0 |
FFFFFFFFFFFFE788 6361726168632061 |
FFFFFFFFFFFFE790 206E6F2073726574 |
FFFFFFFFFFFFE798 6E676920656E696C |
FFFFFFFFFFFFF6B8 726F747061520A0D msgInit db CR,LF,"Raptor64 Tiny BASIC v1.0",CR,LF,"(C) 2013 Robert Finch",CR,LF,LF,0 |
FFFFFFFFFFFFF6C0 20796E6954203436 |
FFFFFFFFFFFFF6C8 3176204349534142 |
FFFFFFFFFFFFF6D0 202943280A0D302E |
FFFFFFFFFFFFF6D8 6F52202033313032 |
FFFFFFFFFFFFF6E0 6E69462074726562 |
FFFFFFFFFFFFF6E8 0A0D000A0A0D6863 OKMSG db CR,LF,"OK",CR,LF,0 |
FFFFFFFFFFFFF6F0 616857000A0D4B4F msgWhat db "What?",CR,LF,0 |
FFFFFFFFFFFFF6F8 726F53000A0D3F74 SRYMSG db "Sorry." |
FFFFFFFFFFFFF700 6F43000A0D2E7972 msgReadError db "Compact FLASH read error",CR,LF,0 |
FFFFFFFFFFFFF708 4C4620746361706D |
FFFFFFFFFFFFF710 6461657220485341 |
FFFFFFFFFFFFF718 0A0D726F72726520 |
FFFFFFFFFFFFF720 207265626D754E00 msgNumTooBig db "Number is too big",CR,LF,0 |
FFFFFFFFFFFFF728 62206F6F74207369 |
FFFFFFFFFFFFF730 766944000A0D6769 msgDivZero db "Division by zero",CR,LF,0 |
FFFFFFFFFFFFF738 7962206E6F697369 |
FFFFFFFFFFFFF740 000A0D6F72657A20 |
FFFFFFFFFFFFF748 7620666F2074754F msgVarSpace db "Out of variable space",CR,LF,0 |
FFFFFFFFFFFFF750 20656C6261697261 |
FFFFFFFFFFFFF758 000A0D6563617073 |
FFFFFFFFFFFFF760 6620736574796220 msgBytesFree db " bytes free",CR,LF,0 |
FFFFFFFFFFFFF768 0A0D000A0D656572 msgReady db CR,LF,"Ready",CR,LF,0 |
FFFFFFFFFFFFF770 000A0D7964616552 |
FFFFFFFFFFFFF778 6E69746365707845 msgComma db "Expecting a comma",CR,LF,0 |
FFFFFFFFFFFFF780 6D6D6F6320612067 |
FFFFFFFFFFFFF788 656E694C000A0D61 msgLineRange db "Line number too big",CR,LF,0 |
FFFFFFFFFFFFF790 207265626D756E20 |
FFFFFFFFFFFFF798 0D676962206F6F74 |
FFFFFFFFFFFFF7A0 746365707845000A msgVar db "Expecting a variable",CR,LF,0 |
FFFFFFFFFFFFF7A8 6176206120676E69 |
FFFFFFFFFFFFF7B0 0A0D656C62616972 |
FFFFFFFFFFFFF7B8 64616220444E5200 msgRNDBad db "RND bad parameter",CR,LF,0 |
FFFFFFFFFFFFF7C0 74656D6172617020 |
FFFFFFFFFFFFF7C8 535953000A0D7265 msgSYSBad db "SYS bad address",CR,LF,0 |
FFFFFFFFFFFFF7D0 6464612064616220 |
FFFFFFFFFFFFF7D8 49000A0D73736572 msgInputVar db "INPUT expecting a variable",CR,LF,0 |
FFFFFFFFFFFFF7E0 707865205455504E |
FFFFFFFFFFFFF7E8 6120676E69746365 |
FFFFFFFFFFFFF7F0 6C62616972617620 |
FFFFFFFFFFFFF7F8 5458454E000A0D65 msgNextFor db "NEXT without FOR",CR,LF,0 |
FFFFFFFFFFFFF800 74756F6874697720 |
FFFFFFFFFFFFF808 4E000A0D524F4620 msgNextVar db "NEXT expecting a defined variable",CR,LF,0 |
FFFFFFFFFFFFF810 6570786520545845 |
FFFFFFFFFFFFF818 206120676E697463 |
FFFFFFFFFFFFF820 2064656E69666564 |
FFFFFFFFFFFFF828 656C626169726176 |
FFFFFFFFFFFFF830 2F4F544F47000A0D msgBadGotoGosub db "GOTO/GOSUB bad line number",CR,LF,0 |
FFFFFFFFFFFFF838 6162204255534F47 |
FFFFFFFFFFFFF840 6E20656E696C2064 |
FFFFFFFFFFFFF848 000A0D7265626D75 |
FFFFFFFFFFFFF850 77204E5255544552 msgRetWoGosub db "RETURN without GOSUB",CR,LF,0 |
FFFFFFFFFFFFF858 472074756F687469 |
FFFFFFFFFFFFF860 50000A0D4255534F msgTooBig db "Program is too big",CR,LF,0 |
FFFFFFFFFFFFF868 69206D6172676F72 |
FFFFFFFFFFFFF870 6962206F6F742073 |
FFFFFFFFFFFFF878 72747845000A0D67 msgExtraChars db "Extra characters on line ignored",CR,LF,0 |
FFFFFFFFFFFFF880 6361726168632061 |
FFFFFFFFFFFFF888 206E6F2073726574 |
FFFFFFFFFFFFF890 6E676920656E696C |
|
FFFFFFFFFFFFE7A0 00000A0D6465726F align 8 |
FFFFFFFFFFFFE7A8 align 8 |
FFFFFFFFFFFFF898 00000A0D6465726F align 8 |
FFFFFFFFFFFFF8A0 align 8 |
LSTROM equ * ; end of possible ROM area |
; END |
|
5443,8 → 7018,8
;* |
;* ===== Return to the resident monitor, operating system, etc. |
;* |
FFFFFFFFFFFFE7A8 BYEBYE: |
FFFFFFFFFFFFE7A8 33FFF096 jmp Monitor |
FFFFFFFFFFFFF8A0 BYEBYE: |
FFFFFFFFFFFFF8A0 33FFF20A jmp Monitor |
; MOVE.B #228,D7 ;return to Tutor |
; TRAP #14 |
|
5452,280 → 7027,354
; Checkerboard RAM tester |
;============================================================================== |
; |
FFFFFFFFFFFFE7AC code |
FFFFFFFFFFFFE7A8 0000000033FFF096 align 16 |
FFFFFFFFFFFFE7B0 align 16 |
FFFFFFFFFFFFE7B0 ramtest: |
FFFFFFFFFFFFE7B0 04002009 or r8,r0,r0 ; r8 = 0 |
FFFFFFFFFFFFE7B4 E6AA5555 ; SETLO |
FFFFFFFFFFFFE7B8 EE9556AA ; SETMID |
FFFFFFFFFFFFE7BC F68AAAA5 ; SETHI |
FFFFFFFFFFFFE7C0 040D0409 ori r1,r0,#0xAAAA5555AAAA5555 ; checkerboard pattern |
FFFFFFFFFFFFE7C4 ramtest2: |
FFFFFFFFFFFFE7C4 66808000 sw r1,[r8] ; save the checkerboard to memory |
FFFFFFFFFFFFE7C8 46810000 lw r2,[r8] ; read it back |
FFFFFFFFFFFFE7CC 04110C06 cmp r3,r1,r2 ; is it the same ? |
FFFFFFFFFFFFE7D0 BE3000C9 bne r3,r0,ramtest1 |
FFFFFFFFFFFFE7D4 0A840008 addui r8,r8,#8 ; increment RAM pointer |
FFFFFFFFFFFFE7D8 E6800000 ; SETLO |
FFFFFFFFFFFFE7DC EE800010 ; SETMID |
FFFFFFFFFFFFE7E0 048D0C06 cmpi r3,r8,#0x0000_0000_0400_0000 |
FFFFFFFFFFFFE7E4 BE307F00 blt r3,r0,ramtest2 |
FFFFFFFFFFFFE7E8 ramtest1: |
FFFFFFFFFFFFE7E8 04802809 or r10,r8,r0 ; r10 = max ram address |
FFFFFFFFFFFFF8A4 code |
FFFFFFFFFFFFF8A0 0000000033FFF20A align 16 |
FFFFFFFFFFFFF8A8 0000000000000000 |
FFFFFFFFFFFFF8B0 align 16 |
FFFFFFFFFFFFF8B0 ramtest: |
FFFFFFFFFFFFF8B0 04002009 or r8,r0,r0 ; r8 = 0 |
FFFFFFFFFFFFF8B4 E6AA5555 ; SETLO |
FFFFFFFFFFFFF8B8 EE9556AA ; SETMID |
FFFFFFFFFFFFF8BC F68AAAA5 ; SETHI |
FFFFFFFFFFFFF8C0 040D0409 ori r1,r0,#0xAAAA5555AAAA5555 ; checkerboard pattern |
FFFFFFFFFFFFF8C4 ramtest2: |
FFFFFFFFFFFFF8C4 66808000 sw r1,[r8] ; save the checkerboard to memory |
FFFFFFFFFFFFF8C8 46810000 lw r2,[r8] ; read it back |
FFFFFFFFFFFFF8CC 04110C06 cmp r3,r1,r2 ; is it the same ? |
FFFFFFFFFFFFF8D0 BE3000C9 bne r3,r0,ramtest1 |
FFFFFFFFFFFFF8D4 0A840008 addui r8,r8,#8 ; increment RAM pointer |
FFFFFFFFFFFFF8D8 E6800000 ; SETLO |
FFFFFFFFFFFFF8DC EE800010 ; SETMID |
FFFFFFFFFFFFF8E0 048D0C06 cmpi r3,r8,#0x0000_0000_0400_0000 |
FFFFFFFFFFFFF8E4 BE307F00 blt r3,r0,ramtest2 |
FFFFFFFFFFFFF8E8 ramtest1: |
FFFFFFFFFFFFF8E8 04802809 or r10,r8,r0 ; r10 = max ram address |
; readback the checkerboard pattern |
FFFFFFFFFFFFE7EC 04002009 or r8,r0,r0 ; r8 = 0 |
FFFFFFFFFFFFE7F0 ramtest4: |
FFFFFFFFFFFFE7F0 46810000 lw r2,[r8] |
FFFFFFFFFFFFE7F4 E6AA5555 ; SETLO |
FFFFFFFFFFFFE7F8 EE9556AA ; SETMID |
FFFFFFFFFFFFE7FC F68AAAA5 ; SETHI |
FFFFFFFFFFFFE800 042D0C06 cmpi r3,r2,#0xAAAA5555AAAA5555 |
FFFFFFFFFFFFE804 BE3000C9 bne r3,r0,ramtest3 |
FFFFFFFFFFFFE808 08840008 addi r8,r8,#8 |
FFFFFFFFFFFFE80C E6800000 ; SETLO |
FFFFFFFFFFFFE810 EE800004 ; SETMID |
FFFFFFFFFFFFE814 048D0C06 cmpi r3,r8,#0x0000_0000_0100_0000 |
FFFFFFFFFFFFE818 BE307EC0 blt r3,r0,ramtest4 |
FFFFFFFFFFFFE81C ramtest3: |
FFFFFFFFFFFFE81C BE850389 bne r8,r10,ramtest8 ; check for equal maximum address |
FFFFFFFFFFFFF8EC 04002009 or r8,r0,r0 ; r8 = 0 |
FFFFFFFFFFFFF8F0 ramtest4: |
FFFFFFFFFFFFF8F0 46810000 lw r2,[r8] |
FFFFFFFFFFFFF8F4 E6AA5555 ; SETLO |
FFFFFFFFFFFFF8F8 EE9556AA ; SETMID |
FFFFFFFFFFFFF8FC F68AAAA5 ; SETHI |
FFFFFFFFFFFFF900 042D0C06 cmpi r3,r2,#0xAAAA5555AAAA5555 |
FFFFFFFFFFFFF904 BE3000C9 bne r3,r0,ramtest3 |
FFFFFFFFFFFFF908 08840008 addi r8,r8,#8 |
FFFFFFFFFFFFF90C E6800000 ; SETLO |
FFFFFFFFFFFFF910 EE800004 ; SETMID |
FFFFFFFFFFFFF914 048D0C06 cmpi r3,r8,#0x0000_0000_0100_0000 |
FFFFFFFFFFFFF918 BE307EC0 blt r3,r0,ramtest4 |
FFFFFFFFFFFFF91C ramtest3: |
FFFFFFFFFFFFF91C BE850389 bne r8,r10,ramtest8 ; check for equal maximum address |
|
; perform ramtest again with inverted checkerboard |
FFFFFFFFFFFFE820 04002009 or r8,r0,r0 ; r8 = 0 |
FFFFFFFFFFFFE824 E695AAAA ; SETLO |
FFFFFFFFFFFFE828 EEAAA955 ; SETMID |
FFFFFFFFFFFFE82C F685555A ; SETHI |
FFFFFFFFFFFFE830 040D0409 ori r1,r0,#0x5555AAAA5555AAAA |
FFFFFFFFFFFFE834 ramtest5: |
FFFFFFFFFFFFE834 66808000 sw r1,[r8] |
FFFFFFFFFFFFE838 46810000 lw r2,[r8] |
FFFFFFFFFFFFE83C 04110C06 cmp r3,r1,r2 |
FFFFFFFFFFFFE840 BE3000C9 bne r3,r0,ramtest6 |
FFFFFFFFFFFFE844 08840008 addi r8,r8,#8 |
FFFFFFFFFFFFE848 E6800000 ; SETLO |
FFFFFFFFFFFFE84C EE800004 ; SETMID |
FFFFFFFFFFFFE850 048D0C06 cmpi r3,r8,#0x0000_0000_0100_0000 |
FFFFFFFFFFFFE854 BE307F00 blt r3,r0,ramtest5 |
FFFFFFFFFFFFE858 ramtest6: |
FFFFFFFFFFFFE858 04802C09 or r11,r8,r0 ; r11 = max ram address |
FFFFFFFFFFFFF920 04002009 or r8,r0,r0 ; r8 = 0 |
FFFFFFFFFFFFF924 E695AAAA ; SETLO |
FFFFFFFFFFFFF928 EEAAA955 ; SETMID |
FFFFFFFFFFFFF92C F685555A ; SETHI |
FFFFFFFFFFFFF930 040D0409 ori r1,r0,#0x5555AAAA5555AAAA |
FFFFFFFFFFFFF934 ramtest5: |
FFFFFFFFFFFFF934 66808000 sw r1,[r8] |
FFFFFFFFFFFFF938 46810000 lw r2,[r8] |
FFFFFFFFFFFFF93C 04110C06 cmp r3,r1,r2 |
FFFFFFFFFFFFF940 BE3000C9 bne r3,r0,ramtest6 |
FFFFFFFFFFFFF944 08840008 addi r8,r8,#8 |
FFFFFFFFFFFFF948 E6800000 ; SETLO |
FFFFFFFFFFFFF94C EE800004 ; SETMID |
FFFFFFFFFFFFF950 048D0C06 cmpi r3,r8,#0x0000_0000_0100_0000 |
FFFFFFFFFFFFF954 BE307F00 blt r3,r0,ramtest5 |
FFFFFFFFFFFFF958 ramtest6: |
FFFFFFFFFFFFF958 04802C09 or r11,r8,r0 ; r11 = max ram address |
; readback checkerboard |
FFFFFFFFFFFFE85C 04002009 or r8,r0,r0 |
FFFFFFFFFFFFE860 ramtest7: |
FFFFFFFFFFFFE860 46810000 lw r2,[r8] |
FFFFFFFFFFFFE864 E695AAAA ; SETLO |
FFFFFFFFFFFFE868 EEAAA955 ; SETMID |
FFFFFFFFFFFFE86C F685555A ; SETHI |
FFFFFFFFFFFFE870 042D0C06 cmpi r3,r2,#0x5555AAAA5555AAAA |
FFFFFFFFFFFFE874 BE3000C9 bne r3,r0,ramtest8 |
FFFFFFFFFFFFE878 08840008 addi r8,r8,#8 |
FFFFFFFFFFFFE87C E6800000 ; SETLO |
FFFFFFFFFFFFE880 EE800004 ; SETMID |
FFFFFFFFFFFFE884 048D0C06 cmpi r3,r8,#0x0000_0000_0100_0000 |
FFFFFFFFFFFFE888 BE307EC0 blt r3,r0,ramtest7 |
FFFFFFFFFFFFE88C ramtest8: |
FFFFFFFFFFFFE88C BE858048 beq r8,r11,ramtest9 |
FFFFFFFFFFFFE890 0485A014 min r8,r8,r11 |
FFFFFFFFFFFFE894 ramtest9: |
FFFFFFFFFFFFE894 BE850048 beq r8,r10,ramtest10 |
FFFFFFFFFFFFE898 04852014 min r8,r8,r10 |
FFFFFFFFFFFFE89C ramtest10: |
FFFFFFFFFFFFE89C 66040400 sw r8,0x00000400 ;memend |
FFFFFFFFFFFFE8A0 37EF8000 ret |
FFFFFFFFFFFFF95C 04002009 or r8,r0,r0 |
FFFFFFFFFFFFF960 ramtest7: |
FFFFFFFFFFFFF960 46810000 lw r2,[r8] |
FFFFFFFFFFFFF964 E695AAAA ; SETLO |
FFFFFFFFFFFFF968 EEAAA955 ; SETMID |
FFFFFFFFFFFFF96C F685555A ; SETHI |
FFFFFFFFFFFFF970 042D0C06 cmpi r3,r2,#0x5555AAAA5555AAAA |
FFFFFFFFFFFFF974 BE3000C9 bne r3,r0,ramtest8 |
FFFFFFFFFFFFF978 08840008 addi r8,r8,#8 |
FFFFFFFFFFFFF97C E6800000 ; SETLO |
FFFFFFFFFFFFF980 EE800004 ; SETMID |
FFFFFFFFFFFFF984 048D0C06 cmpi r3,r8,#0x0000_0000_0100_0000 |
FFFFFFFFFFFFF988 BE307EC0 blt r3,r0,ramtest7 |
FFFFFFFFFFFFF98C ramtest8: |
FFFFFFFFFFFFF98C BE858048 beq r8,r11,ramtest9 |
FFFFFFFFFFFFF990 0485A014 min r8,r8,r11 |
FFFFFFFFFFFFF994 ramtest9: |
FFFFFFFFFFFFF994 BE850048 beq r8,r10,ramtest10 |
FFFFFFFFFFFFF998 04852014 min r8,r8,r10 |
FFFFFFFFFFFFF99C ramtest10: |
FFFFFFFFFFFFF99C 66040400 sw r8,0x00000400 ;memend |
FFFFFFFFFFFFF9A0 37EF8000 ret |
|
;------------------------------------------- |
;------------------------------------------- |
; |
FFFFFFFFFFFFE8A4 iberr_rout: |
FFFFFFFFFFFFE8A4 9A00E92B lea r1,msgiberr |
FFFFFFFFFFFFE8A8 31FFEFE7 call DisplayString |
FFFFFFFFFFFFE8AC 020085E8 mfspr r1,EPC |
FFFFFFFFFFFFE8B0 31FFF019 call DisplayWord |
FFFFFFFFFFFFE8B4 00000028 wait |
FFFFFFFFFFFFE8B8 33FFEC07 jmp start |
FFFFFFFFFFFFE8BC dberr_rout: |
FFFFFFFFFFFFE8BC 9A00E910 lea r1,msgdberr |
FFFFFFFFFFFFE8C0 31FFEFE7 call DisplayString |
FFFFFFFFFFFFE8C4 02008628 mfspr r1,ERRADR |
FFFFFFFFFFFFE8C8 31FFF019 call DisplayWord |
FFFFFFFFFFFFE8CC 9A00E924 lea r1,msgEPC |
FFFFFFFFFFFFE8D0 31FFEFE7 call DisplayString |
FFFFFFFFFFFFE8D4 020085E8 mfspr r1,EPC |
FFFFFFFFFFFFE8D8 31FFF019 call DisplayWord |
FFFFFFFFFFFFE8DC 31FFF93F call CRLF |
FFFFFFFFFFFFE8E0 1601001F lw r2,#31 |
FFFFFFFFFFFFE8E4 dberr1: |
FFFFFFFFFFFFE8E4 02200FA9 mtspr PCHI,r2 |
FFFFFFFFFFFFE8E8 DE000000 nop |
FFFFFFFFFFFFE8EC DE000000 nop |
FFFFFFFFFFFFE8F0 DE000000 nop |
FFFFFFFFFFFFE8F4 02008FE8 mfspr r1,PCHISTORIC |
FFFFFFFFFFFFE8F8 31FFF019 call DisplayWord |
FFFFFFFFFFFFE8FC 31FFF93F call CRLF |
FFFFFFFFFFFFE900 BE017F2F loop r2,dberr1 |
FFFFFFFFFFFFE904 00000028 wait |
FFFFFFFFFFFFE908 33FFEC07 jmp start |
FFFFFFFFFFFFE908 0000000033FFEC07 .align 16 |
FFFFFFFFFFFFE910 .align 16 |
FFFFFFFFFFFFE910 msgdberr: |
FFFFFFFFFFFFE910 7375622061746144 db "Data bus error at: ",0 |
FFFFFFFFFFFFE918 6120726F72726520 |
FFFFFFFFFFFFE924 msgEPC: |
FFFFFFFFFFFFE920 4350452000203A74 db " EPC: ",0 |
FFFFFFFFFFFFE92B msgiberr: |
FFFFFFFFFFFFE928 662072724500203A db "Err fetching instruction at: ",0 |
FFFFFFFFFFFFE930 20676E6968637465 |
FFFFFFFFFFFFE938 7463757274736E69 |
FFFFFFFFFFFFE940 203A7461206E6F69 |
FFFFFFFFFFFFE948 0000000000000000 .align 16 |
FFFFFFFFFFFFE950 .align 16 |
FFFFFFFFFFFFF9A4 iberr_rout: |
FFFFFFFFFFFFF9A4 9A00FA3B lea r1,msgiberr |
FFFFFFFFFFFFF9A8 31FFF122 call DisplayString |
FFFFFFFFFFFFF9AC 020085E8 mfspr r1,EPC |
FFFFFFFFFFFFF9B0 31FFF169 call DisplayWord |
FFFFFFFFFFFFF9B4 00000028 wait |
FFFFFFFFFFFFF9B8 33FFEC0B jmp start |
FFFFFFFFFFFFF9BC dberr_rout: |
FFFFFFFFFFFFF9BC E6A00100 ; SETLO |
FFFFFFFFFFFFF9C0 EE800400 ; SETMID |
FFFFFFFFFFFFF9C4 040D7809 lw sp,#0x100200100 |
FFFFFFFFFFFFF9C8 9A00FA20 lea r1,msgdberr |
FFFFFFFFFFFFF9CC 31FFF122 call DisplayString |
FFFFFFFFFFFFF9D0 02008628 mfspr r1,ERRADR |
FFFFFFFFFFFFF9D4 31FFF169 call DisplayWord |
FFFFFFFFFFFFF9D8 9A00FA34 lea r1,msgEPC |
FFFFFFFFFFFFF9DC 31FFF122 call DisplayString |
FFFFFFFFFFFFF9E0 020085E8 mfspr r1,EPC |
FFFFFFFFFFFFF9E4 31FFF169 call DisplayWord |
FFFFFFFFFFFFF9E8 31FFFD80 call CRLF |
FFFFFFFFFFFFF9EC 1601001F lw r2,#31 |
FFFFFFFFFFFFF9F0 dberr1: |
FFFFFFFFFFFFF9F0 02200FA9 mtspr PCHI,r2 |
FFFFFFFFFFFFF9F4 DE000000 nop |
FFFFFFFFFFFFF9F8 DE000000 nop |
FFFFFFFFFFFFF9FC DE000000 nop |
FFFFFFFFFFFFFA00 02008FE8 mfspr r1,PCHISTORIC |
FFFFFFFFFFFFFA04 31FFF169 call DisplayWord |
FFFFFFFFFFFFFA08 31FFFD80 call CRLF |
FFFFFFFFFFFFFA0C BE017F2F loop r2,dberr1 |
FFFFFFFFFFFFFA10 00000028 wait |
FFFFFFFFFFFFFA14 33FFEC0B jmp start |
FFFFFFFFFFFFFA18 0000000000000000 .align 16 |
FFFFFFFFFFFFFA20 .align 16 |
FFFFFFFFFFFFFA20 msgdberr: |
FFFFFFFFFFFFFA20 7375622061746144 db "Data bus error at: ",0 |
FFFFFFFFFFFFFA28 6120726F72726520 |
FFFFFFFFFFFFFA34 msgEPC: |
FFFFFFFFFFFFFA30 4350452000203A74 db " EPC: ",0 |
FFFFFFFFFFFFFA3B msgiberr: |
FFFFFFFFFFFFFA38 662072724500203A db "Err fetching instruction at: ",0 |
FFFFFFFFFFFFFA40 20676E6968637465 |
FFFFFFFFFFFFFA48 7463757274736E69 |
FFFFFFFFFFFFFA50 203A7461206E6F69 |
FFFFFFFFFFFFFA5C .align 4 |
|
;------------------------------------------------------------------------------ |
; IRQ routine |
; |
; Interrupts are automatically disabled at the time of the interrupt in order |
; to prevent nested interrupts from occuring. Interrupts are re-enabled by |
; the IRET instruction at the end of the interrupt routine. If the interrupt |
; turns out to not match a hardware interrupt, then a software context |
; switching interrupt is assumed. |
; |
; This routine uses it's own private interrupt stack; the stack of the |
; interrupted context is not used at all. A couple of working registers are |
; saved off not on the stack. We can get away with this because nested |
; interrupts are not allowed. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFE950 irqrout: |
FFFFFFFFFFFFE950 0FEF0020 subui sp,sp,#32 |
FFFFFFFFFFFFE954 67E08000 sw r1,[sp] ; save off a working register |
FFFFFFFFFFFFE958 67E10008 sw r2,8[sp] ; and a second work register |
FFFFFFFFFFFFE95C 67ED0010 sw r26,16[sp] ; save off implicit constant builder reg |
FFFFFFFFFFFFE960 67EF8018 sw lr,24[sp] |
FFFFFFFFFFFFE964 E69C0FF0 ; SETLO |
FFFFFFFFFFFFE968 EE800003 ; SETMID |
FFFFFFFFFFFFE96C 6A0D0421 inch r1,PIC ; r1= which IRQ line is active |
FFFFFFFFFFFFFA5C irqrout: |
FFFFFFFFFFFFFA5C 660F1460 sw sp,sp_save ; use our own private stack for interrupt processing |
FFFFFFFFFFFFFA60 660F9468 sw lr,lr_save ; so, save off the sp and working registers |
FFFFFFFFFFFFFA64 660D1480 sw r26,r26_save |
FFFFFFFFFFFFFA68 66009470 sw r1,r1_save |
FFFFFFFFFFFFFA6C 66011478 sw r2,r2_save |
|
FFFFFFFFFFFFFA70 E6801000 ; SETLO |
FFFFFFFFFFFFFA74 EE800400 ; SETMID |
FFFFFFFFFFFFFA78 040D7809 lw sp,#0x1_00001000 ; the second two kbytes |
FFFFFFFFFFFFFA7C E69C0FF0 ; SETLO |
FFFFFFFFFFFFFA80 EE800003 ; SETMID |
FFFFFFFFFFFFFA84 6A0D0421 inch r1,PIC ; r1= which IRQ line is active |
|
; Dispatch fork, in order of required timeliness |
|
FFFFFFFFFFFFFA88 B0100D02 beqi r1,#2,irq1000Hz |
FFFFFFFFFFFFFA8C B0101903 beqi r1,#3,irq100Hz |
FFFFFFFFFFFFFA90 B0102008 beqi r1,#8,irqSerial |
FFFFFFFFFFFFFA94 B010220D beqi r1,#13,irqRaster |
FFFFFFFFFFFFFA98 B010240F beqi r1,#15,irqKeybd |
FFFFFFFFFFFFFA9C B0102601 beqi r1,#1,irqColdStart ; CTRL-ALT-DEL interrupt |
|
; Here, none of the hardware interrupts were active so |
; assume software context switch interrupt |
; |
FFFFFFFFFFFFFAA0 460F1460 lw sp,sp_save |
FFFFFFFFFFFFFAA4 460F9468 lw lr,lr_save |
FFFFFFFFFFFFFAA8 460D1480 lw r26,r26_save |
FFFFFFFFFFFFFAAC 46009470 lw r1,r1_save |
FFFFFFFFFFFFFAB0 46011478 lw r2,r2_save |
FFFFFFFFFFFFFAB4 0000000F iepp |
FFFFFFFFFFFFFAB8 01900020 iret |
|
; 1000 Hz interrupt |
; This IRQ must be fast, so it's placed inline |
; This IRQ must be fast, so it's placed inline. It's also the first |
; IRQ checked for in the interrupt dispatch. |
; Increments the millisecond counter, and switches to the next context |
; |
FFFFFFFFFFFFE970 irq1000Hz: |
FFFFFFFFFFFFE970 B2101602 bnei r1,#2,irq100Hz |
FFFFFFFFFFFFE974 E6BF0000 ; SETLO |
FFFFFFFFFFFFE978 6A0D0028 outb r0,0xFFFFFFFF_FFFF0000 ; acknowledge interrupt |
FFFFFFFFFFFFE97C 46009400 lw r1,Milliseconds ; increment milliseconds count |
FFFFFFFFFFFFE980 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFE984 66009400 sw r1,Milliseconds |
FFFFFFFFFFFFE988 E6900000 ; SETLO |
FFFFFFFFFFFFE98C EE800003 ; SETMID |
FFFFFFFFFFFFE990 6A0D082D lea r2,TEXTSCR |
FFFFFFFFFFFFE994 8220814C inch r1,332[r2] |
FFFFFFFFFFFFE998 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFE99C 9220814C outc r1,332[r2] |
FFFFFFFFFFFFE9A0 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFE9A4 47ED0010 lw r26,16[sp] ; restore registers from stack |
FFFFFFFFFFFFE9A8 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFE9AC 47E08000 lw r1,[sp] |
FFFFFFFFFFFFE9B0 0BEF0020 addui sp,sp,#32 ; restore stack pointer |
FFFFFFFFFFFFE9B4 0000000F iepp ; move to the next context |
FFFFFFFFFFFFE9B8 DE000000 nop |
FFFFFFFFFFFFE9BC DE000000 nop |
FFFFFFFFFFFFE9C0 DE000000 nop |
FFFFFFFFFFFFE9C4 01900020 iret ; return to the next context |
FFFFFFFFFFFFFABC irq1000Hz: |
FFFFFFFFFFFFFABC E69CFFFD ; SETLO |
FFFFFFFFFFFFFAC0 EE800003 ; SETMID |
FFFFFFFFFFFFFAC4 6A0D0028 outb r0,0xDCFFFD ; acknowledge interrupt |
FFFFFFFFFFFFFAC8 46009400 lw r1,Milliseconds ; increment milliseconds count |
FFFFFFFFFFFFFACC 0A108001 addui r1,r1,#1 |
FFFFFFFFFFFFFAD0 66009400 sw r1,Milliseconds |
FFFFFFFFFFFFFAD4 460F1460 lw sp,sp_save |
FFFFFFFFFFFFFAD8 460F9468 lw lr,lr_save |
FFFFFFFFFFFFFADC 460D1480 lw r26,r26_save |
FFFFFFFFFFFFFAE0 46009470 lw r1,r1_save |
FFFFFFFFFFFFFAE4 46011478 lw r2,r2_save |
FFFFFFFFFFFFFAE8 0000000F iepp ; move to the next context |
FFFFFFFFFFFFFAEC 01900020 iret ; return to the next context |
|
; 100 Hz interrupt |
; This IRQ could have some work to do, including flashing a cursor. So |
; we call a subroutine. |
; |
FFFFFFFFFFFFE9C8 irq100Hz: |
FFFFFFFFFFFFE9C8 B2100403 bnei r1,#3,irqSerial |
FFFFFFFFFFFFE9CC 4600B000 lw r1,p100IRQvec |
FFFFFFFFFFFFFAF0 irq100Hz: |
FFFFFFFFFFFFFAF0 4600B000 lw r1,p100IRQvec |
; jal lr,[r1] |
FFFFFFFFFFFFE9D0 31FFEE3B call Pulse100 |
FFFFFFFFFFFFE9D4 BE0001AA bra irqret |
FFFFFFFFFFFFFAF4 31FFEF73 call Pulse100 |
FFFFFFFFFFFFFAF8 irqret: |
FFFFFFFFFFFFFAF8 460F1460 lw sp,sp_save |
FFFFFFFFFFFFFAFC 460F9468 lw lr,lr_save |
FFFFFFFFFFFFFB00 460D1480 lw r26,r26_save |
FFFFFFFFFFFFFB04 46009470 lw r1,r1_save |
FFFFFFFFFFFFFB08 46011478 lw r2,r2_save |
FFFFFFFFFFFFFB0C 01900020 iret |
|
FFFFFFFFFFFFE9D8 irqSerial: |
FFFFFFFFFFFFE9D8 B2100408 bnei r1,#8,irqRaster |
FFFFFFFFFFFFE9DC 4600B010 lw r1,serialIRQvec |
FFFFFFFFFFFFE9E0 341F8000 jal lr,[r1] |
FFFFFFFFFFFFE9E4 BE00012A bra irqret |
FFFFFFFFFFFFFB10 irqSerial: |
FFFFFFFFFFFFFB10 4600B010 lw r1,serialIRQvec |
FFFFFFFFFFFFFB14 341F8000 jal lr,[r1] |
FFFFFFFFFFFFFB18 BE007F0A bra irqret |
|
FFFFFFFFFFFFE9E8 irqRaster: |
FFFFFFFFFFFFE9E8 B210040D bnei r1,#13,irqKeybd |
FFFFFFFFFFFFE9EC 4600B018 lw r1,rasterIRQvec |
FFFFFFFFFFFFFB1C irqRaster: |
FFFFFFFFFFFFFB1C 4600B018 lw r1,rasterIRQvec |
; jal lr,[r1] |
FFFFFFFFFFFFE9F0 31FFF2B1 call RasterIRQfn |
FFFFFFFFFFFFE9F4 BE0000AA bra irqret |
FFFFFFFFFFFFFB20 31FFF46B call RasterIRQfn |
FFFFFFFFFFFFFB24 BE007EAA bra irqret |
|
FFFFFFFFFFFFE9F8 irqKeybd: |
FFFFFFFFFFFFE9F8 B0118901 beqi r1,#1,ColdStart ; CTRL-ALT-DEL interrupt |
FFFFFFFFFFFFE9FC B210030F bnei r1,#15,irqret |
FFFFFFFFFFFFEA00 4600B008 lw r1,keybdIRQvec |
FFFFFFFFFFFFEA04 31FFEDF1 call KeybdIRQ |
FFFFFFFFFFFFFB28 irqKeybd: |
FFFFFFFFFFFFFB28 4600B008 lw r1,keybdIRQvec |
FFFFFFFFFFFFFB2C 31FFEEF0 call KeybdIRQ |
; jal lr,[r1] |
FFFFFFFFFFFFFB30 BE007E4A bra irqret |
|
FFFFFFFFFFFFEA08 irqret: |
FFFFFFFFFFFFEA08 47EF8018 lw lr,24[sp] |
FFFFFFFFFFFFEA0C 47ED0010 lw r26,16[sp] ; restore registers from stack |
FFFFFFFFFFFFEA10 47E10008 lw r2,8[sp] |
FFFFFFFFFFFFEA14 47E08000 lw r1,[sp] |
FFFFFFFFFFFFEA18 0BEF0020 addui sp,sp,#32 ; restore stack pointer |
FFFFFFFFFFFFEA1C 01900020 iret |
FFFFFFFFFFFFFB34 irqColdStart: |
FFFFFFFFFFFFFB34 33FFEC0B jmp ColdStart |
|
;------------------------------------------- |
;------------------------------------------------------------------------------ |
; NMI routine |
; |
; The NMI line is tied to the parity error signal. But also any non-initialized |
; interrupts get sent here. |
;------------------------------------------------------------------------------ |
; |
FFFFFFFFFFFFFB38 nmirout: |
FFFFFFFFFFFFFB38 660F1460 sw sp,sp_save |
FFFFFFFFFFFFFB3C 66009470 sw r1,r1_save |
FFFFFFFFFFFFFB40 660D1480 sw r26,r26_save |
FFFFFFFFFFFFFB44 E6801000 ; SETLO |
FFFFFFFFFFFFFB48 EE800400 ; SETMID |
FFFFFFFFFFFFFB4C 040D7809 lw sp,#0x100001000 |
FFFFFFFFFFFFFB50 E69CFFFE ; SETLO |
FFFFFFFFFFFFFB54 EE800003 ; SETMID |
FFFFFFFFFFFFFB58 6A0D0028 outb r0,0xDCFFFE ; acknowledge interrupt |
FFFFFFFFFFFFFB5C 9A00FB80 lea r1,msgPerr |
FFFFFFFFFFFFFB60 31FFF122 call DisplayString |
FFFFFFFFFFFFFB64 02008868 mfspr r1,IPC |
FFFFFFFFFFFFFB68 31FFF169 call DisplayWord |
FFFFFFFFFFFFFB6C 31FFFD80 call CRLF |
FFFFFFFFFFFFFB70 460F1460 lw sp,sp_save |
FFFFFFFFFFFFFB74 46009470 lw r1,r1_save |
FFFFFFFFFFFFFB78 460D1480 lw r26,r26_save |
FFFFFFFFFFFFFB7C 01900020 iret |
|
FFFFFFFFFFFFFB80 msgPerr: |
FFFFFFFFFFFFFB80 6520797469726150 db "Parity error at: ",0 |
FFFFFFFFFFFFFB88 3A746120726F7272 |
|
|
;------------------------------------------- |
FFFFFFFFFFFFEA20 nmirout: |
FFFFFFFFFFFFEA20 01900020 iret |
; Unimplemented instructions end up here |
;------------------------------------------- |
FFFFFFFFFFFFFB94 .align 4 |
FFFFFFFFFFFFFB94 ui_irout: |
FFFFFFFFFFFFFB94 0FEF0008 subui sp,sp,#8 |
FFFFFFFFFFFFFB98 67E08000 sw r1,[sp] |
FFFFFFFFFFFFFB9C 9A00FBC0 lea r1,msgUnimp |
FFFFFFFFFFFFFBA0 31FFF122 call DisplayString |
FFFFFFFFFFFFFBA4 02008868 mfspr r1,IPC |
FFFFFFFFFFFFFBA8 31FFF169 call DisplayWord |
FFFFFFFFFFFFFBAC 31FFFD80 call CRLF |
FFFFFFFFFFFFFBB0 47E08000 lw r1,[sp] |
FFFFFFFFFFFFFBB4 0BEF0008 addui sp,sp,#8 |
; hang the context |
FFFFFFFFFFFFFBB8 ui_irout1: |
FFFFFFFFFFFFFBB8 BE00000A bra ui_irout1 |
FFFFFFFFFFFFFBBC 01900020 iret |
|
FFFFFFFFFFFFFBC0 msgUnimp: |
FFFFFFFFFFFFFBC0 6D656C706D696E55 db "Unimplemented instruction at: ",0 |
FFFFFFFFFFFFFBC8 6E69206465746E65 |
FFFFFFFFFFFFFBD0 6F69746375727473 |
|
;------------------------------------------- |
; Handle miss on Data TLB |
;------------------------------------------- |
FFFFFFFFFFFFEA24 DTLBHandler: |
FFFFFFFFFFFFEA24 E6BF0000 ; SETLO |
FFFFFFFFFFFFEA28 6A0D0413 sw r1,0xFFFF_FFFF_FFFF_0000 |
FFFFFFFFFFFFEA2C E6BF0008 ; SETLO |
FFFFFFFFFFFFEA30 6A0D0813 sw r2,0xFFFF_FFFF_FFFF_0008 |
FFFFFFFFFFFFEA34 dh1: |
FFFFFFFFFFFFEA34 02008034 omgi r1,#0 ; try open mutex gate #0 (TLB protector) |
FFFFFFFFFFFFEA38 BE107FE9 bne r1,r0,dh1 ; spinlock if gate is closed |
FFFFFFFFFFFFEA3C 02008128 mfspr r1,PTA ; get the page table address |
FFFFFFFFFFFFEA40 02010228 mfspr r2,BadVAddr ; get the bad virtual address |
FFFFFFFFFFFFEA44 022002E9 mtspr TLBVirtPage,r2 ; which virtual address to update |
FFFFFFFFFFFFEA48 06211A01 shrui r2,r2,#13 ; turn va into index |
FFFFFFFFFFFFEA4C 04110403 addu r1,r1,r2 |
FFFFFFFFFFFFEA50 46110000 lw r2,[r1] ; get the physical address from the table |
FFFFFFFFFFFFEA54 14210000 and r2,r2,#FFFF_FFFF_FFFF_E000 ; mask off lower bits |
FFFFFFFFFFFFEA58 022002A9 mtspr TLBPhysPage0,r2 ; |
FFFFFFFFFFFFEA5C 46110008 lw r2,8[r1] ; get the physical address from the table |
FFFFFFFFFFFFEA60 14210000 and r2,r2,#FFFF_FFFF_FFFF_E000 ; mask off lower bits |
FFFFFFFFFFFFEA64 022002E9 mtspr TLBPhysPage1,r2 ; |
FFFFFFFFFFFFEA68 02000034 tlbwr ; update a random entry in the TLB |
FFFFFFFFFFFFEA6C 02000035 cmgi #0 ; close the mutex gate |
FFFFFFFFFFFFEA70 E6BF0000 ; SETLO |
FFFFFFFFFFFFEA74 6A0D0403 lw r1,0xFFFF_FFFF_FFFF_0000 |
FFFFFFFFFFFFEA78 E6BF0008 ; SETLO |
FFFFFFFFFFFFEA7C 6A0D0803 lw r2,0xFFFF_FFFF_FFFF_0008 |
FFFFFFFFFFFFEA80 01900020 iret |
FFFFFFFFFFFFEA80 0000000001900020 .align 32 |
FFFFFFFFFFFFEA88 6A0D0803E6BF0008 |
FFFFFFFFFFFFEA90 0000000000000000 |
FFFFFFFFFFFFEA98 0000000000000000 |
FFFFFFFFFFFFEAA0 .align 32 |
FFFFFFFFFFFFFBD8 0000203A7461206E .align 4 |
FFFFFFFFFFFFFBE0 .align 4 |
FFFFFFFFFFFFFBE0 DTLBHandler: |
FFFFFFFFFFFFFBE0 E6BF0000 ; SETLO |
FFFFFFFFFFFFFBE4 6A0D0413 sw r1,0xFFFF_FFFF_FFFF_0000 |
FFFFFFFFFFFFFBE8 E6BF0008 ; SETLO |
FFFFFFFFFFFFFBEC 6A0D0813 sw r2,0xFFFF_FFFF_FFFF_0008 |
FFFFFFFFFFFFFBF0 dh1: |
FFFFFFFFFFFFFBF0 02008034 omgi r1,#0 ; try open mutex gate #0 (TLB protector) |
FFFFFFFFFFFFFBF4 BE107FE9 bne r1,r0,dh1 ; spinlock if gate is closed |
FFFFFFFFFFFFFBF8 02008128 mfspr r1,PTA ; get the page table address |
FFFFFFFFFFFFFBFC 02010228 mfspr r2,BadVAddr ; get the bad virtual address |
FFFFFFFFFFFFFC00 022002E9 mtspr TLBVirtPage,r2 ; which virtual address to update |
FFFFFFFFFFFFFC04 06211A01 shrui r2,r2,#13 ; turn va into index |
FFFFFFFFFFFFFC08 04110403 addu r1,r1,r2 |
FFFFFFFFFFFFFC0C 46110000 lw r2,[r1] ; get the physical address from the table |
FFFFFFFFFFFFFC10 14210000 and r2,r2,#FFFF_FFFF_FFFF_E000 ; mask off lower bits |
FFFFFFFFFFFFFC14 022002A9 mtspr TLBPhysPage0,r2 ; |
FFFFFFFFFFFFFC18 46110008 lw r2,8[r1] ; get the physical address from the table |
FFFFFFFFFFFFFC1C 14210000 and r2,r2,#FFFF_FFFF_FFFF_E000 ; mask off lower bits |
FFFFFFFFFFFFFC20 022002E9 mtspr TLBPhysPage1,r2 ; |
FFFFFFFFFFFFFC24 02000034 tlbwr ; update a random entry in the TLB |
FFFFFFFFFFFFFC28 02000035 cmgi #0 ; close the mutex gate |
FFFFFFFFFFFFFC2C E6BF0000 ; SETLO |
FFFFFFFFFFFFFC30 6A0D0403 lw r1,0xFFFF_FFFF_FFFF_0000 |
FFFFFFFFFFFFFC34 E6BF0008 ; SETLO |
FFFFFFFFFFFFFC38 6A0D0803 lw r2,0xFFFF_FFFF_FFFF_0008 |
FFFFFFFFFFFFFC3C 01900020 iret |
FFFFFFFFFFFFFC40 .align 32 |
|
FFFFFFFFFFFFFFB0 org 0xFFFF_FFFF_FFFF_FFB0 |
FFFFFFFFFFFFFFB0 33FFFA89 jmp DTLBHandler |
FFFFFFFFFFFFFFB0 33FFFEF8 jmp DTLBHandler |
FFFFFFFFFFFFFFB4 DE000000 nop |
FFFFFFFFFFFFFFB8 DE000000 nop |
FFFFFFFFFFFFFFC0 org 0xFFFF_FFFF_FFFF_FFC0 |
FFFFFFFFFFFFFFC0 33FFFA89 jmp DTLBHandler |
FFFFFFFFFFFFFFC0 33FFFEF8 jmp DTLBHandler |
FFFFFFFFFFFFFFC4 DE000000 nop |
FFFFFFFFFFFFFFC8 DE000000 nop |
|
; NMI vector |
FFFFFFFFFFFFFFE0 org 0xFFFF_FFFF_FFFF_FFE0 |
FFFFFFFFFFFFFFE0 33FFFA88 jmp nmirout |
FFFFFFFFFFFFFFE4 DE000000 nop |
FFFFFFFFFFFFFFE8 DE000000 nop |
FFFFFFFFFFFFFFE0 0000000000000000 dw 0 ; |
FFFFFFFFFFFFFFE8 0000000000000000 dw 0 ; |
|
; RST vector |
; RST vector |
FFFFFFFFFFFFFFF0 org 0xFFFF_FFFF_FFFF_FFF0 |
FFFFFFFFFFFFFFF0 33FFEC07 jmp start |
FFFFFFFFFFFFFFF4 DE000000 nop |
FFFFFFFFFFFFFFF8 DE000000 nop |
FFFFFFFFFFFFFFF0 33FFEC0B jmp start |
|
; ROM checksum goes here |
|
FFFFFFFFFFFFFFF8 org 0xFFFF_FFFF_FFFF_FFF8 |
FFFFFFFFFFFFFFF8 0000000000000000 dw 0 |
|
FFFFFFFFFFFFFFFC 00000000 |
0000000000000000 00000000 |
0000000000000004 00000000 |
|
|
Symbol Table: |
5737,10 → 7386,15
TAB C constant 0000000000000009 |
CTRLC C constant 0000000000000003 |
CTRLH C constant 0000000000000008 |
CTRLI C constant 0000000000000009 |
CTRLJ C constant 000000000000000A |
CTRLK C constant 000000000000000B |
CTRLM C constant 000000000000000D |
CTRLS C constant 0000000000000013 |
CTRLX C constant 0000000000000018 |
XON C constant 0000000000000011 |
XOFF C constant 0000000000000013 |
EX_IRQ C constant 00000000000001C1 |
DATA_PRESENT C constant 0000000000000001 |
XMIT_NOT_FULL C constant 0000000000000020 |
BUFLEN C constant 0000000000000050 |
5793,15 → 7447,19
TCBr29 C constant 00000000000000E0 |
TCBr30 C constant 00000000000000E8 |
TCBr31 C constant 00000000000000F0 |
SCREENGATE C constant 0000000000000000 |
KEYBDGATE C constant 0000000000000001 |
VIDEOGATE C constant 0000000000000002 |
CARDGATE C constant 0000000000000003 |
warmStart C constant 0000000000001020 |
usrJmp C constant 0000000000001028 |
TickIRQAddr C constant 0000000000001030 |
TaskBlock C constant 0000000000001038 |
tencount C constant 00000000000013F8 |
Milliseconds C constant 0000000000001400 |
Lastloc C constant 0000000000001408 |
CharColor C constant 0000000000001410 |
ScreenColor C constant 0000000000001414 |
CursorRow C constant 0000000000001416 |
CursorRow C constant 0000000000001417 |
CursorCol C constant 0000000000001418 |
CursorFlash C constant 000000000000141A |
KeybdEcho C constant 000000000000141C |
5808,6 → 7466,11
KeybdBuffer C constant 0000000000001440 |
KeybdHead C constant 0000000000001450 |
KeybdTail C constant 0000000000001451 |
sp_save C constant 0000000000001460 |
lr_save C constant 0000000000001468 |
r1_save C constant 0000000000001470 |
r2_save C constant 0000000000001478 |
r26_save C constant 0000000000001480 |
Score C constant 0000000000001500 |
Manpos C constant 0000000000001508 |
MissileActive C constant 0000000000001510 |
5850,10 → 7513,30
r1save C constant 00000000000020B0 |
r2save C constant 00000000000020B8 |
AXCstart C constant 00000000000020C0 |
ctx0start C constant 00000000000020D0 |
ctx1start C constant 00000000000020D8 |
ctx2start C constant 00000000000020E0 |
ctx3start C constant 00000000000020E8 |
ctx4start C constant 00000000000020F0 |
ctx5start C constant 00000000000020F8 |
ctx6start C constant 0000000000002100 |
ctx7start C constant 0000000000002108 |
ctx8start C constant 0000000000002110 |
ctx9start C constant 0000000000002118 |
ctx10start C constant 0000000000002120 |
ctx11start C constant 0000000000002128 |
ctx12start C constant 0000000000002130 |
ctx13start C constant 0000000000002138 |
ctx14start C constant 0000000000002140 |
ctx15start C constant 0000000000002148 |
sp_saves C constant 0000000000002200 |
sp_saves_end C constant 0000000000002280 |
p100IRQvec C constant 0000000000003000 |
keybdIRQvec C constant 0000000000003008 |
serialIRQvec C constant 0000000000003010 |
rasterIRQvec C constant 0000000000003018 |
startSector C constant 00000000000030F8 |
BPB C constant 0000000000003100 |
TEXTSCR C constant 0000000000D00000 |
COLORSCR C constant 0000000000D10000 |
TEXTREG C constant 0000000000DA0000 |
5868,6 → 7551,31
UART_IE C constant 0000000000DC0A04 |
UART_MC C constant 0000000000DC0A06 |
DATETIME C constant 0000000000DC0400 |
SPIMASTER C constant 0000000000DC0500 |
SPI_MASTER_VERSION_REG C constant 0000000000000000 |
SPI_MASTER_CONTROL_REG C constant 0000000000000001 |
SPI_TRANS_TYPE_REG C constant 0000000000000002 |
SPI_TRANS_CTRL_REG C constant 0000000000000003 |
SPI_TRANS_STATUS_REG C constant 0000000000000004 |
SPI_TRANS_ERROR_REG C constant 0000000000000005 |
SPI_DIRECT_ACCESS_DATA_REG C constant 0000000000000006 |
SPI_SD_ADDR_7_0_REG C constant 0000000000000007 |
SPI_SD_ADDR_15_8_REG C constant 0000000000000008 |
SPI_SD_ADDR_23_16_REG C constant 0000000000000009 |
SPI_SD_ADDR_31_24_REG C constant 000000000000000A |
SPI_RX_FIFO_DATA_REG C constant 0000000000000010 |
SPI_RX_FIFO_DATA_COUNT_MSB C constant 0000000000000012 |
SPI_RX_FIFO_DATA_COUNT_LSB C constant 0000000000000013 |
SPI_RX_FIFO_CTRL_REG C constant 0000000000000014 |
SPI_TX_FIFO_DATA_REG C constant 0000000000000020 |
SPI_TX_FIFO_CTRL_REG C constant 0000000000000024 |
SPI_INIT_SD C constant 0000000000000001 |
SPI_TRANS_START C constant 0000000000000001 |
SPI_TRANS_BUSY C constant 0000000000000001 |
SPI_INIT_NO_ERROR C constant 0000000000000000 |
SPI_READ_NO_ERROR C constant 0000000000000000 |
RW_READ_SD_BLOCK C constant 0000000000000002 |
RW_WRITE_SD_BLOCK C constant 0000000000000003 |
PIC C constant 0000000000DC0FF0 |
PIC_IE C constant 0000000000DC0FF2 |
PSG C constant 0000000000D50000 |
5877,27 → 7585,33
PSGADSR0 C constant 0000000000D50006 |
SPRRAM C constant 0000000000D80000 |
AC97 C constant 0000000000DC1000 |
TMP C constant 0000000000DC0300 |
LED C constant 0000000000DC0600 |
ETHMAC C constant 0000000000DC2000 |
CONFIGREC C constant 0000000000DCFFFF |
MIIMODER C constant 0000000000000028 |
MIIADDRESS C constant 0000000000000030 |
GACCEL C constant 0000000000DAE000 |
RASTERIRQ C constant 0000000000DA0100 |
BOOT_STACK C constant FFFFFFFFFFFEFFF8 |
SPRITEREGS C constant 0000000000DAD000 |
BITMAPSCR C constant 0000000100200000 |
BOOTJMP C constant 0000000100800204 |
txempty C constant 0000000000000040 |
rxfull C constant 0000000000000001 |
txtWidth L bss 0000000000001038 |
txtHeight L bss 0000000000001039 |
cursx L bss 000000000000103A |
cursy L bss 000000000000103B |
pos L bss 000000000000103C |
dh L bss 000000000000103C |
0 L bss 000000000000103C |
charToPrint L bss 0000000000001040 |
fgColor L bss 0000000000001042 |
bkColor L bss 0000000000001045 |
cursFlash L bss 0000000000001046 |
lineLinkTbl L bss 0000000000001047 |
typef L bss 0000000000001080 |
txtWidth L bss 0000000000001048 |
txtHeight L bss 0000000000001049 |
cursx L bss 000000000000104A |
cursy L bss 000000000000104B |
pos L bss 000000000000104C |
dh L bss 000000000000104C |
0 L bss 000000000000104C |
charToPrint L bss 000000000000104C |
fgColor L bss 000000000000104E |
bkColor L bss 0000000000001051 |
cursFlash L bss 0000000000001052 |
lineLinkTbl L bss 0000000000001053 |
typef L bss 0000000000001085 |
OSSP L bss 0000000000001088 |
CURRNT L bss 0000000000001090 |
STKGOS L bss 0000000000001098 |
5916,593 → 7630,740
NUMWKA L bss 0000000000001100 |
BUFFER L bss 000000000000111B |
TXT C constant 0000000100600000 |
SerialGetChar L code FFFFFFFFFFFFB550 |
SerialPutChar L code FFFFFFFFFFFFB430 |
SetKeyboardEcho L code FFFFFFFFFFFFB818 |
KeybdCheckForKey L code FFFFFFFFFFFFB874 |
KeybdGetChar L code FFFFFFFFFFFFB820 |
DisplayChar L code FFFFFFFFFFFFBD1C |
DisplayString L code FFFFFFFFFFFFBF9C |
start L code FFFFFFFFFFFFB01C |
ColdStart L code FFFFFFFFFFFFB01C |
ict1 L code FFFFFFFFFFFFB028 |
ctxstart3 L code FFFFFFFFFFFFB1F8 |
ctxstart2 L code FFFFFFFFFFFFB210 |
ctxstart L code FFFFFFFFFFFFB214 |
ctxstart1 L code FFFFFFFFFFFFB318 |
csj5 L code FFFFFFFFFFFFB22C |
SerialInit L code FFFFFFFFFFFFB3B0 |
KeybdInit L code FFFFFFFFFFFFB7B0 |
PICInit L code FFFFFFFFFFFFB390 |
SetupRasterIRQ L code FFFFFFFFFFFFCA64 |
dcokay L code FFFFFFFFFFFFB2C4 |
ClearScreen L code FFFFFFFFFFFFBB64 |
ClearBmpScreen L code FFFFFFFFFFFFBB10 |
RandomizeSprram L code FFFFFFFFFFFFC7B4 |
DisplayStringCRLF L code FFFFFFFFFFFFBFD4 |
Monitor L code FFFFFFFFFFFFC258 |
SetupAC97 L code FFFFFFFFFFFFC7DC |
Beep L code FFFFFFFFFFFFC884 |
j4 L code FFFFFFFFFFFFB310 |
HelloWorld L code FFFFFFFFFFFFB31C |
j3 L code FFFFFFFFFFFFB334 |
j2 L code FFFFFFFFFFFFB348 |
MSG L code FFFFFFFFFFFFB360 |
MSGSTART L code FFFFFFFFFFFFB36D |
PICret L code FFFFFFFFFFFFB3AC |
SerialGetCharDirect L code FFFFFFFFFFFFB3F4 |
sgc1 L code FFFFFFFFFFFFC6E0 |
SerialCheckForCharDirect L code FFFFFFFFFFFFB418 |
spcb1 L code FFFFFFFFFFFFB490 |
spcb3 L code FFFFFFFFFFFFB470 |
spcabort L code FFFFFFFFFFFFB518 |
spcb2 L code FFFFFFFFFFFFB4C0 |
spcb4 L code FFFFFFFFFFFFB4A0 |
spcb5 L code FFFFFFFFFFFFB4DC |
spcb6 L code FFFFFFFFFFFFB4C8 |
spcb8 L code FFFFFFFFFFFFB4E4 |
spcb7 L code FFFFFFFFFFFFB50C |
CharsInRxBuf L code FFFFFFFFFFFFB52C |
cirxb1 L code FFFFFFFFFFFFB54C |
sgcfifo1 L code FFFFFFFFFFFFB610 |
sgcfifo2 L code FFFFFFFFFFFFB5FC |
sgcfifo3 L code FFFFFFFFFFFFB5C0 |
sgcfifo4 L code FFFFFFFFFFFFB5E4 |
sgcfifo5 L code FFFFFFFFFFFFB5FC |
SerialIRQ L code FFFFFFFFFFFFB628 |
sirq1 L code FFFFFFFFFFFFB660 |
srxirq L code FFFFFFFFFFFFB688 |
stxirq L code FFFFFFFFFFFFB684 |
smsirq L code FFFFFFFFFFFFB678 |
srxirq1 L code FFFFFFFFFFFFB688 |
srxirq3 L code FFFFFFFFFFFFB6B8 |
srxirq2 L code FFFFFFFFFFFFB6AC |
srxirq5 L code FFFFFFFFFFFFB6D4 |
srxirq8 L code FFFFFFFFFFFFB764 |
srxirq6 L code FFFFFFFFFFFFB728 |
srxirq7 L code FFFFFFFFFFFFB74C |
KeybdSC L code FFFFFFFFFFFFB768 |
kbdsc1 L code FFFFFFFFFFFFB77C |
kbdscRet L code FFFFFFFFFFFFB7A4 |
kbdsc2 L code FFFFFFFFFFFFB78C |
kbdsc3 L code FFFFFFFFFFFFB798 |
kbdsc4 L code FFFFFFFFFFFFB7A4 |
KeybdIRQ L code FFFFFFFFFFFFB7C4 |
KeybdIRQa L code FFFFFFFFFFFFB7D4 |
KeybdIRQb L code FFFFFFFFFFFFB7FC |
KeybdIRQc L code FFFFFFFFFFFFB810 |
nochar L code FFFFFFFFFFFFB864 |
kgc3 L code FFFFFFFFFFFFB868 |
kgc2 L code FFFFFFFFFFFFB85C |
CRLF L code FFFFFFFFFFFFE4FC |
KeybdCheckForKeyDirect L code FFFFFFFFFFFFB884 |
KeybdGetCharDirect L code FFFFFFFFFFFFB898 |
kgc1 L code FFFFFFFFFFFFB8A8 |
gk1 L code FFFFFFFFFFFFB8E0 |
gk2 L code FFFFFFFFFFFFB8DC |
Pulse100 L code FFFFFFFFFFFFB8EC |
DisplayDatetime L code FFFFFFFFFFFFCB60 |
SelectNextToRunTCB L code FFFFFFFFFFFFB928 |
SwitchTask L code FFFFFFFFFFFFB930 |
p1001 L code FFFFFFFFFFFFB920 |
swtsk1 L code FFFFFFFFFFFFB950 |
FlashCursor L code FFFFFFFFFFFFBA80 |
CalcScreenLoc L code FFFFFFFFFFFFBCDC |
flshcrsr2 L code FFFFFFFFFFFFBADC |
flshcrsr3 L code FFFFFFFFFFFFBAB4 |
flshcrsr1 L code FFFFFFFFFFFFBAC8 |
CursorOff L code FFFFFFFFFFFFBAE8 |
CursorOn L code FFFFFFFFFFFFBAFC |
csj4 L code FFFFFFFFFFFFBBAC |
AsciiToScreen L code FFFFFFFFFFFFBCAC |
ScrollUp L code FFFFFFFFFFFFBBD8 |
scrup1 L code FFFFFFFFFFFFBC18 |
BlankLine L code FFFFFFFFFFFFBC58 |
blnkln1 L code FFFFFFFFFFFFBC90 |
atoscr1 L code FFFFFFFFFFFFBCC4 |
ScreenToAscii L code FFFFFFFFFFFFBCCC |
stasc1 L code FFFFFFFFFFFFBCD8 |
dccr L code FFFFFFFFFFFFBD3C |
dcx7 L code FFFFFFFFFFFFBD68 |
dcx6 L code FFFFFFFFFFFFBD80 |
dcx8 L code FFFFFFFFFFFFBDB0 |
dcx9 L code FFFFFFFFFFFFBDE0 |
dcx10 L code FFFFFFFFFFFFBE10 |
dcx11 L code FFFFFFFFFFFFBE44 |
dcx12 L code FFFFFFFFFFFFBE3C |
dcx13 L code FFFFFFFFFFFFBE78 |
dcx5 L code FFFFFFFFFFFFBE98 |
dcx3 L code FFFFFFFFFFFFBECC |
dcx4 L code FFFFFFFFFFFFBEF4 |
dclf L code FFFFFFFFFFFFBEF0 |
IncCursorPos L code FFFFFFFFFFFFBF10 |
IncCursorRow L code FFFFFFFFFFFFBF48 |
icc1 L code FFFFFFFFFFFFBF84 |
icr1 L code FFFFFFFFFFFFBF5C |
dspj1 L code FFFFFFFFFFFFBFB0 |
dsret L code FFFFFFFFFFFFBFC4 |
DisplayNybble L code FFFFFFFFFFFFC010 |
dispnyb1 L code FFFFFFFFFFFFC02C |
DisplayByte L code FFFFFFFFFFFFC03C |
DisplayWord L code FFFFFFFFFFFFC064 |
dspwd1 L code FFFFFFFFFFFFC078 |
DisplayMem L code FFFFFFFFFFFFC094 |
dspmem1 L code FFFFFFFFFFFFC0B8 |
BinToBCD L code FFFFFFFFFFFFC0E4 |
bta1 L code FFFFFFFFFFFFC108 |
BCDToAscii L code FFFFFFFFFFFFC160 |
bta2 L code FFFFFFFFFFFFC178 |
BinToStr L code FFFFFFFFFFFFC1BC |
btos3 L code FFFFFFFFFFFFC1F0 |
btos1 L code FFFFFFFFFFFFC1F4 |
btos2 L code FFFFFFFFFFFFC224 |
PromptLn L code FFFFFFFFFFFFC264 |
Prompt3 L code FFFFFFFFFFFFC270 |
Prompt1 L code FFFFFFFFFFFFC284 |
Prompt2 L code FFFFFFFFFFFFC2AC |
Editmem L code FFFFFFFFFFFFC404 |
Dumpmem L code FFFFFFFFFFFFC43C |
CSTART L code FFFFFFFFFFFFCE70 |
ExecuteCode L code FFFFFFFFFFFFC42C |
LoadS19 L code FFFFFFFFFFFFC500 |
DisplayHelp L code FFFFFFFFFFFFC314 |
TestCLS L code FFFFFFFFFFFFC2E0 |
RandomLinesCall L code FFFFFFFFFFFFC2D8 |
Invaders L code FFFFFFFFFFFFCDAC |
Piano L code FFFFFFFFFFFFC95C |
RandomLines L code FFFFFFFFFFFFC6F0 |
HelpMsg L code FFFFFFFFFFFFC320 |
ignBlanks L code FFFFFFFFFFFFC3E0 |
ignBlanks1 L code FFFFFFFFFFFFC3E8 |
GetHexNumber L code FFFFFFFFFFFFC470 |
edtmem1 L code FFFFFFFFFFFFC414 |
gthxn2 L code FFFFFFFFFFFFC488 |
AsciiToHexNybble L code FFFFFFFFFFFFC4C0 |
gthxn1 L code FFFFFFFFFFFFC4AC |
gthx3 L code FFFFFFFFFFFFC4F8 |
gthx5 L code FFFFFFFFFFFFC4D0 |
gthx6 L code FFFFFFFFFFFFC4E4 |
ProcessRec L code FFFFFFFFFFFFC50C |
NextRec L code FFFFFFFFFFFFC504 |
sGetChar L code FFFFFFFFFFFFC6C8 |
ProcessS1 L code FFFFFFFFFFFFC5C4 |
ProcessS2 L code FFFFFFFFFFFFC5CC |
ProcessS3 L code FFFFFFFFFFFFC5D4 |
ProcessS7 L code FFFFFFFFFFFFC5DC |
ProcessS8 L code FFFFFFFFFFFFC5E8 |
ProcessS9 L code FFFFFFFFFFFFC5F4 |
pcssxa L code FFFFFFFFFFFFC56C |
pcss1a L code FFFFFFFFFFFFC574 |
S19Get16BitAddress L code FFFFFFFFFFFFC600 |
S19Get24BitAddress L code FFFFFFFFFFFFC618 |
S19Get32BitAddress L code FFFFFFFFFFFFC630 |
S1932b L code FFFFFFFFFFFFC684 |
S1932a L code FFFFFFFFFFFFC664 |
sgc2 L code FFFFFFFFFFFFC6D0 |
AUXIN L code FFFFFFFFFFFFE570 |
rl5 L code FFFFFFFFFFFFC700 |
rl1 L code FFFFFFFFFFFFC714 |
rl2 L code FFFFFFFFFFFFC730 |
rl3 L code FFFFFFFFFFFFC74C |
rl4 L code FFFFFFFFFFFFC768 |
rl8 L code FFFFFFFFFFFFC794 |
rl7 L code FFFFFFFFFFFFC7A4 |
rsr1 L code FFFFFFFFFFFFC7C4 |
sac974 L code FFFFFFFFFFFFC7E8 |
sac971 L code FFFFFFFFFFFFC7F4 |
sac973 L code FFFFFFFFFFFFC820 |
sac972 L code FFFFFFFFFFFFC860 |
sac975 L code FFFFFFFFFFFFC878 |
beep1 L code FFFFFFFFFFFFC8FC |
beep2 L code FFFFFFFFFFFFC92C |
playnt L code FFFFFFFFFFFFC96C |
playnt1a L code FFFFFFFFFFFFC994 |
playnt1b L code FFFFFFFFFFFFC9A0 |
playnt1c L code FFFFFFFFFFFFC9AC |
playnt1d L code FFFFFFFFFFFFC9B8 |
playnt1e L code FFFFFFFFFFFFC9C4 |
playnt1f L code FFFFFFFFFFFFC9D0 |
playnt1g L code FFFFFFFFFFFFC9DC |
Tone L code FFFFFFFFFFFFC9E8 |
tone1 L code FFFFFFFFFFFFCA28 |
tone2 L code FFFFFFFFFFFFCA44 |
RasterIRQfn L code FFFFFFFFFFFFCAC4 |
rirq1 L code FFFFFFFFFFFFCAF4 |
rirq2 L code FFFFFFFFFFFFCAF4 |
rirq3 L code FFFFFFFFFFFFCAF4 |
rirq4 L code FFFFFFFFFFFFCAF4 |
rirq5 L code FFFFFFFFFFFFCAF4 |
rirq6 L code FFFFFFFFFFFFCAF4 |
rirq7 L code FFFFFFFFFFFFCAF4 |
rirq8 L code FFFFFFFFFFFFCAF4 |
InitializeGame L code FFFFFFFFFFFFCBD0 |
DrawScore L code FFFFFFFFFFFFCBF8 |
DrawMissile L code FFFFFFFFFFFFCC28 |
MissileOff L code FFFFFFFFFFFFCC84 |
DrawMan L code FFFFFFFFFFFFCCAC |
DrawInvader L code FFFFFFFFFFFFCCF8 |
DrawInvaders L code FFFFFFFFFFFFCD18 |
dinv1 L code FFFFFFFFFFFFCDA0 |
DrawBombs L code FFFFFFFFFFFFCDA8 |
InvadersLoop L code FFFFFFFFFFFFCDB8 |
TestMoveMan L code FFFFFFFFFFFFCDCC |
MoveManRight L code FFFFFFFFFFFFCDE0 |
MoveManLeft L code FFFFFFFFFFFFCDF8 |
FireMissile L code FFFFFFFFFFFFCE0C |
Invaders1 L code FFFFFFFFFFFFCE30 |
InvadersEnd L code FFFFFFFFFFFFCE38 |
GOSTART L code FFFFFFFFFFFFCE44 |
GOWARM L code FFFFFFFFFFFFCE48 |
WSTART L code FFFFFFFFFFFFCEF8 |
GOOUT L code FFFFFFFFFFFFCE4C |
OUTC L code FFFFFFFFFFFFE568 |
GOIN L code FFFFFFFFFFFFCE50 |
INC L code FFFFFFFFFFFFE56C |
GOAUXO L code FFFFFFFFFFFFCE54 |
AUXOUT L code FFFFFFFFFFFFE588 |
GOAUXI L code FFFFFFFFFFFFCE58 |
GOBYE L code FFFFFFFFFFFFCE5C |
BYEBYE L code FFFFFFFFFFFFE7A8 |
TXTBGN L code FFFFFFFFFFFFCE60 |
ENDMEM L code FFFFFFFFFFFFCE68 |
PRMESGAUX L code FFFFFFFFFFFFE534 |
PRMESG L code FFFFFFFFFFFFE500 |
clearVars L code FFFFFFFFFFFFD30C |
PRTNUM L code FFFFFFFFFFFFE234 |
ST3 L code FFFFFFFFFFFFCF10 |
GETLN L code FFFFFFFFFFFFDF60 |
TOUPBUF L code FFFFFFFFFFFFE474 |
TSTNUM L code FFFFFFFFFFFFE3FC |
IGNBLK L code FFFFFFFFFFFFE450 |
DIRECT L code FFFFFFFFFFFFD210 |
ST2 L code FFFFFFFFFFFFCF3C |
ERROR L code FFFFFFFFFFFFDF20 |
FNDLN L code FFFFFFFFFFFFE030 |
ST4 L code FFFFFFFFFFFFCF90 |
FNDNXT L code FFFFFFFFFFFFE080 |
ST7 L code FFFFFFFFFFFFCF6C |
ST6 L code FFFFFFFFFFFFCF88 |
MVUP L code FFFFFFFFFFFFE0A4 |
ST5 L code FFFFFFFFFFFFCFB8 |
MVDOWN L code FFFFFFFFFFFFE0BC |
TAB1 L code FFFFFFFFFFFFCFE0 |
TAB2 L code FFFFFFFFFFFFCFF2 |
TAB4 L code FFFFFFFFFFFFD042 |
TAB5 L code FFFFFFFFFFFFD063 |
TAB6 L code FFFFFFFFFFFFD066 |
TAB8 L code FFFFFFFFFFFFD06B |
TAB9 L code FFFFFFFFFFFFD075 |
TAB10 L code FFFFFFFFFFFFD079 |
TAB1_1 L code FFFFFFFFFFFFD080 |
TAB2_1 L code FFFFFFFFFFFFD0A8 |
TAB4_1 L code FFFFFFFFFFFFD150 |
TAB5_1 L code FFFFFFFFFFFFD198 |
TAB6_1 L code FFFFFFFFFFFFD1A8 |
TAB8_1 L code FFFFFFFFFFFFD1B8 |
TAB9_1 L code FFFFFFFFFFFFD1F0 |
TAB10_1 L code FFFFFFFFFFFFD200 |
EXEC L code FFFFFFFFFFFFD218 |
EXLP L code FFFFFFFFFFFFD22C |
EXNGO L code FFFFFFFFFFFFD244 |
EXGO L code FFFFFFFFFFFFD27C |
EXMAT L code FFFFFFFFFFFFD26C |
EX1 L code FFFFFFFFFFFFD25C |
NEW L code FFFFFFFFFFFFD284 |
ENDCHK L code FFFFFFFFFFFFDEE4 |
STOP L code FFFFFFFFFFFFD294 |
RUN L code FFFFFFFFFFFFD29C |
RUNNXL L code FFFFFFFFFFFFD2AC |
FNDLNP L code FFFFFFFFFFFFE040 |
RUNTSL L code FFFFFFFFFFFFD2CC |
RUNSML L code FFFFFFFFFFFFD2D4 |
CHKIO L code FFFFFFFFFFFFE4D8 |
GOTO L code FFFFFFFFFFFFD2E4 |
OREXPR L code FFFFFFFFFFFFD8E8 |
_clr L code FFFFFFFFFFFFD304 |
FINISH L code FFFFFFFFFFFFD410 |
cv1 L code FFFFFFFFFFFFD320 |
LISTX L code FFFFFFFFFFFFD338 |
LS1 L code FFFFFFFFFFFFD34C |
LS4 L code FFFFFFFFFFFFD354 |
PRTLN L code FFFFFFFFFFFFE37C |
LS3 L code FFFFFFFFFFFFD374 |
LS2 L code FFFFFFFFFFFFD36C |
PRINT L code FFFFFFFFFFFFD380 |
TSTC L code FFFFFFFFFFFFE3C4 |
PR2 L code FFFFFFFFFFFFD398 |
PR0 L code FFFFFFFFFFFFD3AC |
PR3 L code FFFFFFFFFFFFD3E4 |
PR1 L code FFFFFFFFFFFFD3C4 |
PR4 L code FFFFFFFFFFFFD3DC |
QTSTG L code FFFFFFFFFFFFE19C |
PR8 L code FFFFFFFFFFFFD400 |
FIN L code FFFFFFFFFFFFDEA8 |
PR6 L code FFFFFFFFFFFFD3F8 |
QWHAT L code FFFFFFFFFFFFDF1C |
GOSUB L code FFFFFFFFFFFFD418 |
PUSHA L code FFFFFFFFFFFFE0F8 |
gosub1 L code FFFFFFFFFFFFD430 |
RETURN L code FFFFFFFFFFFFD454 |
return1 L code FFFFFFFFFFFFD468 |
POPA L code FFFFFFFFFFFFE0C4 |
FOR L code FFFFFFFFFFFFD48C |
SETVAL L code FFFFFFFFFFFFDE60 |
FR1 L code FFFFFFFFFFFFD4A4 |
FR2 L code FFFFFFFFFFFFD4B8 |
FR4 L code FFFFFFFFFFFFD4C4 |
FR3 L code FFFFFFFFFFFFD4C0 |
FR5 L code FFFFFFFFFFFFD4C8 |
FR7 L code FFFFFFFFFFFFD4E4 |
FR6 L code FFFFFFFFFFFFD4E0 |
FR8 L code FFFFFFFFFFFFD504 |
NEXT L code FFFFFFFFFFFFD508 |
TSTV L code FFFFFFFFFFFFDBB0 |
NX4 L code FFFFFFFFFFFFD51C |
NX0 L code FFFFFFFFFFFFD520 |
NX5 L code FFFFFFFFFFFFD530 |
NX2 L code FFFFFFFFFFFFD53C |
NX1 L code FFFFFFFFFFFFD55C |
NXPurge L code FFFFFFFFFFFFD570 |
NX3 L code FFFFFFFFFFFFD560 |
IF L code FFFFFFFFFFFFD578 |
IF1 L code FFFFFFFFFFFFD57C |
IF2 L code FFFFFFFFFFFFD580 |
FNDSKP L code FFFFFFFFFFFFE084 |
IF3 L code FFFFFFFFFFFFD590 |
INPERR L code FFFFFFFFFFFFD594 |
INPUT L code FFFFFFFFFFFFD5A8 |
IP6 L code FFFFFFFFFFFFD5B0 |
IP2 L code FFFFFFFFFFFFD5D0 |
IP4 L code FFFFFFFFFFFFD640 |
IP3 L code FFFFFFFFFFFFD600 |
IP7 L code FFFFFFFFFFFFD5E8 |
PRTSTG L code FFFFFFFFFFFFE144 |
IP5 L code FFFFFFFFFFFFD650 |
DEFLT L code FFFFFFFFFFFFD65C |
LET L code FFFFFFFFFFFFD664 |
LT1 L code FFFFFFFFFFFFD678 |
LOAD L code FFFFFFFFFFFFD67C |
LOD1 L code FFFFFFFFFFFFD688 |
LODEND L code FFFFFFFFFFFFD6C8 |
GCHAR L code FFFFFFFFFFFFD6D0 |
LOD2 L code FFFFFFFFFFFFD6B0 |
GCHAR1 L code FFFFFFFFFFFFD6E8 |
asciiToHex L code FFFFFFFFFFFFD714 |
a2h1 L code FFFFFFFFFFFFD71C |
SAVE L code FFFFFFFFFFFFD728 |
SAVE1 L code FFFFFFFFFFFFD730 |
AUXOCRLF L code FFFFFFFFFFFFD784 |
SAVEND L code FFFFFFFFFFFFD76C |
PWORD L code FFFFFFFFFFFFD7A4 |
SAVE2 L code FFFFFFFFFFFFD758 |
pword1 L code FFFFFFFFFFFFD7B8 |
toAsciiHex L code FFFFFFFFFFFFD7F4 |
pword2 L code FFFFFFFFFFFFD7D4 |
tah1 L code FFFFFFFFFFFFD800 |
POKE L code FFFFFFFFFFFFD808 |
PKER L code FFFFFFFFFFFFD834 |
POKEC L code FFFFFFFFFFFFD83C |
POKEH L code FFFFFFFFFFFFD868 |
POKEW L code FFFFFFFFFFFFD894 |
SYSX L code FFFFFFFFFFFFD8C0 |
sysx1 L code FFFFFFFFFFFFD8D4 |
ANDEXPR L code FFFFFFFFFFFFD920 |
XP_OR1 L code FFFFFFFFFFFFD8F4 |
XP_OR L code FFFFFFFFFFFFD904 |
XP_ORX L code FFFFFFFFFFFFD914 |
EXPR L code FFFFFFFFFFFFD9B4 |
XP_AND1 L code FFFFFFFFFFFFD92C |
XP_AND L code FFFFFFFFFFFFD93C |
XP_ANDX L code FFFFFFFFFFFFD94C |
isDigit L code FFFFFFFFFFFFD958 |
isDigitFalse L code FFFFFFFFFFFFD968 |
isAlpha L code FFFFFFFFFFFFD970 |
isAlphaFalse L code FFFFFFFFFFFFD988 |
isAlphaTrue L code FFFFFFFFFFFFD980 |
isAlnum L code FFFFFFFFFFFFD990 |
isDigitx L code FFFFFFFFFFFFD9AC |
EXPR2 L code FFFFFFFFFFFFDA70 |
XP11 L code FFFFFFFFFFFFD9D0 |
XP18 L code FFFFFFFFFFFFDA54 |
XPRT1 L code FFFFFFFFFFFFDA3C |
XPRT0 L code FFFFFFFFFFFFDA30 |
XP12 L code FFFFFFFFFFFFD9E0 |
XP13 L code FFFFFFFFFFFFD9F0 |
XP14 L code FFFFFFFFFFFFDA00 |
XP15 L code FFFFFFFFFFFFDA10 |
XP16 L code FFFFFFFFFFFFDA20 |
XP17 L code FFFFFFFFFFFFDA48 |
XP26 L code FFFFFFFFFFFFDACC |
XP21 L code FFFFFFFFFFFFDA90 |
XP22 L code FFFFFFFFFFFFDA9C |
EXPR3 L code FFFFFFFFFFFFDAE4 |
XP23 L code FFFFFFFFFFFFDAA0 |
XP24 L code FFFFFFFFFFFFDAB4 |
XP25 L code FFFFFFFFFFFFDAC0 |
XP45 L code FFFFFFFFFFFFDAD8 |
EXPR4 L code FFFFFFFFFFFFDB3C |
XP31 L code FFFFFFFFFFFFDAF0 |
XP34 L code FFFFFFFFFFFFDB10 |
XP47 L code FFFFFFFFFFFFDB30 |
XP40 L code FFFFFFFFFFFFDB50 |
XP41 L code FFFFFFFFFFFFDB68 |
XP46 L code FFFFFFFFFFFFDB74 |
PARN L code FFFFFFFFFFFFDB7C |
XP42 L code FFFFFFFFFFFFDBA0 |
XP43 L code FFFFFFFFFFFFDBA8 |
tstv_notfound L code FFFFFFFFFFFFDC24 |
TV1 L code FFFFFFFFFFFFDC08 |
SIZEX L code FFFFFFFFFFFFDE4C |
TV2 L code FFFFFFFFFFFFDBFC |
QSORRY L code FFFFFFFFFFFFDF14 |
TSTVRT L code FFFFFFFFFFFFDC18 |
getVarName L code FFFFFFFFFFFFDC34 |
findVar L code FFFFFFFFFFFFDCCC |
gvn1 L code FFFFFFFFFFFFDCBC |
gvn4 L code FFFFFFFFFFFFDC54 |
gvn2 L code FFFFFFFFFFFFDC8C |
gvn6 L code FFFFFFFFFFFFDC7C |
gvn3 L code FFFFFFFFFFFFDCA0 |
fv4 L code FFFFFFFFFFFFDCDC |
fv3 L code FFFFFFFFFFFFDD00 |
fv1 L code FFFFFFFFFFFFDD08 |
fv2 L code FFFFFFFFFFFFDD18 |
PEEK L code FFFFFFFFFFFFDD2C |
PEEKC L code FFFFFFFFFFFFDD3C |
PEEKH L code FFFFFFFFFFFFDD50 |
PEEKW L code FFFFFFFFFFFFDD64 |
USRX L code FFFFFFFFFFFFDD78 |
RND L code FFFFFFFFFFFFDD94 |
rnd2 L code FFFFFFFFFFFFDDC4 |
rnd1 L code FFFFFFFFFFFFDDBC |
modu4 L code FFFFFFFFFFFFDDD4 |
mod2 L code FFFFFFFFFFFFDDF4 |
mod1 L code FFFFFFFFFFFFDE10 |
ABS L code FFFFFFFFFFFFDE2C |
SGN L code FFFFFFFFFFFFDE3C |
sv2 L code FFFFFFFFFFFFDE7C |
SV1 L code FFFFFFFFFFFFDEA4 |
FI1 L code FFFFFFFFFFFFDEC4 |
FI2 L code FFFFFFFFFFFFDEDC |
ec1 L code FFFFFFFFFFFFDF04 |
TOOBIG L code FFFFFFFFFFFFDF0C |
GL1 L code FFFFFFFFFFFFDF88 |
GL3 L code FFFFFFFFFFFFDFBC |
GL4 L code FFFFFFFFFFFFDFE4 |
GL2 L code FFFFFFFFFFFFDFA0 |
GL7 L code FFFFFFFFFFFFE014 |
GL6 L code FFFFFFFFFFFFE00C |
GL5 L code FFFFFFFFFFFFDFF0 |
fl1 L code FFFFFFFFFFFFE03C |
FNDRET1 L code FFFFFFFFFFFFE06C |
FNDRET2 L code FFFFFFFFFFFFE078 |
FNDRET L code FFFFFFFFFFFFE064 |
MVUP1 L code FFFFFFFFFFFFE094 |
MVRET L code FFFFFFFFFFFFE0A8 |
MVDOWN1 L code FFFFFFFFFFFFE0AC |
PP1 L code FFFFFFFFFFFFE0F4 |
PU1 L code FFFFFFFFFFFFE138 |
PS1 L code FFFFFFFFFFFFE160 |
PRTRET L code FFFFFFFFFFFFE180 |
QT1 L code FFFFFFFFFFFFE1B8 |
QT2 L code FFFFFFFFFFFFE200 |
QT3 L code FFFFFFFFFFFFE1D0 |
QT4 L code FFFFFFFFFFFFE1E8 |
QT5 L code FFFFFFFFFFFFE20C |
prCRLF L code FFFFFFFFFFFFE214 |
PN1 L code FFFFFFFFFFFFE264 |
PN6 L code FFFFFFFFFFFFE284 |
PN4 L code FFFFFFFFFFFFE294 |
PN3 L code FFFFFFFFFFFFE288 |
PN5 L code FFFFFFFFFFFFE2A0 |
PNRET L code FFFFFFFFFFFFE2B4 |
PRTHEXNUM L code FFFFFFFFFFFFE2CC |
PHN1 L code FFFFFFFFFFFFE308 |
PHN7 L code FFFFFFFFFFFFE31C |
PHN8 L code FFFFFFFFFFFFE320 |
shru L code FFFFFFFFFFFFE32C |
r4 L code FFFFFFFFFFFFE32C |
#4 L code FFFFFFFFFFFFE32C |
PHN6 L code FFFFFFFFFFFFE334 |
PHN4 L code FFFFFFFFFFFFE344 |
PHN3 L code FFFFFFFFFFFFE338 |
PHN5 L code FFFFFFFFFFFFE350 |
PHNRET L code FFFFFFFFFFFFE364 |
TC1 L code FFFFFFFFFFFFE3EC |
TN1 L code FFFFFFFFFFFFE410 |
TSNMRET L code FFFFFFFFFFFFE448 |
TN2 L code FFFFFFFFFFFFE430 |
IGB2 L code FFFFFFFFFFFFE458 |
IGB1 L code FFFFFFFFFFFFE464 |
IGBRET L code FFFFFFFFFFFFE46C |
TOUPB1 L code FFFFFFFFFFFFE484 |
TOUPBRT L code FFFFFFFFFFFFE4C0 |
DOQUO L code FFFFFFFFFFFFE4A8 |
toUpper L code FFFFFFFFFFFFE4C8 |
DOQUO1 L code FFFFFFFFFFFFE4B4 |
TOUPRET L code FFFFFFFFFFFFE4D4 |
CHKRET2 L code FFFFFFFFFFFFE4F0 |
CHKRET L code FFFFFFFFFFFFE4F4 |
PRMESG1 L code FFFFFFFFFFFFE510 |
PRMRET L code FFFFFFFFFFFFE524 |
PRMESGA1 L code FFFFFFFFFFFFE544 |
PRMRETA L code FFFFFFFFFFFFE558 |
AXIRET_ZERO L code FFFFFFFFFFFFE580 |
AXIRET L code FFFFFFFFFFFFE57C |
_cls L code FFFFFFFFFFFFE58C |
_wait10 L code FFFFFFFFFFFFE594 |
_getATAStatus L code FFFFFFFFFFFFE598 |
_waitCFNotBusy L code FFFFFFFFFFFFE59C |
_rdcf L code FFFFFFFFFFFFE5A0 |
rdcf6 L code FFFFFFFFFFFFE5A4 |
msgInit L code FFFFFFFFFFFFE5C0 |
OKMSG L code FFFFFFFFFFFFE5F6 |
msgWhat L code FFFFFFFFFFFFE5FD |
SRYMSG L code FFFFFFFFFFFFE605 |
CLMSG L code FFFFFFFFFFFFE60B |
msgReadError L code FFFFFFFFFFFFE60E |
msgNumTooBig L code FFFFFFFFFFFFE629 |
msgDivZero L code FFFFFFFFFFFFE63D |
msgVarSpace L code FFFFFFFFFFFFE650 |
msgBytesFree L code FFFFFFFFFFFFE668 |
msgReady L code FFFFFFFFFFFFE676 |
msgComma L code FFFFFFFFFFFFE680 |
msgLineRange L code FFFFFFFFFFFFE694 |
msgVar L code FFFFFFFFFFFFE6AA |
msgRNDBad L code FFFFFFFFFFFFE6C1 |
msgSYSBad L code FFFFFFFFFFFFE6D5 |
msgInputVar L code FFFFFFFFFFFFE6E7 |
msgNextFor L code FFFFFFFFFFFFE704 |
msgNextVar L code FFFFFFFFFFFFE717 |
msgBadGotoGosub L code FFFFFFFFFFFFE73B |
msgRetWoGosub L code FFFFFFFFFFFFE758 |
msgTooBig L code FFFFFFFFFFFFE76F |
msgExtraChars L code FFFFFFFFFFFFE784 |
start L code FFFFFFFFFFFFB02C |
ColdStart L code FFFFFFFFFFFFB02C |
ict1 L code FFFFFFFFFFFFB084 |
ctxstart3 L code FFFFFFFFFFFFB214 |
ctxstart2 L code FFFFFFFFFFFFB224 |
ctxstart L code FFFFFFFFFFFFB228 |
ctxstart1 L code FFFFFFFFFFFFB3FC |
csj5 L code FFFFFFFFFFFFB240 |
skip5 L code FFFFFFFFFFFFB2E4 |
skip4 L code FFFFFFFFFFFFB2FC |
dcokay L code FFFFFFFFFFFFB330 |
skip1 L code FFFFFFFFFFFFB368 |
skip2 L code FFFFFFFFFFFFB3B0 |
skip3 L code FFFFFFFFFFFFB3D8 |
skip_spi_read L code FFFFFFFFFFFFB3F0 |
j4 L code FFFFFFFFFFFFB3F4 |
ctx12 L code FFFFFFFFFFFFB410 |
context1disp L code FFFFFFFFFFFFB428 |
ctx11 L code FFFFFFFFFFFFB448 |
HelloWorld L code FFFFFFFFFFFFB460 |
j3 L code FFFFFFFFFFFFB478 |
j2 L code FFFFFFFFFFFFB48C |
MSG L code FFFFFFFFFFFFB4A0 |
MSGSTART L code FFFFFFFFFFFFB4AD |
PICInit L code FFFFFFFFFFFFB4D0 |
PICret L code FFFFFFFFFFFFB4EC |
SerialInit L code FFFFFFFFFFFFB4F0 |
SerialGetCharDirect L code FFFFFFFFFFFFB534 |
sgc1 L code FFFFFFFFFFFFCDC0 |
SerialCheckForCharDirect L code FFFFFFFFFFFFB558 |
SerialPutChar L code FFFFFFFFFFFFB570 |
spcb1 L code FFFFFFFFFFFFB5D0 |
spcb3 L code FFFFFFFFFFFFB5B0 |
spcabort L code FFFFFFFFFFFFB658 |
spcb2 L code FFFFFFFFFFFFB600 |
spcb4 L code FFFFFFFFFFFFB5E0 |
spcb5 L code FFFFFFFFFFFFB61C |
spcb6 L code FFFFFFFFFFFFB608 |
spcb8 L code FFFFFFFFFFFFB624 |
spcb7 L code FFFFFFFFFFFFB64C |
CharsInRxBuf L code FFFFFFFFFFFFB66C |
cirxb1 L code FFFFFFFFFFFFB68C |
SerialGetChar L code FFFFFFFFFFFFB690 |
sgcfifo1 L code FFFFFFFFFFFFB750 |
sgcfifo2 L code FFFFFFFFFFFFB73C |
sgcfifo3 L code FFFFFFFFFFFFB700 |
sgcfifo4 L code FFFFFFFFFFFFB724 |
sgcfifo5 L code FFFFFFFFFFFFB73C |
SerialIRQ L code FFFFFFFFFFFFB768 |
sirq1 L code FFFFFFFFFFFFB7A0 |
srxirq L code FFFFFFFFFFFFB7C8 |
stxirq L code FFFFFFFFFFFFB7C4 |
smsirq L code FFFFFFFFFFFFB7B8 |
srxirq1 L code FFFFFFFFFFFFB7C8 |
srxirq3 L code FFFFFFFFFFFFB7F8 |
srxirq2 L code FFFFFFFFFFFFB7EC |
srxirq5 L code FFFFFFFFFFFFB814 |
srxirq8 L code FFFFFFFFFFFFB8A4 |
srxirq6 L code FFFFFFFFFFFFB868 |
srxirq7 L code FFFFFFFFFFFFB88C |
VideoSC L code FFFFFFFFFFFFB8A8 |
Video1 L code FFFFFFFFFFFFB8D0 |
Video_x02 L code FFFFFFFFFFFFB90C |
Video_x03 L code FFFFFFFFFFFFB91C |
Video_x06 L code FFFFFFFFFFFFB928 |
Video_x09 L code FFFFFFFFFFFFB930 |
Video_x0A L code FFFFFFFFFFFFB944 |
Video_x0C L code FFFFFFFFFFFFB954 |
Video_x0D L code FFFFFFFFFFFFB98C |
Video_x14 L code FFFFFFFFFFFFB9E0 |
Video_x15 L code FFFFFFFFFFFFB9EC |
Video_x16 L code FFFFFFFFFFFFB9FC |
Video_x17 L code FFFFFFFFFFFFBA08 |
Video_x1A L code FFFFFFFFFFFFBA14 |
VideoRet L code FFFFFFFFFFFFBA20 |
Video_x09a L code FFFFFFFFFFFFB938 |
Video_x0Aa L code FFFFFFFFFFFFB948 |
vxd1 L code FFFFFFFFFFFFB9C0 |
SDCARDSC L code FFFFFFFFFFFFBA38 |
SDC_1 L code FFFFFFFFFFFFBA60 |
SDC_x00 L code FFFFFFFFFFFFBA78 |
SDC_x01 L code FFFFFFFFFFFFBA80 |
SDC_x02 L code FFFFFFFFFFFFBA90 |
SDCRet L code FFFFFFFFFFFFBA90 |
RTCSC L code FFFFFFFFFFFFBAA8 |
RTC_x00 L code FFFFFFFFFFFFBAD8 |
RTC_x01 L code FFFFFFFFFFFFBAE0 |
RTCRet L code FFFFFFFFFFFFBB00 |
KeybdSC L code FFFFFFFFFFFFBB14 |
kbdsc5 L code FFFFFFFFFFFFBB3C |
kbd_x00 L code FFFFFFFFFFFFBB60 |
kbd_x01 L code FFFFFFFFFFFFBB68 |
kbd_x02 L code FFFFFFFFFFFFBB74 |
kbd_x03 L code FFFFFFFFFFFFBB7C |
kbd_x04 L code FFFFFFFFFFFFBB84 |
kbd_x05 L code FFFFFFFFFFFFBB8C |
kbdscRet L code FFFFFFFFFFFFBB94 |
KeybdInit L code FFFFFFFFFFFFBBAC |
KeybdIRQ L code FFFFFFFFFFFFBBC0 |
KeybdIRQa L code FFFFFFFFFFFFBBD0 |
KeybdIRQb L code FFFFFFFFFFFFBBF8 |
KeybdIRQc L code FFFFFFFFFFFFBC0C |
SetKeyboardEcho L code FFFFFFFFFFFFBC14 |
KeybdGetChar L code FFFFFFFFFFFFBC1C |
nochar L code FFFFFFFFFFFFBC60 |
kgc3 L code FFFFFFFFFFFFBC64 |
kgc2 L code FFFFFFFFFFFFBC58 |
KeybdCheckForKey L code FFFFFFFFFFFFBC70 |
KeybdCheckForKeyDirect L code FFFFFFFFFFFFBC80 |
KeybdGetCharDirect L code FFFFFFFFFFFFBC94 |
kgc1 L code FFFFFFFFFFFFBCA4 |
gk1 L code FFFFFFFFFFFFBCDC |
gk2 L code FFFFFFFFFFFFBCD8 |
tmp_init L code FFFFFFFFFFFFBCE8 |
tmp_init4 L code FFFFFFFFFFFFBCF4 |
tmp_init5 L code FFFFFFFFFFFFBD0C |
tmp_init1 L code FFFFFFFFFFFFBD20 |
tmp_init2 L code FFFFFFFFFFFFBD30 |
tmp_init3 L code FFFFFFFFFFFFBD48 |
tmp_read L code FFFFFFFFFFFFBD4C |
tmp_read1 L code FFFFFFFFFFFFBD68 |
tmp_read3 L code FFFFFFFFFFFFBD80 |
tmp_read2 L code FFFFFFFFFFFFBD90 |
tmp_read4 L code FFFFFFFFFFFFBDA8 |
Pulse100 L code FFFFFFFFFFFFBDCC |
p1001 L code FFFFFFFFFFFFBE00 |
SelectNextToRunTCB L code FFFFFFFFFFFFBE08 |
SwitchTask L code FFFFFFFFFFFFBE10 |
swtsk1 L code FFFFFFFFFFFFBE30 |
FlashCursor L code FFFFFFFFFFFFBF60 |
flshcrsr2 L code FFFFFFFFFFFFBFBC |
flshcrsr3 L code FFFFFFFFFFFFBF94 |
flshcrsr1 L code FFFFFFFFFFFFBFA8 |
CursorOff L code FFFFFFFFFFFFBFC8 |
CursorOn L code FFFFFFFFFFFFBFDC |
ClearBmpScreen L code FFFFFFFFFFFFBFF0 |
csj4 L code FFFFFFFFFFFFC08C |
ClearScreen L code FFFFFFFFFFFFC044 |
ScrollUp L code FFFFFFFFFFFFC0B8 |
scrup1 L code FFFFFFFFFFFFC0F8 |
BlankLine L code FFFFFFFFFFFFC138 |
blnkln1 L code FFFFFFFFFFFFC170 |
AsciiToScreen L code FFFFFFFFFFFFC18C |
atoscr1 L code FFFFFFFFFFFFC1A4 |
ScreenToAscii L code FFFFFFFFFFFFC1AC |
stasc1 L code FFFFFFFFFFFFC1B8 |
CalcScreenLoc L code FFFFFFFFFFFFC1BC |
DisplayChar L code FFFFFFFFFFFFC1FC |
dccr L code FFFFFFFFFFFFC21C |
dcx7 L code FFFFFFFFFFFFC248 |
dcx6 L code FFFFFFFFFFFFC260 |
dccr1 L code FFFFFFFFFFFFC224 |
dcx8 L code FFFFFFFFFFFFC290 |
dccu1 L code FFFFFFFFFFFFC268 |
dcx9 L code FFFFFFFFFFFFC2C0 |
dccl1 L code FFFFFFFFFFFFC298 |
dcx10 L code FFFFFFFFFFFFC2F0 |
dccd1 L code FFFFFFFFFFFFC2C8 |
dcx11 L code FFFFFFFFFFFFC324 |
dcx12 L code FFFFFFFFFFFFC31C |
dcx13 L code FFFFFFFFFFFFC358 |
dcx5 L code FFFFFFFFFFFFC378 |
dcx3 L code FFFFFFFFFFFFC3AC |
dcx4 L code FFFFFFFFFFFFC3E0 |
dclf L code FFFFFFFFFFFFC3DC |
IncCursorPos L code FFFFFFFFFFFFC3FC |
icc1 L code FFFFFFFFFFFFC470 |
icr1 L code FFFFFFFFFFFFC448 |
IncCursorRow L code FFFFFFFFFFFFC434 |
DisplayString L code FFFFFFFFFFFFC488 |
dspj1 L code FFFFFFFFFFFFC49C |
dsret L code FFFFFFFFFFFFC4B0 |
DisplayStringCRLF L code FFFFFFFFFFFFC4C0 |
CRLF L code FFFFFFFFFFFFF600 |
DisplayNum L code FFFFFFFFFFFFC4FC |
DisplayNybble L code FFFFFFFFFFFFC500 |
dispnyb1 L code FFFFFFFFFFFFC51C |
DisplayByte L code FFFFFFFFFFFFC52C |
DisplayCharr L code FFFFFFFFFFFFC554 |
DisplayHalf L code FFFFFFFFFFFFC57C |
DisplayWord L code FFFFFFFFFFFFC5A4 |
dspwd1 L code FFFFFFFFFFFFC5B8 |
DisplayMemB L code FFFFFFFFFFFFC5D4 |
dspmem1 L code FFFFFFFFFFFFC5F8 |
DisplayMemC L code FFFFFFFFFFFFC624 |
dspmemc1 L code FFFFFFFFFFFFC648 |
DisplayMemW L code FFFFFFFFFFFFC674 |
BinToBCD L code FFFFFFFFFFFFC6B4 |
bta1 L code FFFFFFFFFFFFC6D8 |
BCDToAscii L code FFFFFFFFFFFFC730 |
bta2 L code FFFFFFFFFFFFC748 |
BinToStr L code FFFFFFFFFFFFC78C |
btos3 L code FFFFFFFFFFFFC7C0 |
btos1 L code FFFFFFFFFFFFC7C4 |
btos2 L code FFFFFFFFFFFFC7F4 |
Monitor L code FFFFFFFFFFFFC828 |
PromptLn L code FFFFFFFFFFFFC834 |
Prompt3 L code FFFFFFFFFFFFC840 |
Prompt1 L code FFFFFFFFFFFFC854 |
Prompt2 L code FFFFFFFFFFFFC87C |
Editmem L code FFFFFFFFFFFFCA24 |
Dumpmem L code FFFFFFFFFFFFCA70 |
Fillmem L code FFFFFFFFFFFFCAD4 |
Prompt7 L code FFFFFFFFFFFFC888 |
Prompt4 L code FFFFFFFFFFFFC890 |
ExecuteCode L code FFFFFFFFFFFFCA4C |
Prompt9 L code FFFFFFFFFFFFC89C |
Prompt10 L code FFFFFFFFFFFFC8AC |
TestCLS L code FFFFFFFFFFFFC8DC |
Prompt12 L code FFFFFFFFFFFFC8B8 |
Prompt13 L code FFFFFFFFFFFFC8C0 |
Prompt14 L code FFFFFFFFFFFFC8C8 |
Prompt15 L code FFFFFFFFFFFFC8D0 |
RandomLinesCall L code FFFFFFFFFFFFC8D4 |
HelpMsg L code FFFFFFFFFFFFC910 |
ignBlanks L code FFFFFFFFFFFFCA00 |
ignBlanks1 L code FFFFFFFFFFFFCA08 |
edtmem1 L code FFFFFFFFFFFFCA34 |
LoadSector L code FFFFFFFFFFFFCA5C |
Dumpmem2 L code FFFFFFFFFFFFCAA0 |
DumpmemW L code FFFFFFFFFFFFCAC4 |
DumpmemC L code FFFFFFFFFFFFCAB8 |
DumpmemB L code FFFFFFFFFFFFCAAC |
FillmemC L code FFFFFFFFFFFFCB20 |
FillmemH L code FFFFFFFFFFFFCB30 |
FillmemW L code FFFFFFFFFFFFCB40 |
FillmemB L code FFFFFFFFFFFFCB10 |
GetHexNumber L code FFFFFFFFFFFFCB50 |
gthxn2 L code FFFFFFFFFFFFCB68 |
gthxn1 L code FFFFFFFFFFFFCB8C |
AsciiToHexNybble L code FFFFFFFFFFFFCBA0 |
gthx3 L code FFFFFFFFFFFFCBD8 |
gthx5 L code FFFFFFFFFFFFCBB0 |
gthx6 L code FFFFFFFFFFFFCBC4 |
LoadS19 L code FFFFFFFFFFFFCBE0 |
ProcessRec L code FFFFFFFFFFFFCBEC |
NextRec L code FFFFFFFFFFFFCBE4 |
ProcessS1 L code FFFFFFFFFFFFCCA4 |
ProcessS2 L code FFFFFFFFFFFFCCAC |
ProcessS3 L code FFFFFFFFFFFFCCB4 |
ProcessS7 L code FFFFFFFFFFFFCCBC |
ProcessS8 L code FFFFFFFFFFFFCCC8 |
ProcessS9 L code FFFFFFFFFFFFCCD4 |
pcssxa L code FFFFFFFFFFFFCC4C |
pcss1a L code FFFFFFFFFFFFCC54 |
S19Get16BitAddress L code FFFFFFFFFFFFCCE0 |
S1932b L code FFFFFFFFFFFFCD64 |
S19Get24BitAddress L code FFFFFFFFFFFFCCF8 |
S1932a L code FFFFFFFFFFFFCD44 |
S19Get32BitAddress L code FFFFFFFFFFFFCD10 |
sGetChar L code FFFFFFFFFFFFCDA8 |
sgc2 L code FFFFFFFFFFFFCDB0 |
RandomLines L code FFFFFFFFFFFFCDD0 |
rl5 L code FFFFFFFFFFFFCDE4 |
rl1 L code FFFFFFFFFFFFCDF8 |
rl2 L code FFFFFFFFFFFFCE14 |
rl3 L code FFFFFFFFFFFFCE30 |
rl4 L code FFFFFFFFFFFFCE4C |
rl8 L code FFFFFFFFFFFFCE78 |
rl7 L code FFFFFFFFFFFFCE8C |
RandomizeSprram L code FFFFFFFFFFFFCE9C |
rsr1 L code FFFFFFFFFFFFCEAC |
SetupAC97 L code FFFFFFFFFFFFCEC4 |
sac974 L code FFFFFFFFFFFFCED0 |
sac971 L code FFFFFFFFFFFFCEDC |
sac973 L code FFFFFFFFFFFFCF08 |
sac972 L code FFFFFFFFFFFFCF48 |
sac975 L code FFFFFFFFFFFFCF60 |
Beep L code FFFFFFFFFFFFCF6C |
beep1 L code FFFFFFFFFFFFCFE4 |
beep2 L code FFFFFFFFFFFFD014 |
Piano L code FFFFFFFFFFFFD044 |
playnt L code FFFFFFFFFFFFD054 |
playnt1a L code FFFFFFFFFFFFD07C |
playnt1b L code FFFFFFFFFFFFD088 |
playnt1c L code FFFFFFFFFFFFD094 |
playnt1d L code FFFFFFFFFFFFD0A0 |
playnt1e L code FFFFFFFFFFFFD0AC |
playnt1f L code FFFFFFFFFFFFD0B8 |
playnt1g L code FFFFFFFFFFFFD0C4 |
Tone L code FFFFFFFFFFFFD0D0 |
tone1 L code FFFFFFFFFFFFD110 |
tone2 L code FFFFFFFFFFFFD12C |
SetupRasterIRQ L code FFFFFFFFFFFFD14C |
RasterIRQfn L code FFFFFFFFFFFFD1AC |
rirq1 L code FFFFFFFFFFFFD1DC |
rirq2 L code FFFFFFFFFFFFD1DC |
rirq3 L code FFFFFFFFFFFFD1DC |
rirq4 L code FFFFFFFFFFFFD1DC |
rirq5 L code FFFFFFFFFFFFD1DC |
rirq6 L code FFFFFFFFFFFFD1DC |
rirq7 L code FFFFFFFFFFFFD1DC |
rirq8 L code FFFFFFFFFFFFD1DC |
DisplayDatetime L code FFFFFFFFFFFFD248 |
InitializeGame L code FFFFFFFFFFFFD2C4 |
DrawScore L code FFFFFFFFFFFFD2EC |
DrawMissile L code FFFFFFFFFFFFD31C |
MissileOff L code FFFFFFFFFFFFD378 |
DrawMan L code FFFFFFFFFFFFD3A0 |
DrawInvader L code FFFFFFFFFFFFD3EC |
DrawInvaders L code FFFFFFFFFFFFD40C |
dinv1 L code FFFFFFFFFFFFD494 |
DrawBombs L code FFFFFFFFFFFFD49C |
Invaders L code FFFFFFFFFFFFD4A0 |
InvadersLoop L code FFFFFFFFFFFFD4AC |
TestMoveMan L code FFFFFFFFFFFFD4C0 |
MoveManRight L code FFFFFFFFFFFFD4D4 |
MoveManLeft L code FFFFFFFFFFFFD4EC |
FireMissile L code FFFFFFFFFFFFD500 |
Invaders1 L code FFFFFFFFFFFFD524 |
InvadersEnd L code FFFFFFFFFFFFD52C |
spi_init L code FFFFFFFFFFFFD538 |
spi_init1 L code FFFFFFFFFFFFD568 |
spi_error L code FFFFFFFFFFFFD594 |
spi_init_exit L code FFFFFFFFFFFFD5A4 |
spi_read_sector L code FFFFFFFFFFFFD5B4 |
spi_read_sect1 L code FFFFFFFFFFFFD614 |
spi_read_error L code FFFFFFFFFFFFD64C |
spi_read_sect2 L code FFFFFFFFFFFFD634 |
spi_read_ret L code FFFFFFFFFFFFD65C |
spi_read_boot L code FFFFFFFFFFFFD674 |
spi_read_boot1 L code FFFFFFFFFFFFD694 |
spi_read_boot2 L code FFFFFFFFFFFFD6DC |
spi_read_boot3 L code FFFFFFFFFFFFD6D0 |
spi_read_boot4 L code FFFFFFFFFFFFD714 |
msgFoundEB L code FFFFFFFFFFFFD728 |
loadFAT L code FFFFFFFFFFFFD73C |
loadFAT1 L code FFFFFFFFFFFFD780 |
loadRootDirectory L code FFFFFFFFFFFFD79C |
loadRootDir1 L code FFFFFFFFFFFFD800 |
loadBootFile L code FFFFFFFFFFFFD814 |
loadBootFileTmp L code FFFFFFFFFFFFD8A8 |
loadBootFile4 L code FFFFFFFFFFFFD870 |
loadBootFile5 L code FFFFFFFFFFFFD890 |
loadBootFile3 L code FFFFFFFFFFFFD888 |
loadBootFile1 L code FFFFFFFFFFFFD8C8 |
loadBootFile2 L code FFFFFFFFFFFFD914 |
msgJumpingToBoot L code FFFFFFFFFFFFD920 |
msgNotBootable L code FFFFFFFFFFFFD930 |
spi_init_ok_msg L code FFFFFFFFFFFFD946 |
spi_init_error_msg L code FFFFFFFFFFFFD960 |
spi_boot_error_msg L code FFFFFFFFFFFFD98B |
spi_read_error_msg L code FFFFFFFFFFFFD99E |
my_MAC1 C constant 0000000000000000 |
my_MAC2 C constant 00000000000000FF |
my_MAC3 C constant 00000000000000EE |
my_MAC4 C constant 00000000000000F0 |
my_MAC5 C constant 00000000000000DA |
my_MAC6 C constant 0000000000000042 |
.bss L code FFFFFFFFFFFFD9B4 |
eth_unique_id L code FFFFFFFFFFFFD9B4 |
.code L code FFFFFFFFFFFFD9BC |
eth_init L code FFFFFFFFFFFFD9BC |
eth_request_packet L code FFFFFFFFFFFFD9F4 |
eth1 L code FFFFFFFFFFFFDA24 |
eth20 L code FFFFFFFFFFFFDA4C |
eth_interpret_packet L code FFFFFFFFFFFFDA70 |
eth2 L code FFFFFFFFFFFFDA9C |
eth5 L code FFFFFFFFFFFFDA90 |
eth3 L code FFFFFFFFFFFFDACC |
eth4 L code FFFFFFFFFFFFDAB4 |
eth6 L code FFFFFFFFFFFFDAC0 |
eth7 L code FFFFFFFFFFFFDACC |
eth_send_packet L code FFFFFFFFFFFFDADC |
eth8 L code FFFFFFFFFFFFDAF4 |
eth_build_packet L code FFFFFFFFFFFFDB24 |
eth16 L code FFFFFFFFFFFFDBEC |
eth_checksum L code FFFFFFFFFFFFDC38 |
eth15 L code FFFFFFFFFFFFDC58 |
eth14 L code FFFFFFFFFFFFDC80 |
eth_verifyIP L code FFFFFFFFFFFFDCB0 |
eth11 L code FFFFFFFFFFFFDD0C |
eth12 L code FFFFFFFFFFFFDCF4 |
eth13 L code FFFFFFFFFFFFDCF8 |
eth_main L code FFFFFFFFFFFFDD3C |
eth_loop L code FFFFFFFFFFFFDD40 |
eth10 L code FFFFFFFFFFFFDDF8 |
GOSTART L code FFFFFFFFFFFFDF4C |
GOWARM L code FFFFFFFFFFFFDF50 |
GOOUT L code FFFFFFFFFFFFDF54 |
GOIN L code FFFFFFFFFFFFDF58 |
GOAUXO L code FFFFFFFFFFFFDF5C |
GOAUXI L code FFFFFFFFFFFFDF60 |
GOBYE L code FFFFFFFFFFFFDF64 |
TXTBGN L code FFFFFFFFFFFFDF68 |
ENDMEM L code FFFFFFFFFFFFDF70 |
CSTART L code FFFFFFFFFFFFDF80 |
WSTART L code FFFFFFFFFFFFE004 |
ST3 L code FFFFFFFFFFFFE01C |
DIRECT L code FFFFFFFFFFFFE318 |
ST2 L code FFFFFFFFFFFFE048 |
ERROR L code FFFFFFFFFFFFF028 |
ST4 L code FFFFFFFFFFFFE09C |
ST7 L code FFFFFFFFFFFFE078 |
ST6 L code FFFFFFFFFFFFE094 |
ST5 L code FFFFFFFFFFFFE0C4 |
TAB1 L code FFFFFFFFFFFFE0EC |
TAB2 L code FFFFFFFFFFFFE0FE |
TAB4 L code FFFFFFFFFFFFE14E |
TAB5 L code FFFFFFFFFFFFE16F |
TAB6 L code FFFFFFFFFFFFE172 |
TAB8 L code FFFFFFFFFFFFE177 |
TAB9 L code FFFFFFFFFFFFE181 |
TAB10 L code FFFFFFFFFFFFE185 |
TAB1_1 L code FFFFFFFFFFFFE188 |
TAB2_1 L code FFFFFFFFFFFFE1B0 |
TAB4_1 L code FFFFFFFFFFFFE258 |
TAB5_1 L code FFFFFFFFFFFFE2A0 |
TAB6_1 L code FFFFFFFFFFFFE2B0 |
TAB8_1 L code FFFFFFFFFFFFE2C0 |
TAB9_1 L code FFFFFFFFFFFFE2F8 |
TAB10_1 L code FFFFFFFFFFFFE308 |
EXEC L code FFFFFFFFFFFFE320 |
EXLP L code FFFFFFFFFFFFE334 |
EXNGO L code FFFFFFFFFFFFE34C |
EXGO L code FFFFFFFFFFFFE384 |
EXMAT L code FFFFFFFFFFFFE374 |
EX1 L code FFFFFFFFFFFFE364 |
NEW L code FFFFFFFFFFFFE38C |
STOP L code FFFFFFFFFFFFE39C |
RUN L code FFFFFFFFFFFFE3A4 |
RUNNXL L code FFFFFFFFFFFFE3B4 |
RUNTSL L code FFFFFFFFFFFFE3D4 |
RUNSML L code FFFFFFFFFFFFE3DC |
GOTO L code FFFFFFFFFFFFE3EC |
_clr L code FFFFFFFFFFFFE40C |
FINISH L code FFFFFFFFFFFFE518 |
clearVars L code FFFFFFFFFFFFE414 |
cv1 L code FFFFFFFFFFFFE428 |
LISTX L code FFFFFFFFFFFFE440 |
LS1 L code FFFFFFFFFFFFE454 |
LS4 L code FFFFFFFFFFFFE45C |
LS3 L code FFFFFFFFFFFFE47C |
LS2 L code FFFFFFFFFFFFE474 |
PRINT L code FFFFFFFFFFFFE488 |
PR2 L code FFFFFFFFFFFFE4A0 |
PR0 L code FFFFFFFFFFFFE4B4 |
PR3 L code FFFFFFFFFFFFE4EC |
PR1 L code FFFFFFFFFFFFE4CC |
PR4 L code FFFFFFFFFFFFE4E4 |
PR8 L code FFFFFFFFFFFFE508 |
PR6 L code FFFFFFFFFFFFE500 |
GOSUB L code FFFFFFFFFFFFE520 |
gosub1 L code FFFFFFFFFFFFE538 |
RETURN L code FFFFFFFFFFFFE55C |
return1 L code FFFFFFFFFFFFE570 |
FOR L code FFFFFFFFFFFFE594 |
FR1 L code FFFFFFFFFFFFE5AC |
FR2 L code FFFFFFFFFFFFE5C0 |
FR4 L code FFFFFFFFFFFFE5CC |
FR3 L code FFFFFFFFFFFFE5C8 |
FR5 L code FFFFFFFFFFFFE5D0 |
FR7 L code FFFFFFFFFFFFE5EC |
FR6 L code FFFFFFFFFFFFE5E8 |
FR8 L code FFFFFFFFFFFFE60C |
NEXT L code FFFFFFFFFFFFE610 |
NX4 L code FFFFFFFFFFFFE624 |
NX0 L code FFFFFFFFFFFFE628 |
NX5 L code FFFFFFFFFFFFE638 |
NX2 L code FFFFFFFFFFFFE644 |
NX1 L code FFFFFFFFFFFFE664 |
NXPurge L code FFFFFFFFFFFFE678 |
NX3 L code FFFFFFFFFFFFE668 |
IF L code FFFFFFFFFFFFE680 |
IF1 L code FFFFFFFFFFFFE684 |
IF2 L code FFFFFFFFFFFFE688 |
IF3 L code FFFFFFFFFFFFE698 |
INPERR L code FFFFFFFFFFFFE69C |
INPUT L code FFFFFFFFFFFFE6B0 |
IP6 L code FFFFFFFFFFFFE6B8 |
IP2 L code FFFFFFFFFFFFE6D8 |
IP4 L code FFFFFFFFFFFFE748 |
IP3 L code FFFFFFFFFFFFE708 |
IP7 L code FFFFFFFFFFFFE6F0 |
IP5 L code FFFFFFFFFFFFE758 |
DEFLT L code FFFFFFFFFFFFE764 |
LET L code FFFFFFFFFFFFE76C |
LT1 L code FFFFFFFFFFFFE780 |
LOAD L code FFFFFFFFFFFFE784 |
LOD1 L code FFFFFFFFFFFFE790 |
LODEND L code FFFFFFFFFFFFE7D0 |
LOD2 L code FFFFFFFFFFFFE7B8 |
GCHAR L code FFFFFFFFFFFFE7D8 |
GCHAR1 L code FFFFFFFFFFFFE7F0 |
asciiToHex L code FFFFFFFFFFFFE81C |
a2h1 L code FFFFFFFFFFFFE824 |
SAVE L code FFFFFFFFFFFFE830 |
SAVE1 L code FFFFFFFFFFFFE838 |
SAVEND L code FFFFFFFFFFFFE874 |
SAVE2 L code FFFFFFFFFFFFE860 |
AUXOCRLF L code FFFFFFFFFFFFE88C |
PWORD L code FFFFFFFFFFFFE8AC |
pword1 L code FFFFFFFFFFFFE8C0 |
pword2 L code FFFFFFFFFFFFE8DC |
toAsciiHex L code FFFFFFFFFFFFE8FC |
tah1 L code FFFFFFFFFFFFE908 |
POKE L code FFFFFFFFFFFFE910 |
PKER L code FFFFFFFFFFFFE93C |
POKEC L code FFFFFFFFFFFFE944 |
POKEH L code FFFFFFFFFFFFE970 |
POKEW L code FFFFFFFFFFFFE99C |
SYSX L code FFFFFFFFFFFFE9C8 |
sysx1 L code FFFFFFFFFFFFE9DC |
OREXPR L code FFFFFFFFFFFFE9F0 |
XP_OR1 L code FFFFFFFFFFFFE9FC |
XP_OR L code FFFFFFFFFFFFEA0C |
XP_ORX L code FFFFFFFFFFFFEA1C |
ANDEXPR L code FFFFFFFFFFFFEA28 |
XP_AND1 L code FFFFFFFFFFFFEA34 |
XP_AND L code FFFFFFFFFFFFEA44 |
XP_ANDX L code FFFFFFFFFFFFEA54 |
isDigit L code FFFFFFFFFFFFEA60 |
isDigitFalse L code FFFFFFFFFFFFEA70 |
isAlpha L code FFFFFFFFFFFFEA78 |
isAlphaFalse L code FFFFFFFFFFFFEA90 |
isAlphaTrue L code FFFFFFFFFFFFEA88 |
isAlnum L code FFFFFFFFFFFFEA98 |
isDigitx L code FFFFFFFFFFFFEAB4 |
EXPR L code FFFFFFFFFFFFEABC |
XP11 L code FFFFFFFFFFFFEAD8 |
XPRT1 L code FFFFFFFFFFFFEB44 |
XPRT0 L code FFFFFFFFFFFFEB38 |
XP12 L code FFFFFFFFFFFFEAE8 |
XP13 L code FFFFFFFFFFFFEAF8 |
XP14 L code FFFFFFFFFFFFEB08 |
XP15 L code FFFFFFFFFFFFEB18 |
XP16 L code FFFFFFFFFFFFEB28 |
XP17 L code FFFFFFFFFFFFEB50 |
XP18 L code FFFFFFFFFFFFEB5C |
EXPR2 L code FFFFFFFFFFFFEB78 |
XP26 L code FFFFFFFFFFFFEBD4 |
XP21 L code FFFFFFFFFFFFEB98 |
XP22 L code FFFFFFFFFFFFEBA4 |
XP23 L code FFFFFFFFFFFFEBA8 |
XP24 L code FFFFFFFFFFFFEBBC |
XP25 L code FFFFFFFFFFFFEBC8 |
XP45 L code FFFFFFFFFFFFEBE0 |
EXPR3 L code FFFFFFFFFFFFEBEC |
XP31 L code FFFFFFFFFFFFEBF8 |
XP34 L code FFFFFFFFFFFFEC18 |
XP47 L code FFFFFFFFFFFFEC38 |
EXPR4 L code FFFFFFFFFFFFEC44 |
XP40 L code FFFFFFFFFFFFEC58 |
XP41 L code FFFFFFFFFFFFEC70 |
XP46 L code FFFFFFFFFFFFEC7C |
PARN L code FFFFFFFFFFFFEC84 |
XP42 L code FFFFFFFFFFFFECA8 |
XP43 L code FFFFFFFFFFFFECB0 |
TSTV L code FFFFFFFFFFFFECB8 |
tstv_notfound L code FFFFFFFFFFFFED2C |
TV1 L code FFFFFFFFFFFFED10 |
TV2 L code FFFFFFFFFFFFED04 |
TSTVRT L code FFFFFFFFFFFFED20 |
getVarName L code FFFFFFFFFFFFED3C |
gvn1 L code FFFFFFFFFFFFEDC4 |
gvn4 L code FFFFFFFFFFFFED5C |
gvn2 L code FFFFFFFFFFFFED94 |
gvn6 L code FFFFFFFFFFFFED84 |
gvn3 L code FFFFFFFFFFFFEDA8 |
findVar L code FFFFFFFFFFFFEDD4 |
fv4 L code FFFFFFFFFFFFEDE4 |
fv3 L code FFFFFFFFFFFFEE08 |
fv1 L code FFFFFFFFFFFFEE10 |
fv2 L code FFFFFFFFFFFFEE20 |
PEEK L code FFFFFFFFFFFFEE34 |
PEEKC L code FFFFFFFFFFFFEE44 |
PEEKH L code FFFFFFFFFFFFEE58 |
PEEKW L code FFFFFFFFFFFFEE6C |
USRX L code FFFFFFFFFFFFEE80 |
RND L code FFFFFFFFFFFFEE9C |
rnd2 L code FFFFFFFFFFFFEECC |
rnd1 L code FFFFFFFFFFFFEEC4 |
modu4 L code FFFFFFFFFFFFEEDC |
mod2 L code FFFFFFFFFFFFEEFC |
mod1 L code FFFFFFFFFFFFEF18 |
ABS L code FFFFFFFFFFFFEF34 |
SGN L code FFFFFFFFFFFFEF44 |
SIZEX L code FFFFFFFFFFFFEF54 |
SETVAL L code FFFFFFFFFFFFEF68 |
sv2 L code FFFFFFFFFFFFEF84 |
SV1 L code FFFFFFFFFFFFEFAC |
QWHAT L code FFFFFFFFFFFFF024 |
FIN L code FFFFFFFFFFFFEFB0 |
FI1 L code FFFFFFFFFFFFEFCC |
FI2 L code FFFFFFFFFFFFEFE4 |
ENDCHK L code FFFFFFFFFFFFEFEC |
ec1 L code FFFFFFFFFFFFF00C |
TOOBIG L code FFFFFFFFFFFFF014 |
QSORRY L code FFFFFFFFFFFFF01C |
GETLN L code FFFFFFFFFFFFF068 |
GL1 L code FFFFFFFFFFFFF090 |
GL3 L code FFFFFFFFFFFFF0C4 |
GL4 L code FFFFFFFFFFFFF0EC |
GL2 L code FFFFFFFFFFFFF0A8 |
GL7 L code FFFFFFFFFFFFF11C |
GL6 L code FFFFFFFFFFFFF114 |
GL5 L code FFFFFFFFFFFFF0F8 |
FNDLN L code FFFFFFFFFFFFF138 |
fl1 L code FFFFFFFFFFFFF144 |
FNDLNP L code FFFFFFFFFFFFF148 |
FNDRET1 L code FFFFFFFFFFFFF174 |
FNDNXT L code FFFFFFFFFFFFF188 |
FNDRET2 L code FFFFFFFFFFFFF180 |
FNDRET L code FFFFFFFFFFFFF16C |
FNDSKP L code FFFFFFFFFFFFF18C |
MVUP1 L code FFFFFFFFFFFFF19C |
MVUP L code FFFFFFFFFFFFF1AC |
MVRET L code FFFFFFFFFFFFF1B0 |
MVDOWN1 L code FFFFFFFFFFFFF1B4 |
MVDOWN L code FFFFFFFFFFFFF1C4 |
POPA L code FFFFFFFFFFFFF1CC |
PP1 L code FFFFFFFFFFFFF1FC |
PUSHA L code FFFFFFFFFFFFF200 |
PU1 L code FFFFFFFFFFFFF240 |
PRTSTG L code FFFFFFFFFFFFF24C |
PS1 L code FFFFFFFFFFFFF268 |
PRTRET L code FFFFFFFFFFFFF288 |
QTSTG L code FFFFFFFFFFFFF2A4 |
QT1 L code FFFFFFFFFFFFF2BC |
QT2 L code FFFFFFFFFFFFF2FC |
QT3 L code FFFFFFFFFFFFF2D4 |
QT4 L code FFFFFFFFFFFFF2E8 |
QT5 L code FFFFFFFFFFFFF308 |
prCRLF L code FFFFFFFFFFFFF310 |
PRTNUM L code FFFFFFFFFFFFF330 |
PN2 L code FFFFFFFFFFFFF360 |
PN1 L code FFFFFFFFFFFFF364 |
PN6 L code FFFFFFFFFFFFF380 |
PN4 L code FFFFFFFFFFFFF390 |
PN3 L code FFFFFFFFFFFFF384 |
PN5 L code FFFFFFFFFFFFF39C |
PNRET L code FFFFFFFFFFFFF3B0 |
PRTHEXNUM L code FFFFFFFFFFFFF3C8 |
PHN1 L code FFFFFFFFFFFFF400 |
PHN7 L code FFFFFFFFFFFFF414 |
PHN8 L code FFFFFFFFFFFFF418 |
PHN6 L code FFFFFFFFFFFFF430 |
PHN4 L code FFFFFFFFFFFFF440 |
PHN3 L code FFFFFFFFFFFFF434 |
PHN5 L code FFFFFFFFFFFFF44C |
PHNRET L code FFFFFFFFFFFFF460 |
PRTLN L code FFFFFFFFFFFFF478 |
TSTC L code FFFFFFFFFFFFF4C0 |
TC1 L code FFFFFFFFFFFFF4E8 |
TSTNUM L code FFFFFFFFFFFFF4F8 |
TN1 L code FFFFFFFFFFFFF50C |
TSNMRET L code FFFFFFFFFFFFF54C |
TN2 L code FFFFFFFFFFFFF534 |
IGNBLK L code FFFFFFFFFFFFF554 |
IGB2 L code FFFFFFFFFFFFF55C |
IGB1 L code FFFFFFFFFFFFF568 |
IGBRET L code FFFFFFFFFFFFF570 |
TOUPBUF L code FFFFFFFFFFFFF578 |
TOUPB1 L code FFFFFFFFFFFFF588 |
TOUPBRT L code FFFFFFFFFFFFF5C4 |
DOQUO L code FFFFFFFFFFFFF5AC |
DOQUO1 L code FFFFFFFFFFFFF5B8 |
toUpper L code FFFFFFFFFFFFF5CC |
TOUPRET L code FFFFFFFFFFFFF5D8 |
CHKIO L code FFFFFFFFFFFFF5DC |
CHKRET2 L code FFFFFFFFFFFFF5F4 |
CHKRET L code FFFFFFFFFFFFF5F8 |
PRMESG L code FFFFFFFFFFFFF604 |
PRMESG1 L code FFFFFFFFFFFFF614 |
PRMRET L code FFFFFFFFFFFFF628 |
PRMESGAUX L code FFFFFFFFFFFFF638 |
PRMESGA1 L code FFFFFFFFFFFFF648 |
PRMRETA L code FFFFFFFFFFFFF65C |
OUTC L code FFFFFFFFFFFFF66C |
INC L code FFFFFFFFFFFFF670 |
AUXIN L code FFFFFFFFFFFFF674 |
AXIRET_ZERO L code FFFFFFFFFFFFF684 |
AXIRET L code FFFFFFFFFFFFF680 |
AUXOUT L code FFFFFFFFFFFFF68C |
_cls L code FFFFFFFFFFFFF690 |
_wait10 L code FFFFFFFFFFFFF698 |
_getATAStatus L code FFFFFFFFFFFFF69C |
_waitCFNotBusy L code FFFFFFFFFFFFF6A0 |
_rdcf L code FFFFFFFFFFFFF6A4 |
rdcf6 L code FFFFFFFFFFFFF6A8 |
BYEBYE L code FFFFFFFFFFFFF8A0 |
msgInit L code FFFFFFFFFFFFF6B8 |
OKMSG L code FFFFFFFFFFFFF6EE |
msgWhat L code FFFFFFFFFFFFF6F5 |
SRYMSG L code FFFFFFFFFFFFF6FD |
CLMSG L code FFFFFFFFFFFFF703 |
msgReadError L code FFFFFFFFFFFFF706 |
msgNumTooBig L code FFFFFFFFFFFFF721 |
msgDivZero L code FFFFFFFFFFFFF735 |
msgVarSpace L code FFFFFFFFFFFFF748 |
msgBytesFree L code FFFFFFFFFFFFF760 |
msgReady L code FFFFFFFFFFFFF76E |
msgComma L code FFFFFFFFFFFFF778 |
msgLineRange L code FFFFFFFFFFFFF78C |
msgVar L code FFFFFFFFFFFFF7A2 |
msgRNDBad L code FFFFFFFFFFFFF7B9 |
msgSYSBad L code FFFFFFFFFFFFF7CD |
msgInputVar L code FFFFFFFFFFFFF7DF |
msgNextFor L code FFFFFFFFFFFFF7FC |
msgNextVar L code FFFFFFFFFFFFF80F |
msgBadGotoGosub L code FFFFFFFFFFFFF833 |
msgRetWoGosub L code FFFFFFFFFFFFF850 |
msgTooBig L code FFFFFFFFFFFFF867 |
msgExtraChars L code FFFFFFFFFFFFF87C |
LSTROM C constant 0000000000000000 |
ramtest L code FFFFFFFFFFFFE7B0 |
ramtest2 L code FFFFFFFFFFFFE7C4 |
ramtest1 L code FFFFFFFFFFFFE7E8 |
ramtest4 L code FFFFFFFFFFFFE7F0 |
ramtest3 L code FFFFFFFFFFFFE81C |
ramtest8 L code FFFFFFFFFFFFE88C |
ramtest5 L code FFFFFFFFFFFFE834 |
ramtest6 L code FFFFFFFFFFFFE858 |
ramtest7 L code FFFFFFFFFFFFE860 |
ramtest9 L code FFFFFFFFFFFFE894 |
ramtest10 L code FFFFFFFFFFFFE89C |
iberr_rout L code FFFFFFFFFFFFE8A4 |
dberr_rout L code FFFFFFFFFFFFE8BC |
dberr1 L code FFFFFFFFFFFFE8E4 |
msgdberr L code FFFFFFFFFFFFE910 |
msgEPC L code FFFFFFFFFFFFE924 |
msgiberr L code FFFFFFFFFFFFE92B |
irqrout L code FFFFFFFFFFFFE950 |
irq1000Hz L code FFFFFFFFFFFFE970 |
irq100Hz L code FFFFFFFFFFFFE9C8 |
irqSerial L code FFFFFFFFFFFFE9D8 |
irqret L code FFFFFFFFFFFFEA08 |
irqRaster L code FFFFFFFFFFFFE9E8 |
irqKeybd L code FFFFFFFFFFFFE9F8 |
nmirout L code FFFFFFFFFFFFEA20 |
DTLBHandler L code FFFFFFFFFFFFEA24 |
dh1 L code FFFFFFFFFFFFEA34 |
ramtest L code FFFFFFFFFFFFF8B0 |
ramtest2 L code FFFFFFFFFFFFF8C4 |
ramtest1 L code FFFFFFFFFFFFF8E8 |
ramtest4 L code FFFFFFFFFFFFF8F0 |
ramtest3 L code FFFFFFFFFFFFF91C |
ramtest8 L code FFFFFFFFFFFFF98C |
ramtest5 L code FFFFFFFFFFFFF934 |
ramtest6 L code FFFFFFFFFFFFF958 |
ramtest7 L code FFFFFFFFFFFFF960 |
ramtest9 L code FFFFFFFFFFFFF994 |
ramtest10 L code FFFFFFFFFFFFF99C |
iberr_rout L code FFFFFFFFFFFFF9A4 |
dberr_rout L code FFFFFFFFFFFFF9BC |
dberr1 L code FFFFFFFFFFFFF9F0 |
msgdberr L code FFFFFFFFFFFFFA20 |
msgEPC L code FFFFFFFFFFFFFA34 |
msgiberr L code FFFFFFFFFFFFFA3B |
irqrout L code FFFFFFFFFFFFFA5C |
irq1000Hz L code FFFFFFFFFFFFFABC |
irq100Hz L code FFFFFFFFFFFFFAF0 |
irqSerial L code FFFFFFFFFFFFFB10 |
irqRaster L code FFFFFFFFFFFFFB1C |
irqKeybd L code FFFFFFFFFFFFFB28 |
irqColdStart L code FFFFFFFFFFFFFB34 |
irqret L code FFFFFFFFFFFFFAF8 |
nmirout L code FFFFFFFFFFFFFB38 |
msgPerr L code FFFFFFFFFFFFFB80 |
ui_irout L code FFFFFFFFFFFFFB94 |
ui_irout1 L code FFFFFFFFFFFFFBB8 |
msgUnimp L code FFFFFFFFFFFFFBC0 |
DTLBHandler L code FFFFFFFFFFFFFBE0 |
dh1 L code FFFFFFFFFFFFFBF0 |
/trunk/software/sample code/bootrom.s
1,7 → 1,10
; ============================================================================ |
; (C) 2012,2013 Robert Finch, Stratford |
; All Rights Reserved. |
; robfinch<remove>@opencores.org |
; __ |
; \\__/ o\ (C) 2012-2013 Robert Finch, Stratford |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; This source file is free software: you can redistribute it and/or modify |
; it under the terms of the GNU Lesser General Public License as published |
23,11 → 26,17
TAB EQU 0x09 |
CTRLC EQU 0x03 |
CTRLH EQU 0x08 |
CTRLI EQU 0x09 |
CTRLJ EQU 0x0A |
CTRLK EQU 0x0B |
CTRLM EQU 0x0D |
CTRLS EQU 0x13 |
CTRLX EQU 0x18 |
XON EQU 0x11 |
XOFF EQU 0x13 |
|
EX_IRQ EQU 449 |
|
DATA_PRESENT EQU 0x01 ; there is data preset at the serial port bc_uart3 |
XMIT_NOT_FULL EQU 0x20 |
|
90,15 → 99,19
TCBr30 EQU 0xE8 |
TCBr31 EQU 0xF0 |
|
SCREENGATE EQU 0x00 |
KEYBDGATE EQU 0x01 |
VIDEOGATE EQU 0x02 |
CARDGATE EQU 0x03 |
warmStart EQU 0x1020 |
usrJmp EQU 0x1028 |
TickIRQAddr EQU 0x1030 |
TaskBlock EQU 0x1038 |
tencount EQU 0x13F8 |
Milliseconds EQU 0x1400 |
Lastloc EQU 0x1408 |
CharColor EQU 0x1410 |
ScreenColor EQU 0x1414 |
CursorRow EQU 0x1416 |
CursorRow EQU 0x1417 |
CursorCol EQU 0x1418 |
CursorFlash EQU 0x141A |
KeybdEcho EQU 0x141C |
105,6 → 118,11
KeybdBuffer EQU 0x1440 |
KeybdHead EQU 0x1450 |
KeybdTail EQU 0x1451 |
sp_save EQU 0x1460 |
lr_save EQU 0x1468 |
r1_save EQU 0x1470 |
r2_save EQU 0x1478 |
r26_save EQU 0x1480 |
Score EQU 0x1500 |
Manpos EQU 0x1508 |
MissileActive EQU 0x1510 |
148,11 → 166,34
r2save EQU 0x20B8 |
AXCstart EQU 0x20C0 |
|
; Context startup address table |
; |
ctx0start EQU 0x20D0 |
ctx1start EQU 0x20D8 |
ctx2start EQU 0x20E0 |
ctx3start EQU 0x20E8 |
ctx4start EQU 0x20F0 |
ctx5start EQU 0x20F8 |
ctx6start EQU 0x2100 |
ctx7start EQU 0x2108 |
ctx8start EQU 0x2110 |
ctx9start EQU 0x2118 |
ctx10start EQU 0x2120 |
ctx11start EQU 0x2128 |
ctx12start EQU 0x2130 |
ctx13start EQU 0x2138 |
ctx14start EQU 0x2140 |
ctx15start EQU 0x2148 |
sp_saves EQU 0x2200 |
sp_saves_end EQU 0x2280 |
p100IRQvec EQU 0x3000 |
keybdIRQvec EQU 0x3008 |
serialIRQvec EQU 0x3010 |
rasterIRQvec EQU 0x3018 |
|
startSector EQU 0x30F8 |
BPB EQU 0x3100 |
|
TEXTSCR EQU 0xD0_0000 |
COLORSCR EQU 0xD1_0000 |
TEXTREG EQU 0xDA_0000 |
169,6 → 210,34
UART_IE EQU 0xDC_0A04 |
UART_MC EQU 0xDC_0A06 |
DATETIME EQU 0xDC_0400 |
|
SPIMASTER EQU 0xDC_0500 |
SPI_MASTER_VERSION_REG EQU 0x00 |
SPI_MASTER_CONTROL_REG EQU 0x01 |
SPI_TRANS_TYPE_REG EQU 0x02 |
SPI_TRANS_CTRL_REG EQU 0x03 |
SPI_TRANS_STATUS_REG EQU 0x04 |
SPI_TRANS_ERROR_REG EQU 0x05 |
SPI_DIRECT_ACCESS_DATA_REG EQU 0x06 |
SPI_SD_ADDR_7_0_REG EQU 0x07 |
SPI_SD_ADDR_15_8_REG EQU 0x08 |
SPI_SD_ADDR_23_16_REG EQU 0x09 |
SPI_SD_ADDR_31_24_REG EQU 0x0a |
SPI_RX_FIFO_DATA_REG EQU 0x10 |
SPI_RX_FIFO_DATA_COUNT_MSB EQU 0x12 |
SPI_RX_FIFO_DATA_COUNT_LSB EQU 0x13 |
SPI_RX_FIFO_CTRL_REG EQU 0x14 |
SPI_TX_FIFO_DATA_REG EQU 0x20 |
SPI_TX_FIFO_CTRL_REG EQU 0x24 |
SPI_INIT_SD EQU 0x01 |
SPI_TRANS_START EQU 0x01 |
SPI_TRANS_BUSY EQU 0x01 |
SPI_INIT_NO_ERROR EQU 0x00 |
SPI_READ_NO_ERROR EQU 0x00 |
RW_READ_SD_BLOCK EQU 0x02 |
RW_WRITE_SD_BLOCK EQU 0x03 |
|
|
PIC EQU 0xDC_0FF0 |
PIC_IE EQU 0xDC_0FF2 |
|
180,7 → 249,12
|
SPRRAM EQU 0xD8_0000 |
AC97 EQU 0xDC_1000 |
TMP EQU 0xDC_0300 |
LED EQU 0xDC_0600 |
ETHMAC EQU 0xDC_2000 |
CONFIGREC EQU 0xDC_FFFF |
MIIMODER EQU 0x28 |
MIIADDRESS EQU 0x30 |
GACCEL EQU 0xDA_E000 |
RASTERIRQ EQU 0xDA_0100 |
BOOT_STACK EQU 0xFFFF_FFFF_FFFE_FFF8 |
187,6 → 261,8
SPRITEREGS EQU 0xDA_D000 |
BITMAPSCR EQU 0x00000001_00200000 |
|
BOOTJMP EQU 0x100800204 |
|
txempty EQU 0x40 |
rxfull EQU 0x01 |
|
194,22 → 270,18
; Internal variables follow: |
; |
bss |
org 0x1038 |
org 0x1048 |
txtWidth db 0 ; BIOS var =56 |
txtHeight db 0 ; BIOS var =31 |
cursx db 0 ; cursor x position |
cursy db 0 ; cursor y position |
pos dh 0 ; text screen position |
org 0x1040 |
charToPrint dc 0 |
fgColor db 0 |
bkColor db 0 |
cursFlash db 0 ; flash the cursor ? |
|
lineLinkTbl fill.b 25,0 ; screen line link table |
align 8 |
|
org 0x1080 |
lineLinkTbl fill.b 47,0 ; screen line link table |
typef db 0 ; variable / expression type |
align 8 |
OSSP dw 1 ; OS value of sp |
256,6 → 328,10
jmp KeybdGetChar |
jmp DisplayChar |
jmp DisplayString |
jmp DisplayNum |
jmp CalcScreenLoc |
jmp ClearScreen |
jmp DisplayWord |
|
start: |
; lea MSGRAM,a1 |
262,9 → 338,35
; jsr DisplayString |
|
ColdStart: |
icache_on ; turn on the ICache |
icache_off ; turn on the ICache |
dcache_off ; turn on the DCache |
|
; Make sure semaphores are available by closing the gates. |
; We don't know what power up state is. |
|
cmgi #KEYBDGATE |
cmgi #VIDEOGATE |
|
; Initialize the context startup address table with NULL |
|
xor r1,r1,r1 |
sw r1,ctx0start |
sw r1,ctx1start |
sw r1,ctx2start |
sw r1,ctx3start |
sw r1,ctx4start |
sw r1,ctx5start |
sw r1,ctx6start |
sw r1,ctx7start |
sw r1,ctx8start |
sw r1,ctx9start |
sw r1,ctx10start |
sw r1,ctx11start |
sw r1,ctx12start |
sw r1,ctx13start |
sw r1,ctx14start |
sw r1,ctx15start |
|
; Initialize the context schedule with all contexts treated equally |
; There are only 16 contexts, but 256 schedule slots. Each context is |
; given 16 slots distributed evenly throughout the execution pattern |
284,88 → 386,72
; We cannot use a loop for this. Fortunately there's only 16 contexts. |
; |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP0 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP1 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP2 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP3 |
iepp |
nop |
nop |
|
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP4 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP5 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP6 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP7 |
iepp |
nop |
nop |
|
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP8 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP9 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP10 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP11 |
iepp |
nop |
nop |
|
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP12 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP13 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP14 |
iepp |
nop |
nop |
lea r25,ctxstart |
mtspr IPC,r25 |
lea r30,STACKTOP15 |
iepp |
nop |
nop |
|
; Ensure that context zero is the active context |
; |
373,8 → 459,6
mfspr r1,AXC |
beq r1,r0,ctxstart2 |
iepp |
nop |
nop |
bra ctxstart3 |
ctxstart2: |
sb r1,AXCstart ; save off the startup context which should be context zero |
400,10 → 484,18
sw r1,[r3] |
addui r3,r3,#8 |
loop r2,csj5 |
lea r1,VideoSC ; Video BIOS vector |
sw r1,0xCD0 |
lea r1,SCCARDSC ; SD Card BIOS vector |
sw r1,0xCE8 |
lea r1,RTCSC ; Real time clock vector |
sw r1,0xD00 |
lea r1,KeybdSC ; keyboard BIOS vector |
sw r1,0xD08 |
lea r1,irqrout |
sw r1,0xE08 ; set IRQ vector |
lea r1,ui_irout |
sw r1,0xF78 ; set unimplemented instruction vector |
lea r1,dberr_rout |
sw r1,0xFE0 ; set Bus error vector |
lea r1,iberr_rout |
410,7 → 502,9
sw r1,0xFE8 ; set Bus error vector |
lea r1,nmirout |
sw r1,0xFF0 ; set NMI vector |
|
|
; set system interrupt hook vectors |
|
lea r1,KeybdIRQ |
sw r1,keybdIRQvec |
lea r1,Pulse100 |
423,7 → 517,16
;------------------------------- |
; Initialize I/O devices |
;------------------------------- |
inbu r1,CONFIGREC |
bfext r1,r1,#4,#4 |
beq r1,r0,skip5 |
call tmp_init |
skip5: |
inbu r1,CONFIGREC |
bfext r1,r1,#5,#5 |
beq r1,r0,skip4 |
call SerialInit |
skip4: |
call KeybdInit |
call PICInit |
call SetupRasterIRQ |
431,6 → 534,7
; call HelloWorld |
setlo r3,#0xCE ; blue on blue |
sc r3,ScreenColor |
sc r3,CharColor |
lc r3,0x1414 |
setlo r3,#32 |
sc r3,0x1416 ; we do a store, then a load through the dcache |
440,32 → 544,117
dcokay: |
sc r0,NextToRunTCB |
sc r0,RunningTCB |
lw r1,#2 ; get rid of startup keyboard glitchs by trying to get a character |
syscall #417 |
lw r1,#2 ; get rid of startup keyboard glitchs by trying to get a character |
syscall #417 |
|
; wait for screen to be available |
call ClearScreen |
call ClearBmpScreen |
|
; Test whether or not the sprite controller is present. Skip |
; Initialization if it isn't. |
|
inb r1,CONFIGREC |
bfext r1,r1,#0,#0 |
beq r1,r0,skip1 |
call RandomizeSprram |
sc r0,CursorRow |
sc r0,CursorCol |
setlo r1,#1 |
skip1: |
|
sb r0,CursorRow |
sb r0,CursorCol |
lw r1,#1 |
sb r1,CursorFlash |
lea r1,MSGSTART |
call DisplayStringCRLF |
jmp Monitor |
|
; Test whether or not sound generator is present |
; skip initialization and beep if not present |
|
inb r1,CONFIGREC |
bfext r1,r1,#2,#2 |
beq r1,r0,skip2 |
call SetupAC97 ; and Beep |
setlo r3,#4 |
outb r3,LED |
lw r1,#4 |
outb r1,LED |
call Beep |
skip2: |
|
lea r1,context1disp ; start a display |
sw r1,ctx1start |
|
; Startup Ethernet access ? |
; |
inb r1,CONFIGREC |
bfext r1,r1,#1,#1 |
beq r1,r0,skip3 |
lea r1,eth_main |
sw r1,ctx2start |
skip3: |
|
lea r1,RandomLines |
sw r1,ctx3start |
call spi_init |
bne r1,r0,skip_spi_read |
call spi_read_boot |
call loadBootFile |
skip_spi_read: |
jmp Monitor |
|
j4: |
jmp Monitor |
bra j4 |
|
; for now hang the contexts |
; The contexts wait for a context startup address to be placed in the |
; startup table. Once an address is in the table, a call to the context |
; code will be made. The default is a NULL pointer, which |
; causes the context to loop around back to here while waiting for a |
; code to run. |
; |
ctxstart1: |
lea r1,ctx0start ; r1 = context start table base |
mfspr r2,AXC ; r2 = index into start table |
lw r1,[r1+r2*8] ; r1 = context start address |
beq r1,r0,ctx12 |
jal lr,[r1] ; perform a call to the context code |
|
; We might as well move to the next context, since there's nothing |
; to do. This can be accomplished by tirggering a IRQ interrupt. |
; We can't just increment the excution pattern pointer, because that |
; would only switch the register set and not the program counter. |
; An interrupt saves the program counter, and restores it from the |
; IPC context register. |
; |
ctx12: |
sei ; causes a priv violation. don't allow interrupts during syscall |
nop ; wait for sei to take effect |
nop |
nop |
syscall #EX_IRQ |
bra ctxstart1 |
|
; call ramtest |
|
context1disp: |
|
; once we've started, clear the start vector so that the context |
; isn't continuously restarted. |
; |
sw r0,ctx1start |
lea r3,TEXTSCR |
lw r1,#'V' |
lw r2,#330 |
lw r4,#47 |
call AsciiToScreen |
ctx11: |
inch r1,[r3+r2] |
addui r1,r1,#1 |
outc r1,[r3+r2] |
addui r2,r2,#168 |
loop r4,ctx11 |
bra context1disp |
|
;----------------------------------------- |
; Hello World! |
;----------------------------------------- |
498,10 → 687,11
|
;---------------------------------------------------------- |
; Initialize programmable interrupt controller (PIC) |
; 0 = nmi |
; 0 = nmi (parity error) |
; 1 = keyboard reset |
; 2 = 1000Hz pulse (context switcher) |
; 3 = 100Hz pulse (cursor flash) |
; 4 = ethmac |
; 8 = uart |
; 13 = raster interrupt |
; 15 = keyboard char |
510,7 → 700,7
lea r1,PICret |
sw r1,TickIRQAddr |
; enable: raster irq, |
setlo r1,#0xA00F ; enable nmi,kbd_rst,and kbd_irq |
setlo r1,#0x800F ; enable nmi,kbd_rst,and kbd_irq |
; A10F enable serial IRQ |
outc r1,PIC_IE |
PICret: |
793,39 → 983,272
bra sirq1 |
|
;============================================================================== |
; Video BIOS |
; Video interrupt #410 |
; |
; Function in R1 |
; 0x02 = Set Cursor Position r2 = row, r3 = col |
; 0x03 = Get Cursor position returns r1 = row, r2 = col |
; 0x06 = Scroll screen up |
; 0x09 = Display character+attribute, r2=char, r3=attrib, r4=#times |
; 0x0A = Display character, r2 = char, r3 = # times |
; 0x0C = Display Pixel r2 = x, r3 = y, r4 = color |
; 0x0D = Get pixel r2 = x, r3 = y |
; 0x14 = Display String r2 = pointer to string |
; 0x15 = Display number r2 = number, r3 = # digits |
; 0x16 = Display String + CRLF r2 = pointer to string |
; 0x17 = Display Word r2 as hex = word |
; 0x18 = Display Half word as hex r2 = half word |
; 0x19 = Display Charr char in hex r2 = char |
; 0x1A = Display Byte in hex r2 = byte |
;============================================================================== |
; |
VideoSC: |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
sw sp,sp_saves[r26] ; save sp in save area |
shlui r26,r26,#8 ; 2k for stack |
mov sp,r26 |
addui sp,sp,#0x100008000 ; base stacks address |
subui sp,sp,#8 |
sw lr,[sp] |
Video1: |
omgi lr,#VIDEOGATE |
bne lr,r0,Video1 |
beqi r1,#0x02,Video_x02 |
beqi r1,#0x03,Video_x03 |
beqi r1,#0x06,Video_x06 |
beqi r1,#0x09,Video_x09 |
beqi r1,#0x0A,Video_x0A |
beqi r1,#0x0C,Video_x0C |
beqi r1,#0x0C,Video_x0D |
beqi r1,#0x14,Video_x14 |
beqi r1,#0x15,Video_x15 |
beqi r1,#0x16,Video_x16 |
beqi r1,#0x17,Video_x17 |
beqi r1,#0x1A,Video_x1A |
bra VideoRet |
|
Video_x02: |
sb r2,CursorRow |
sb r3,CursorCol |
call CalcScreenLoc |
bra VideoRet |
|
Video_x03: |
lbu r1,CursorRow |
lbu r2,CursorCol |
bra VideoRet |
|
Video_x06: |
call ScrollUp |
bra VideoRet |
|
Video_x09: |
sc r3,CharColor |
mov r1,r2 |
Video_x09a: |
call DisplayChar |
loop r4,Video_x09a |
bra VideoRet |
|
Video_x0A: |
mov r1,r2 |
Video_x0Aa: |
call DisplayChar |
loop r3,Video_x0Aa |
bra VideoRet |
|
Video_x0C: |
sh r2,GACCEL+8 ; x0 |
sh r3,GACCEL+12 ; y0 |
sh r4,GACCEL+0 ; color |
lw r1,#1 |
sh r1,GACCEL+60 ; DRAW PIXEL command |
bra VideoRet |
|
Video_x0D: |
sh r2,GACCEL+8 ; x0 |
sh r3,GACCEL+12 ; y0 |
lw r1,#8 |
sh r1,GACCEL+60 ; GET PIXEL command |
nop ; let command start |
nop |
nop |
vxd1: |
lhu r1,GACCEL+56 ; wait for state = IDLE |
bne r1,r0,vxd1 |
lhu r1,GACCEL+52 |
bra VideoRet |
|
Video_x14: |
mov r1,r2 |
call DisplayString |
bra VideoRet |
|
Video_x15: |
mov r1,r2 |
mov r2,r3 |
call DisplayNum |
bra VideoRet |
|
Video_x16: |
mov r1,r2 |
call DisplayStringCRLF |
bra VideoRet |
|
Video_x17: |
mov r1,r2 |
call DisplayWord |
bra VideoRet |
|
Video_x1A: |
mov r1,r2 |
call DisplayByte |
bra VideoRet |
|
VideoRet: |
cmgi #VIDEOGATE |
lw lr,[sp] |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
lw sp,sp_saves[r26] ; get back the stack |
eret |
|
;============================================================================== |
; BIOS interrupt #413 |
; 0x00 initialize |
; 0x01 read sector r2 = sector #, r3 = pointer to buffer |
; 0x02 write sector |
;============================================================================== |
; |
SDCARDSC: |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
sw sp,sp_saves[r26] ; save sp in save area |
shlui r26,r26,#8 ; 2k for stack |
mov sp,r26 |
addui sp,sp,#0x100008000 ; base stacks address |
subui sp,sp,#8 |
sw lr,[sp] |
SDC_1: |
omgi lr,#CARDGATE |
bne lr,r0,SDC_1 |
beqi r1,#0,SDC_x00 |
beqi r1,#1,SDC_x01 |
beqi r1,#2,SDC_x02 |
bra SDCRet |
SDC_x00: |
call spi_init |
bra SDCRet |
SDC_x01: |
mov r1,r2 |
mov r2,r3 |
call spi_read_sector |
bra SDCRet |
SDC_x02: |
SDCRet: |
cmgi #CARDGATE |
lw lr,[sp] |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
lw sp,sp_saves[r26] ; get back the stack |
eret |
|
;============================================================================== |
; Real time clock BIOS |
; BIOS interrupt #416 |
; |
; Function |
; 0x00 = get system tick |
; 0x01 = get date/time |
; 0x02 = set date/time |
;============================================================================== |
; |
RTCSC: |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
sw sp,sp_saves[r26] ; save sp in save area |
shlui r26,r26,#8 ; 2k for stack |
mov sp,r26 |
addui sp,sp,#0x100008000 ; base stacks address |
subui sp,sp,#8 |
sw lr,[sp] |
; |
beqi r1,#0x00,RTC_x00 |
beqi r1,#0x01,RTC_x01 |
RTC_x00: |
mfspr r1,TICK |
bra RTCRet |
RTC_x01: |
outw r0,DATETIME+24 ; trigger a snapshot |
nop |
inw r1,DATETIME ; get the snapshotted date and time |
bra RTCRet |
RTCRet: |
lw lr,[sp] |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
lw sp,sp_saves[r26] ; get back the stack |
eret |
|
;============================================================================== |
; Keyboard BIOS |
; BIOS interrupt #417 |
; |
; Function in R1 |
; 0 = initialize keyboard |
; 1 = set keyboard echo |
; 2 = get keyboard character |
; 3 = check for key available |
; 0x00 = initialize keyboard |
; 0x01 = set keyboard echo |
; 0x02 = get keyboard character from buffer |
; 0x03 = check for key available in buffer |
; 0x04 = check for key directly at keyboard port |
; 0x05 = get keyboard character directly from keyboard port (blocks) |
;============================================================================== |
; |
KeybdSC: |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
sw sp,sp_saves[r26] ; save sp in save area |
shlui r26,r26,#8 ; 2k for stack |
mov sp,r26 |
addui sp,sp,#0x100008000 ; base stacks address |
subui sp,sp,#8 |
sw lr,[sp] |
bnei r1,#0,kbdsc1 |
kbdsc5: |
omgi lr,#KEYBDGATE |
bne lr,r0,kbdsc5 |
beqi r1,#0,kbd_x00 |
beqi r1,#1,kbd_x01 |
beqi r1,#2,kbd_x02 |
beqi r1,#3,kbd_x03 |
beqi r1,#4,kbd_x04 |
beqi r1,#5,kbd_x05 |
bra kbdscRet |
kbd_x00: |
call KeybdInit |
bra kbdscRet |
kbdsc1: |
bnei r1,#1,kbdsc2 |
kbd_x01: |
mov r1,r2 |
call SetKeyboardEcho |
bra kbdscRet |
kbdsc2: |
bnei r1,#2,kbdsc3 |
kbd_x02: |
call KeybdGetChar |
bra kbdscRet |
kbdsc3: |
bnei r1,#3,kbdsc4 |
kbd_x03: |
call KeybdCheckForKey |
bra kbdscRet |
kbdsc4: |
kbd_x04: |
call KeybdCheckForKeyDirect |
bra kbdscRet |
kbd_x05: |
call KeybdGetCharDirect |
bra kbdscRet |
kbdscRet: |
cmgi #KEYBDGATE |
lw lr,[sp] |
addui sp,sp,#8 |
mfspr r26,AXC ; get context |
shlui r26,r26,#3 ; *8 |
lw sp,sp_saves[r26] ; get back the stack |
eret |
|
;------------------------------------------------------------------------------ |
950,6 → 1373,69
|
;============================================================================== |
;============================================================================== |
tmp_init: |
; wait for the rst1626 to go low |
lw r2,#10000000 ; retry for up to several seconds |
tmp_init4: |
beq r2,r0,tmp_init5 |
subui r2,r2,#1 |
inch r1,TMP+2 ; read the status reg |
blt r1,r0,tmp_init4 |
tmp_init5: |
|
lw r1,#0x51 ; Start temperature conversion |
outc r1,TMP |
|
; wait a bit for the trigger to take effect |
lw r1,#2500 |
tmp_init1: |
loop r1,tmp_init1 |
|
; wait for the rst1626 to go low |
lw r2,#10000000 ; retry for up to several seconds |
tmp_init2: |
beq r2,r0,tmp_init3 |
subui r2,r2,#1 |
inch r1,TMP+2 ; read the status reg |
blt r1,r0,tmp_init2 |
tmp_init3: |
ret |
|
tmp_read: |
subui sp,sp,#24 |
sw lr,[sp] |
sw r1,8[sp] |
sw r2,16[sp] |
|
lw r1,#25000000 ; wait about 1 second or so |
tmp_read1: |
loop r1,tmp_read1 |
lw r1,#0xAC ; issue read temperature conversion |
outc r1,TMP |
|
; wait a bit for the trigger to take effect |
lw r1,#2500 |
tmp_read3: |
loop r1,tmp_read3 |
|
; wait for the rst1626 to go low |
lw r2,#10000000 |
tmp_read2: |
inch r1,TMP+2 ; read the status reg |
beq r2,r0,tmp_read4 |
subui r2,r2,#1 |
blt r1,r0,tmp_read2 |
tmp_read4: |
inch r1,TMP+2 ; read the temperature |
lw r2,#5 ; five digits |
call DisplayNum |
lw lr,[sp] |
lw r1,8[sp] |
lw r2,16[sp] |
ret #24 |
|
;============================================================================== |
;============================================================================== |
;------------------------------------------------------------------------------ |
; 100 Hz interrupt |
; - takes care of "flashing" the cursor |
962,10 → 1448,10
inch r1,334[r2] |
addui r1,r1,#1 |
outc r1,334[r2] |
call DisplayDatetime |
; call DisplayDatetime |
call SelectNextToRunTCB |
call SwitchTask |
sb r0,0xFFFF_FFFF_FFFF_0010 ; clear interrupt |
outb r0,0xDCFFFC ; clear interrupt |
; lw r1,TickIRQAddr |
; jal r31,[r1] |
; lw r1,Milliseconds |
1186,7 → 1672,7
subu r2,r2,r1 ; one less row |
lea r3,TEXTSCR |
scrup1: |
inch r4,[r3+r1] ; indexed addressing example |
inch r4,[r3+r1*2] ; indexed addressing example |
outc r4,[r3] |
addui r3,r3,#2 |
loop r2,scrup1 |
1237,7 → 1723,7
bleui r1,#'Z',atoscr1 |
bgtui r1,#'z',atoscr1 |
bltui r1,#'a',atoscr1 |
subi r1,r1,#0x60 |
subui r1,r1,#0x60 |
atoscr1: |
ori r1,r1,#0x100 |
ret |
1261,16 → 1747,16
;------------------------------------------------------------------------------ |
; |
CalcScreenLoc: |
lc r1,CursorRow |
lbu r1,CursorRow |
andi r1,r1,#0x7f |
lea r3,TEXTREG |
inch r2,TEXT_COLS[r3] |
mulu r2,r2,r1 |
lc r1,CursorCol |
lbu r1,CursorCol |
andi r1,r1,#0x7f |
addu r2,r2,r1 |
outc r2,TEXT_CURPOS[r3] |
shli r2,r2,#1 |
shlui r2,r2,#1 |
addui r1,r2,#TEXTSCR ; r1 = screen location |
ret |
|
1286,19 → 1772,21
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
sc r0,CursorCol ; just set cursor column to zero on a CR |
sb r0,CursorCol ; just set cursor column to zero on a CR |
bra dcx7 |
dccr: |
; beqi r1,#CTRLK,dccr1 |
bnei r1,#0x91,dcx6 ; cursor right ? |
dccr1: |
subui sp,sp,#32 |
sw r1,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
lc r2,CursorCol |
lbu r2,CursorCol |
beqi r2,#56,dcx7 |
addui r2,r2,#1 |
sc r2,CursorCol |
sb r2,CursorCol |
dcx7: |
call CalcScreenLoc |
lw lr,24[sp] |
1307,40 → 1795,46
lw r1,[sp] |
ret #32 |
dcx6: |
; beqi r1,#CTRLI,dccu1 |
bnei r1,#0x90,dcx8 ; cursor up ? |
dccu1: |
subui sp,sp,#32 |
sw r1,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
lc r2,CursorRow |
lbu r2,CursorRow |
beqi r2,#0,dcx7 |
subui r2,r2,#1 |
sc r2,CursorRow |
sb r2,CursorRow |
bra dcx7 |
dcx8: |
; beqi r1,#CTRLJ,dccl1 |
bnei r1,#0x93,dcx9 ; cursor left ? |
dccl1: |
subui sp,sp,#32 |
sw r1,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
lc r2,CursorCol |
lbu r2,CursorCol |
beqi r2,#0,dcx7 |
subui r2,r2,#1 |
sc r2,CursorCol |
sb r2,CursorCol |
bra dcx7 |
dcx9: |
; beqi r1,#CTRLM,dccd1 |
bnei r1,#0x92,dcx10 ; cursor down ? |
dccd1: |
subui sp,sp,#32 |
sw r1,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
lc r2,CursorRow |
lbu r2,CursorRow |
beqi r2,#30,dcx7 |
addui r2,r2,#1 |
sc r2,CursorRow |
sb r2,CursorRow |
bra dcx7 |
dcx10: |
bnei r1,#0x94,dcx11 ; cursor home ? |
1349,12 → 1843,12
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
lc r2,CursorCol |
lbu r2,CursorCol |
beq r2,r0,dcx12 |
sc r0,CursorCol |
sb r0,CursorCol |
bra dcx7 |
dcx12: |
sc r0,CursorRow |
sb r0,CursorRow |
bra dcx7 |
dcx11: |
subui sp,sp,#48 |
1366,18 → 1860,18
sw lr,40[sp] |
bnei r1,#0x99,dcx13 ; delete ? |
call CalcScreenLoc |
or r3,r0,r1 ; r3 = screen location |
lc r1,CursorCol ; r1 = cursor column |
mov r3,r1 ; r3 = screen location |
lbu r1,CursorCol ; r1 = cursor column |
bra dcx5 |
dcx13: |
bnei r1,#CTRLH,dcx3 ; backspace ? |
lc r2,CursorCol |
lbu r2,CursorCol |
beq r2,r0,dcx4 |
subui r2,r2,#1 |
sc r2,CursorCol |
sb r2,CursorCol |
call CalcScreenLoc ; a0 = screen location |
or r3,r0,r1 ; r3 = screen location |
lc r1,CursorCol |
mov r3,r1 ; r3 = screen location |
lbu r1,CursorCol |
dcx5: |
inch r2,2[r3] |
outc r2,[r3] |
1392,12 → 1886,14
bra dcx4 |
dcx3: |
beqi r1,#'\n',dclf ; linefeed ? |
or r4,r0,r1 ; save r1 in r4 |
mov r4,r1 ; save r1 in r4 |
call CalcScreenLoc ; r1 = screen location |
or r3,r0,r1 ; r3 = screen location |
or r1,r0,r4 ; restore r1 |
mov r3,r1 ; r3 = screen location |
mov r1,r4 ; restore r1 |
call AsciiToScreen ; convert ascii char to screen char |
outc r1,[r3] |
lc r1,CharColor |
outc r1,0x10000[r3] |
call IncCursorPos |
bra dcx4 |
dclf: |
1422,12 → 1918,12
sw r2,8[sp] |
sw r3,16[sp] |
sw lr,24[sp] |
lc r1,CursorCol |
lbu r1,CursorCol |
addui r1,r1,#1 |
sc r1,CursorCol |
sb r1,CursorCol |
inch r2,TEXTREG+TEXT_COLS |
bleu r1,r2,icc1 |
sc r0,CursorCol ; column = 0 |
sb r0,CursorCol ; column = 0 |
bra icr1 |
IncCursorRow: |
subui sp,sp,#32 |
1436,13 → 1932,13
sw r3,16[sp] |
sw lr,24[sp] |
icr1: |
lc r1,CursorRow |
lbu r1,CursorRow |
addui r1,r1,#1 |
sc r1,CursorRow |
sb r1,CursorRow |
inch r2,TEXTREG+TEXT_ROWS |
bleu r1,r2,icc1 |
subui r2,r2,#1 ; backup the cursor row, we are scrolling up |
sc r2,CursorRow |
sb r2,CursorRow |
call ScrollUp |
icc1: |
call CalcScreenLoc |
1457,7 → 1953,7
;------------------------------------------------------------------------------ |
; |
DisplayString: |
subi sp,sp,#24 |
subui sp,sp,#24 |
sw r1,[sp] |
sw r2,8[sp] |
sw lr,16[sp] |
1482,7 → 1978,7
addui r30,r30,#8 |
|
CRLF: |
subui r30,r30,#16 |
subui sp,sp,#16 |
sw r1,[sp] |
sw lr,8[sp] |
setlo r1,#'\r' |
1493,6 → 1989,11
lw r1,[sp] |
ret #16 |
|
; Call the Tiny BASIC routine to display a number |
; |
DisplayNum: |
jmp PRTNUM |
|
;------------------------------------------------------------------------------ |
; Display nybble in r1 |
;------------------------------------------------------------------------------ |
1528,6 → 2029,38
ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the char in r1 |
;------------------------------------------------------------------------------ |
; |
DisplayCharr: |
subui sp,sp,#16 |
sw r1,[sp] |
sw lr,8[sp] |
rori r1,r1,#8 |
call DisplayByte |
roli r1,r1,#8 |
call DisplayByte |
lw lr,8[sp] |
lw r1,[sp] |
ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the half-word in r1 |
;------------------------------------------------------------------------------ |
; |
DisplayHalf: |
subui sp,sp,#16 |
sw r1,[sp] |
sw lr,8[sp] |
rori r1,r1,#16 |
call DisplayCharr |
roli r1,r1,#16 |
call DisplayCharr |
lw lr,8[sp] |
lw r1,[sp] |
ret #16 |
|
;------------------------------------------------------------------------------ |
; Display the 64 bit word in r1 |
;------------------------------------------------------------------------------ |
; |
1551,7 → 2084,7
; destroys r1,r3 |
;------------------------------------------------------------------------------ |
; |
DisplayMem: |
DisplayMemB: |
subui sp,sp,#24 |
sw r1,[sp] |
sw r3,8[sp] |
1564,7 → 2097,7
dspmem1: |
setlo r1,#' ' |
call DisplayChar |
lb r1,[r2] |
lbu r1,[r2] |
call DisplayByte |
addui r2,r2,#1 |
loop r3,dspmem1 |
1574,6 → 2107,47
lw r1,[sp] |
ret #24 |
|
DisplayMemC: |
subui sp,sp,#24 |
sw r1,[sp] |
sw r3,8[sp] |
sw lr,16[sp] |
setlo r1,#':' |
call DisplayChar |
mov r1,r2 |
call DisplayWord |
setlo r3,#3 |
dspmemc1: |
setlo r1,#' ' |
call DisplayChar |
lcu r1,[r2] |
call DisplayCharr |
addui r2,r2,#2 |
loop r3,dspmemc1 |
call CRLF |
lw lr,16[sp] |
lw r3,8[sp] |
lw r1,[sp] |
ret #24 |
|
DisplayMemW: |
subui sp,sp,#24 |
sw r1,[sp] |
sw lr,16[sp] |
setlo r1,#':' |
call DisplayChar |
mov r1,r2 |
call DisplayWord |
setlo r1,#' ' |
call DisplayChar |
lw r1,[r2] |
call DisplayWord |
addui r2,r2,#8 |
call CRLF |
lw lr,16[sp] |
lw r1,[sp] |
ret #24 |
|
;------------------------------------------------------------------------------ |
; Converts binary number in r1 into BCD number in r2 and r1. |
;------------------------------------------------------------------------------ |
1589,7 → 2163,7
setlo r2,#10 |
setlo r8,#19 ; number of digits to produce - 1 |
bta1: |
mod r3,r1,r2 |
modu r3,r1,r2 |
shli r3,r3,#60 ; shift result to uppermost bits |
shli r7,r5,#60 ; copy low order nybble of r5 to r4 topmost nybble |
shrui r4,r4,#4 |
1695,7 → 2269,9
|
|
;============================================================================== |
; System Monitor Program |
;============================================================================== |
; |
Monitor: |
lea sp,STACKTOP0 ; top of stack; reset the stack pointer |
sb r0,KeybdEcho ; turn off keyboard echo |
1707,6 → 2283,8
; Get characters until a CR is keyed |
; |
Prompt3: |
; lw r1,#2 ; get keyboard character |
; syscall #417 |
call KeybdGetChar |
beqi r1,#-1,Prompt3 ; wait for a character |
beqi r1,#CR,Prompt1 |
1716,9 → 2294,9
; Process the screen line that the CR was keyed on |
; |
Prompt1: |
sc r0,CursorCol ; go back to the start of the line |
sb r0,CursorCol ; go back to the start of the line |
call CalcScreenLoc ; r1 = screen memory location |
or r3,r1,r0 |
mov r3,r1 |
inch r1,[r3] |
addui r3,r3,#2 |
call ScreenToAscii |
1732,19 → 2310,38
Prompt2: |
beqi r1,#':',Editmem ; $: - edit memory |
beqi r1,#'D',Dumpmem ; $D - dump memory |
beqi r1,#'B',CSTART ; $B - start tiny basic |
beqi r1,#'F',Fillmem ; $F - fill memory |
Prompt7: |
bnei r1,#'B',Prompt4 ; $B - start tiny basic |
jmp CSTART |
Prompt4: |
beqi r1,#'J',ExecuteCode ; $J - execute code |
beqi r1,#'L',LoadS19 ; $L - load S19 file |
beqi r1,#'?',DisplayHelp ; $? - display help |
bnei r1,#'L',Prompt9 ; $L - load S19 file |
jmp LoadSector |
Prompt9: |
bnei r1,#'?',Prompt10 ; $? - display help |
lea r1,HelpMsg |
call DisplayString |
jmp Monitor |
Prompt10: |
beqi r1,#'C',TestCLS ; $C - clear screen |
beqi r1,#'R',RandomLinesCall |
beqi r1,#'I',Invaders |
beqi r1,#'P',Piano |
bra Monitor |
bnei r1,#'R',Prompt12 |
jmp RandomLinesCall |
Prompt12: |
bnei r1,#'I',Prompt13 |
jmp Invaders |
Prompt13: |
bnei r1,#'P',Prompt14 |
jmp Piano |
Prompt14: |
bnei r1,#'T',Prompt15 |
call tmp_read |
Prompt15: |
jmp Monitor |
|
RandomLinesCall: |
call RandomLines |
bra Monitor |
jmp Monitor |
|
TestCLS: |
inch r1,[r3] |
1759,26 → 2356,22
sb r0,CursorCol |
sb r0,CursorRow |
call CalcScreenLoc |
bra Monitor |
jmp Monitor |
|
DisplayHelp: |
setlo r1,HelpMsg |
call DisplayString |
bra Monitor |
|
align 16 |
HelpMsg: |
db "? = Display help",CR,LF |
db "CLS = clear screen",CR,LF |
db ": = Edit memory bytes",CR,LF |
db "L = Load S19 file",CR,LF |
db "D = Dump memory",CR,LF |
db "D[B|C|H|W] = Dump memory",CR,LF |
db "F[B|C|H|W] = Fill memory",CR,LF |
db "B = start tiny basic",CR,LF |
db "J = Jump to code",CR,LF |
db "I = Invaders",CR,LF |
db "R = Random lines",CR,LF |
db "T = get temperature",CR,LF |
db "P = Piano",CR,LF,0 |
align 16 |
align 4 |
|
;------------------------------------------------------------------------------ |
; Ignore blanks in the input |
1813,7 → 2406,7
sb r1,[r5] |
addui r5,r5,#1 |
loop r4,edtmem1 |
bra Monitor |
jmp Monitor |
|
;------------------------------------------------------------------------------ |
; Execute code at the specified address. |
1823,27 → 2416,96
call ignBlanks |
call GetHexNumber |
jal r31,[r1] |
bra Monitor |
jmp Monitor |
|
LoadSector: |
call ignBlanks |
call GetHexNumber |
lw r2,#0x3800 |
call spi_read_sector |
jmp Monitor |
|
;------------------------------------------------------------------------------ |
; Do a memory dump of the requested location. |
;------------------------------------------------------------------------------ |
; |
DumpMem: |
inch r1,[r3] |
addui r3,r3,#2 |
call ScreenToAscii |
mov r6,r1 ; r6 = fill type character |
call ignBlanks |
call GetHexNumber |
call GetHexNumber ; get start address of dump |
mov r2,r1 |
call ignBlanks |
call GetHexNumber ; get number of bytes to dump |
shrui r1,r1,#3 ; 1/8 as many dump rows |
bnei r1,#0,Dumpmem2 |
lw r1,#1 ; dump at least one row |
Dumpmem2: |
call CRLF |
call DisplayMem |
call DisplayMem |
call DisplayMem |
call DisplayMem |
call DisplayMem |
call DisplayMem |
call DisplayMem |
call DisplayMem |
beqi r6,#'W',DumpmemW |
; beqi r6,#'H',DumpmemH |
beqi r6,#'C',DumpmemC |
DumpmemB: |
call DisplayMemB |
loop r1,DumpmemB |
jmp Monitor |
DumpmemC: |
call DisplayMemC |
loop r1,DumpmemC |
jmp Monitor |
DumpmemW: |
call DisplayMemW |
loop r1,DumpmemW |
jmp Monitor |
|
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
; call DisplayMem |
bra Monitor |
|
Fillmem: |
inch r1,[r3] |
addui r3,r3,#2 |
call ScreenToAscii |
mov r6,r1 ; r6 = fill type character |
call ignBlanks |
call GetHexNumber ; get start address of dump |
mov r2,r1 |
call ignBlanks |
call GetHexNumber ; get number of bytes to fill |
mov r5,r1 |
call ignBlanks |
call GetHexNumber ; get the fill byte |
beqi r6,#'C',FillmemC |
beqi r6,#'H',FillmemH |
beqi r6,#'W',FillmemW |
FillmemB: |
sb r1,[r2] |
addui r2,r2,#1 |
loop r5,FillmemB |
jmp Monitor |
FillmemC: |
sc r1,[r2] |
addui r2,r2,#2 |
loop r5,FillmemC |
jmp Monitor |
FillmemH: |
sh r1,[r2] |
addui r2,r2,#4 |
loop r5,FillmemH |
jmp Monitor |
FillmemW: |
sw r1,[r2] |
addui r2,r2,#8 |
loop r5,FillmemW |
jmp Monitor |
|
;------------------------------------------------------------------------------ |
; Get a hexidecimal number. Maximum of sixteen digits. |
; R3 = text pointer (updated) |
1981,7 → 2643,7
ProcessS9: |
call S19Get16BitAddress |
sw r5,S19StartAddress |
bra Monitor |
jmp Monitor |
|
S19Get16BitAddress: |
subui sp,sp,#8 |
2063,11 → 2725,13
;-------------------------------------------------------------------------- |
; Draw random lines on the bitmap screen. |
;-------------------------------------------------------------------------- |
; |
RandomLines: |
subui sp,sp,#24 |
sw r1,[sp] |
sw r3,8[sp] |
sw lr,16[sp] |
sw r0,ctx3start ; prevent restarting context over and over again |
rl5: |
gran |
mfspr r1,rand ; select a random color |
2076,33 → 2740,34
gran |
mfspr r1,rand |
lw r3,#1364 |
mod r1,r1,r3 |
modu r1,r1,r3 |
outh r1,GACCEL+8 |
rl2: ; random X1 |
gran |
mfspr r1,rand |
lw r3,#1364 |
mod r1,r1,r3 |
modu r1,r1,r3 |
outh r1,GACCEL+16 |
rl3: ; random Y0 |
gran |
mfspr r1,rand |
lw r3,#768 |
mod r1,r1,r3 |
modu r1,r1,r3 |
outh r1,GACCEL+12 |
rl4: ; random Y1 |
gran |
mfspr r1,rand |
lw r3,#768 |
mod r1,r1,r3 |
modu r1,r1,r3 |
outh r1,GACCEL+20 |
setlo r1,#2 ; draw line command |
outh r1,GACCEL+60 |
rl8: |
call KeybdGetChar |
beqi r1,#CTRLC,rl7 |
beqi r1,#'r',rl5 |
bra rl8 |
; call KeybdGetChar |
; beqi r1,#CTRLC,rl7 |
inch r1,GACCEL+56 ; ensure controller is in IDLE state |
bne r1,r0,rl8 |
bra rl5 |
rl7: |
lw lr,16[sp] |
lw r3,8[sp] |
2138,9 → 2803,9
sac971: ; wait for status to register 0xF (all ready) |
call KeybdGetChar ; see if we needed to CTRL-C |
beqi r1,#CTRLC,sac973 |
outc r1,AC97+0x68 ; wait for dirty bit to clear |
inch r1,AC97+0x68 ; wait for dirty bit to clear |
bne r1,r0,sac971 |
outc r1,AC97+0x26 ; check status at reg h26, wait for |
inch r1,AC97+0x26 ; check status at reg h26, wait for |
andi r1,r1,#0x0F ; analogue to be ready |
bnei r1,#0x0F,sac974 |
sac973: |
2153,7 → 2818,7
sac972: |
call KeybdGetChar |
beqi r1,#CTRLC,sac975 |
outc r1,AC97+0x68 ; wait for dirty bits to clear |
inch r1,AC97+0x68 ; wait for dirty bits to clear |
bne r1,r0,sac972 ; wait a while for the settings to take effect |
sac975: |
lw lr,8[sp] |
2184,7 → 2849,7
outc r1,PSGADSR0 |
ori r1,r0,#0x1104 ; gate, output enable, triangle waveform |
outc r1,PSGCTRL0 |
ori r1,r0,#25000000 ; delay about 1s |
ori r1,r0,#2500000 ; delay about 1s |
beep1: |
loop r1,beep1 |
setlo r1,#13 |
2191,7 → 2856,7
outb r1,LED |
ori r1,r0,#0x0104 ; gate off, output enable, triangle waveform |
outc r1,PSGCTRL0 |
ori r1,r0,#25000000 ; delay about 1s |
ori r1,r0,#2500000 ; delay about 1s |
beep2: |
loop r1,beep2 |
setlo r1,#16 |
2328,30 → 2993,37
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
DisplayDatetime: |
subui sp,sp,#32 |
subui sp,sp,#48 |
sw r1,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
sw r4,24[sp] |
sw r5,32[sp] |
sw lr,24[sp] |
call CursorOff |
lc r2,CursorRow |
lc r3,CursorCol |
outw r0,DATETIME+24 ; trigger a snapshot |
lw r1,#46 ; move cursor down to last display line |
sc r1,CursorRow |
lw r1,#64 |
sc r1,CursorCol |
inw r1,DATETIME ; get the snapshotted date and time |
lw r1,#3 ; get cursor position |
syscall #410 |
mov r4,r1 ; r4 = row |
mov r5,r2 ; r5 = col |
lw r1,#2 ; set cursor position |
lw r2,#46 ; move cursor down to last display line |
lw r3,#64 |
syscall #410 |
lw r1,#1 ; get the snapshotted date and time |
syscall #416 |
call DisplayWord ; display on screen |
sc r2,CursorRow ; restore cursor position |
sc r3,CursorCol |
call CalcScreenLoc |
lw r1,#2 ; restore cursor position |
mov r2,r4 ; r2 = row |
mov r3,r5 ; r3 = col |
syscall #410 |
call CursorOn |
lw lr,24[sp] |
lw r3,16[sp] |
lw r2,8[sp] |
lw r1,[sp] |
ret #32 |
lw r4,24[sp] |
lw r5,32[sp] |
ret #48 |
|
;============================================================================== |
;============================================================================== |
2537,6 → 3209,740
|
;============================================================================== |
;============================================================================== |
; |
; Initialize the SD card |
; Returns |
; r = 0 if successful, 1 otherwise |
; |
spi_init: |
subui sp,sp,#24 |
sw lr,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
lea r3,SPIMASTER |
lw r1,#SPI_INIT_SD |
outb r1,SPI_TRANS_TYPE_REG[r3] |
lw r1,#SPI_TRANS_START |
outb r1,SPI_TRANS_CTRL_REG[r3] |
nop |
spi_init1: |
inb r1,SPI_TRANS_STATUS_REG[r3] |
mov r2,r1 ; note: some time needs to be wasted |
mov r1,r2 ; between status reads. |
beqi r1,#SPI_TRANS_BUSY,spi_init1 |
inb r1,SPI_TRANS_ERROR_REG[r3] |
bfext r1,r1,#1,#0 |
bne r1,#SPI_INIT_NO_ERROR,spi_error |
lea r1,spi_init_ok_msg |
call DisplayString |
xor r1,r1,r1 |
bra spi_init_exit |
spi_error: |
call DisplayByte |
lea r1,spi_init_error_msg |
call DisplayString |
lw r1,#1 |
spi_init_exit: |
lw lr,[sp] |
lw r2,8[sp] |
lw r3,16[sp] |
ret #24 |
|
|
; SPI read sector |
; |
; r1= sector number to read |
; r2= address to place read data |
; Returns: |
; r1 = 0 if successful |
; |
spi_read_sector: |
subui sp,sp,#40 |
sw lr,[sp] |
sw r5,8[sp] |
sw r2,16[sp] |
sw r3,24[sp] |
sw r4,32[sp] |
lea r3,SPIMASTER |
|
; spi master wants a byte address, so we multiply the sector number |
; by 512. |
shlui r1,r1,#9 |
outb r1,SPI_SD_ADDR_7_0_REG[r3] |
shrui r1,r1,#8 |
outb r1,SPI_SD_ADDR_15_8_REG[r3] |
shrui r1,r1,#8 |
outb r1,SPI_SD_ADDR_23_16_REG[r3] |
shrui r1,r1,#8 |
outb r1,SPI_SD_ADDR_31_24_REG[r3] |
|
; Force the reciever fifo to be empty, in case a prior error leaves it |
; in an unknown state. |
lw r1,#1 |
outb r1,SPI_RX_FIFO_CTRL_REG[r3] |
|
lw r1,#RW_READ_SD_BLOCK |
outb r1,SPI_TRANS_TYPE_REG[r3] |
lw r1,#SPI_TRANS_START |
outb r1,SPI_TRANS_CTRL_REG[r3] |
nop |
spi_read_sect1: |
inb r1,SPI_TRANS_STATUS_REG[r3] |
mov r4,r1 ; just a delay between consecutive status reg reads |
mov r1,r4 |
beqi r1,#SPI_TRANS_BUSY,spi_read_sect1 |
inb r1,SPI_TRANS_ERROR_REG[r3] |
bfext r1,r1,#3,#2 |
bnei r1,#SPI_READ_NO_ERROR,spi_read_error |
lw r4,#512 ; read 512 bytes from fifo |
spi_read_sect2: |
inb r1,SPI_RX_FIFO_DATA_REG[r3] |
sb r1,[r2] |
addui r2,r2,#1 |
loop r4,spi_read_sect2 |
xor r1,r1,r1 |
bra spi_read_ret |
spi_read_error: |
call DisplayByte |
lea r1,spi_read_error_msg |
call DisplayString |
lw r1,#1 |
spi_read_ret: |
lw lr,[sp] |
lw r5,8[sp] |
lw r2,16[sp] |
lw r3,24[sp] |
lw r4,32[sp] |
ret #40 |
|
; Read the boot sector from the disk. |
; Must find it first by looking for the signature bytes 'EB' and '55AA'. |
; |
spi_read_boot: |
subui sp,sp,#32 |
sw lr,[sp] |
sw r2,8[sp] |
sw r3,16[sp] |
sw r5,24[sp] |
sw r0,startSector ; default starting sector |
lw r3,#500 ;1934720 ; number of sectors to read (up to 1GB) |
lw r5,#0 ; r5 = starting address |
spi_read_boot1: |
mov r1,r5 ; r1 = sector number |
lw r2,#8 ; eight digits |
sb r0,CursorCol |
call DisplayNum ; Display the sector number being checked |
mov r1,r5 ; r1 = sector number |
lw r2,#0x100800000 ; r2 = target address |
call spi_read_sector |
|
; The following displays the contents of the sector |
; lw r1,#0x10 |
; lw r2,#0x3800 |
;spi_read_boot5: |
; call DisplayMemB |
; loop r1,spi_read_boot5 |
|
addui r5,r5,#1 ; move to next sector |
lbu r1,0x100800000 |
cmpui r2,r1,#0xEB |
beq r2,r0,spi_read_boot2 |
spi_read_boot3: |
loop r3,spi_read_boot1 |
lw r1,#1 ; r1 = 1 for error |
bra spi_read_boot4 |
spi_read_boot2: |
lea r1,msgFoundEB |
call DisplayString |
lbu r1,0x1008001FE ; check for 0x55AA signature |
bnei r1,#0x55,spi_read_boot3 |
lbu r1,0x1008001FF |
bnei r1,#0xAA,spi_read_boot3 |
subui r1,r5,#1 |
sw r1,startSector |
xor r1,r1,r1 ; r1 = 0, for okay status |
spi_read_boot4: |
lw lr,[sp] |
lw r2,8[sp] |
lw r3,16[sp] |
lw r5,24[sp] |
ret #32 |
|
msgFoundEB: |
db "Found EB code.",CR,LF,0 |
.align 4 |
|
; Load the FAT tables into memory |
; |
loadFAT: |
subui sp,sp,#8 |
sw lr,[sp] |
lcu r3,0x100800016 ; sectors per FAT |
lbu r2,0x100800010 ; number of FATs |
mulu r3,r3,r2 ; offset |
lea r2,0x100800200 ; where to place FAT |
lcu r5,0x10080000E ; r5 = # reserved sectors before FAT |
lw r6,startSector |
addu r5,r5,r6 |
loadFAT1: |
mov r1,r5 ; r1 = sector # |
call spi_read_sector |
addui r5,r5,#1 |
addui r2,r2,#512 ; advance 512 bytes |
loop r3,loadFAT1 |
lw lr,[sp] |
ret #8 |
|
; Load the root directory from disk |
; r2 = where to place root directory in memory |
; |
loadRootDirectory: |
lcu r3,0x100800016 ; sectors per FAT |
lbu r4,0x100800010 ; number of FATs |
mulu r3,r3,r4 ; offset |
lcu r4,0x10080000E ; r2 = # reserved sectors before FAT |
addu r3,r3,r4 ; r3 = root directory sector number |
lw r6,startSector |
addu r5,r3,r6 ; r5 = root directory sector number |
; we have to use two byte loads here because the number is at an unaligned data address |
lbu r7,0x100800011 ; r7 <= number of root directory entries |
lbu r8,0x100800012 |
shlui r8,r8,#8 |
or r7,r7,r8 |
mov r8,r7 ; r8 = number of root directory entries |
shlui r7,r7,#5 ; r7 *=32 = size of root directory table (bytes) |
shrui r7,r7,#9 ; r7 /= 512 = number of sectors in root directory |
mov r3,r7 |
loadRootDir1: |
mov r1,r5 |
call spi_read_sector |
addui r5,r5,#1 |
addui r2,r2,#512 |
loop r3,loadRootDir1 |
|
loadBootFile: |
; For now we cheat and just go directly to sector 512. |
bra loadBootFileTmp |
|
lcu r3,0x100800016 ; sectors per FAT |
lbu r2,0x100800010 ; number of FATs |
mulu r3,r3,r2 ; offset |
lcu r2,0x10080000E ; r2 = # reserved sectors before FAT |
addu r3,r3,r2 ; r3 = root directory sector number |
; we have to use two byte loads here because the number is at an unaligned data address |
lbu r7,0x100800011 ; r7 <= number of root directory entries |
lbu r8,0x100800012 |
shlui r8,r8,#8 |
or r7,r7,r8 |
mov r8,r7 ; r8 = number of root directory entries |
shlui r7,r7,#5 ; r7 *=32 = size of root directory table (bytes) |
shrui r7,r7,#9 ; r7 /= 512 = number of sectors in root directory |
|
; now we need to fetch the sectors of the root directory and put them somewhere in |
; memory |
; |
loadBootFile4: |
lw r1,[r3] ; get filename |
cmpui r1,r1,#0x454C4946544F4F42 ; "BOOTFILE" |
beq r1,r0,loadBootFile5 |
loadBootFile3: |
addui r3,r3,#32 ; move to next directory entry |
loop r7,loadBootFile4 |
; boot file not found |
|
; here we found the file in the directory |
; |
loadBootFile5: |
lcu r2,0x1a[r3] ; get starting cluster |
lcu r7,0x100800011 ; r7 = number of root directory entries |
shlui r7,r7,#5 ; r7 *=32 = size of root directory table (bytes) |
shrui r7,r7,#9 ; r7 /= 512 = number of sectors in root directory |
|
loadBootFileTmp: |
; We load the number of sectors per cluster, then load a single cluster of the file. |
; This is 16kib |
lbu r3,0x10080000D ; sectors per cluster |
lea r2,0x100800200 ; where to place FAT in memory |
lw r5,startSector ; r5=start sector of disk |
addui r5,r5,#512 ; r5= sector 512 |
loadBootFile1: |
mov r1,r5 ; r1=sector to read |
call spi_read_sector |
addui r5,r5,#1 ; r5 = next sector |
addui r2,r2,#512 |
loop r3,loadBootFile1 |
lhu r1,0x100800200 ; make sure it's bootable |
bnei r1,#0x544F4F42,loadBootFile2 |
lw r1,#0x16 |
lea r1,msgJumpingToBoot |
call DisplayString |
lw r1,#0x100800204 |
jal lr,[r1] |
jmp Monitor |
loadBootFile2: |
lea r1,msgNotBootable |
call DisplayString |
jmp Monitor |
|
msgJumpingToBoot: |
db "Jumping to boot",0 |
msgNotBootable: |
db "SD card not bootable.",0 |
spi_init_ok_msg: |
db "SD card initialized okay.",0 |
spi_init_error_msg: |
db ": error occurred initializing the SD card.",0 |
spi_boot_error_msg: |
db "SD card boot error",0 |
spi_read_error_msg: |
db "SD card read error",0 |
|
.align 4 |
|
;============================================================================== |
; Ethernet |
;============================================================================== |
my_MAC1 EQU 0x00 |
my_MAC2 EQU 0xFF |
my_MAC3 EQU 0xEE |
my_MAC4 EQU 0xF0 |
my_MAC5 EQU 0xDA |
my_MAC6 EQU 0x42 |
|
.bss |
eth_unique_id dw 0 |
|
.code |
|
; Initialize the ethmac controller. |
; Supply a MAC address, set MD clock |
; |
eth_init: |
lea r3,ETHMAC |
lw r1,#0x64 ; 100 |
sh r1,MIIMODER[r3] |
lw r1,#7 ; PHY address |
sh r1,MIIADDRESS[r3] |
lw r1,#0xEEF0DA42 |
sh r1,0x40[r3] ; MAC0 |
lw r1,#0x00FF |
sh r1,0x44[r3] ; MAC1 |
ret |
|
; Request a packet and display on screen |
; r1 = address where to put packet |
; |
eth_request_packet: |
subui sp,sp,#24 |
sw r3,[sp] |
sw r2,8[sp] |
sw r4,16[sp] |
lea r3,ETHMAC |
lw r2,#4 ; clear rx interrupt |
sh r2,4[r3] |
sh r1,0x604[r3] ; storage address |
lw r2,#0xe000 ; enable interrupt |
sh r2,0x600[r3] |
eth1: |
nop |
inh r2,4[r3] |
bfext r2,r2,#2,#2 ; get bit #2 |
beq r2,r0,eth1 |
inh r2,0x600[r3] ; get from descriptor |
shrui r2,r2,#16 |
lw r3,#0 |
lea r4,TEXTSCR+7560 ; second last line of screen |
eth20: |
lbu r2,[r1+r3] ; get byte |
sc r2,[r4+r3*2] ; store to screen |
addui r3,r3,#1 |
cmpui r2,r3,#83 |
bne r2,r0,eth20 |
lw r3,[sp] |
lw r2,8[sp] |
lw r4,16[sp] |
ret #24 |
|
; r1 = packet address |
; |
eth_interpret_packet: |
subui sp,sp,#16 |
sw r3,[sp] |
sw r2,8[sp] |
lbu r2,12[r1] |
lbu r3,13[r1] |
bnei r2,#8,eth2 ; 0x806 ? |
bnei r3,#6,eth2 |
lw r1,#2 ; return r1 = 2 for ARP |
eth5: |
lw r3,[sp] |
lw r2,8[sp] |
ret #16 |
eth2: |
bnei r2,#8,eth3 ; 0x800 ? |
bnei r3,#0,eth3 |
lbu r2,23[r1] |
bnei r2,#1,eth4 |
lw r1,#1 |
bra eth5 ; return 1 ICMP |
eth4: |
bnei r2,#0x11,eth6 |
lw r1,#3 ; return 3 for UDP |
bra eth5 |
eth6: |
bnei r2,#6,eth7 |
lw r1,#4 ; return 4 for TCP |
bra eth5 |
eth7: |
eth3: |
xor r1,r1,r1 ; return zero for unknown |
lw r3,[sp] |
lw r2,8[sp] |
ret #16 |
|
; r1 = address of packet to send |
; r2 = packet length |
; |
eth_send_packet: |
subui sp,sp,#16 |
sw r3,[sp] |
sw r4,8[sp] |
lea r3,ETHMAC |
; wait for tx buffer to be clear |
eth8: |
inh r4,0x400[r3] |
bfext r4,r4,#15,#15 |
beqi r4,#1,eth8 |
lw r4,#1 ; clear tx interrupt |
sh r4,4[r3] |
; set address |
sh r1,0x404[r3] |
; set the packet length field and enable interrupts |
shlui r2,r2,#16 |
ori r2,r2,#0xF000 |
sh r2,0x400[r3] |
lw r4,8[sp] |
lw r3,[sp] |
ret #16 |
|
; Only for IP type packets (not ARP) |
; r1 = rx buffer address |
; r2 = swap flag |
; Returns: |
; r1 = data start index |
; |
eth_build_packet: |
subui sp,sp,#64 |
sw r3,[sp] |
sw r4,8[sp] |
sw r5,16[sp] |
sw r6,24[sp] |
sw r7,32[sp] |
sw r8,40[sp] |
sw r9,48[sp] |
sw r10,56[sp] |
lbu r3,6[r1] |
lbu r4,7[r1] |
lbu r5,8[r1] |
lbu r6,9[r1] |
lbu r7,10[r1] |
lbu r8,11[r1] |
; write to destination header |
sb r3,[r1] |
sb r4,1[r1] |
sb r5,2[r1] |
sb r6,3[r1] |
sb r7,4[r1] |
sb r8,5[r1] |
; write to source header |
lw r3,#my_MAC1 |
sb r3,6[r1] |
lw r3,#my_MAC2 |
sb r3,7[r1] |
lw r3,#my_MAC3 |
sb r3,8[r1] |
lw r3,#my_MAC4 |
sb r3,9[r1] |
lw r3,#my_MAC5 |
sb r3,10[r1] |
lw r3,#my_MAC6 |
sb r3,11[r1] |
bnei r2,#1,eth16 // if (swap) |
lbu r3,26[r1] |
lbu r4,27[r1] |
lbu r5,28[r1] |
lbu r6,29[r1] |
; read destination |
lbu r7,30[r1] |
lbu r8,31[r1] |
lbu r9,32[r1] |
lbu r10,33[r1] |
; write to sender |
sb r7,26[r1] |
sb r8,27[r1] |
sb r9,28[r1] |
sb r10,29[r1] |
; write destination |
sb r3,30[r1] |
sb r4,31[r1] |
sb r5,32[r1] |
sb r6,33[r1] |
eth16: |
lw r3,eth_unique_id |
addui r3,r3,#1 |
sw r3,eth_unique_id |
sb r3,19[r1] |
shrui r3,r3,#8 |
sb r3,18[r1] |
lbu r3,14[r1] |
andi r3,r3,#0xF |
shlui r3,r3,#2 ; *4 |
addui r1,r3,#14 ; return datastart in r1 |
lw r3,[sp] |
lw r4,8[sp] |
lw r5,16[sp] |
lw r6,24[sp] |
lw r7,32[sp] |
lw r8,40[sp] |
lw r9,48[sp] |
lw r10,56[sp] |
ret #64 |
|
; Compute IPv4 checksum of header |
; r1 = packet address |
; r2 = data start |
; |
eth_checksum: |
subui sp,sp,#24 |
sw r3,[sp] |
sw r4,8[sp] |
sw r5,16[sp] |
; set checksum to zero |
sb r0,24[r1] |
sb r0,25[r1] |
xor r3,r3,r3 ; r3 = sum = zero |
lw r4,#14 |
eth15: |
mov r5,r2 |
subui r5,r5,#1 ; r5 = datastart - 1 |
bge r4,r5,eth14 |
lbu r5,[r1+r4] ; shi = [rx_addr+i] |
lbu r6,1[r1+r4] ; slo = [rx_addr+i+1] |
shlui r5,r5,#8 |
or r5,r5,r6 ; shilo |
addu r3,r3,r5 ; sum = sum + shilo |
addui r4,r4,#2 ; i = i + 2 |
bra eth15 |
eth14: |
mov r5,r3 ; r5 = sum |
andi r3,r3,#0xffff |
shrui r5,r5,#16 |
addu r3,r3,r5 |
com r3,r3 |
sb r3,25[r1] ; low byte |
shrui r3,r3,#8 |
sb r3,24[r1] ; high byte |
sw r3,[sp] |
sw r4,8[sp] |
sw r5,16[sp] |
ret #24 |
|
; r1 = packet address |
; returns r1 = 1 if this IP |
; |
eth_verifyIP: |
subui sp,sp,#32 |
sw r2,[sp] |
sw r3,8[sp] |
sw r4,16[sp] |
sw r5,24[sp] |
lbu r2,30[r1] |
lbu r3,31[r1] |
lbu r4,32[r1] |
lbu r5,33[r1] |
; Check for general broadcast |
bnei r2,#0xFF,eth11 |
bnei r3,#0xFF,eth11 |
bnei r4,#0xFF,eth11 |
bnei r5,#0xFF,eth11 |
eth12: |
lw r1,#1 |
eth13: |
lw r2,[sp] |
lw r3,8[sp] |
lw r4,16[sp] |
lw r5,24[sp] |
ret #32 |
eth11: |
mov r1,r2 |
shlui r1,r1,#8 |
or r1,r1,r3 |
shlui r1,r1,#8 |
or r1,r1,r4 |
shlui r1,r1,#8 |
or r1,r1,r5 |
beqi r1,#0xC0A8012A,eth12 |
xor r1,r1,r1 |
bra eth13 |
|
|
eth_main: |
call eth_init |
eth_loop: |
xor r1,r1,r1 |
lw r1,#0x1_00000000 ; memory address zero |
call eth_request_packet |
call eth_interpret_packet ; r1 = packet type |
|
bnei r1,#1,eth10 |
mov r2,r1 ; save off r1, r2 = packet type |
lw r1,#0x1_00000000 ; memory address zero |
call eth_verifyIP |
mov r3,r1 |
mov r1,r2 ; r1 = packet type again |
bnei r3,#1,eth10 |
|
lw r1,#0x1_00000000 ; memory address zero |
lw r2,#1 |
call eth_build_packet |
mov r3,r1 ; r3 = icmpstart |
lw r1,#0x1_00000000 ; memory address zero |
sb r0,[r1+r3] ; [rx_addr+icmpstart] = 0 |
lbu r2,17[r1] |
addui r2,r2,#14 ; r2 = len |
mov r6,r2 ; r6 = len |
lbu r4,2[r1+r3] ; shi |
lbu r5,3[r1+r3] ; slo |
shlui r4,r4,#8 |
or r4,r4,r5 ; sum = {shi,slo}; |
com r4,r4 ; sum = ~sum |
subui r4,r4,#0x800 ; sum = sum - 0x800 |
com r4,r4 ; sum = ~sum |
sb r4,3[r1+r3] |
shrui r4,r4,#8 |
sb r4,2[r1+r3] |
mov r2,r3 |
call eth_checksum |
lw r1,#0x1_00000000 ; memory address zero |
mov r2,r6 |
call eth_send_packet |
jmp eth_loop |
eth10: |
; r2 = rx_addr |
bnei r1,#2,eth_loop ; Do we have ARP ? |
; xor r2,r2,r2 ; memory address zero |
lw r2,#1_00000000 |
; get the opcode |
lbu r13,21[r2] |
bnei r13,#1,eth_loop ; ARP request |
; get destination IP address |
lbu r9,38[r2] |
lbu r10,39[r2] |
lbu r11,40[r2] |
lbu r12,41[r2] |
; set r15 = destination IP |
mov r15,r9 |
shlui r15,r15,#8 |
or r15,r15,r10 |
shlui r15,r15,#8 |
or r15,r15,r11 |
shlui r15,r15,#8 |
or r15,r15,r12 |
; Is it our IP ? |
bnei r15,#0xC0A8012A,eth_loop; //192.168.1.42 |
; get source IP address |
lbu r5,28[r2] |
lbu r6,29[r2] |
lbu r7,30[r2] |
lbu r8,31[r2] |
; set r14 = source IP |
mov r14,r5 |
shlui r14,r14,#8 |
or r14,r14,r6 |
shlui r14,r14,#8 |
or r14,r14,r7 |
shlui r14,r14,#8 |
or r14,r14,r8 |
; Get the source MAC address |
lbu r16,22[r2] |
lbu r17,23[r2] |
lbu r18,24[r2] |
lbu r19,25[r2] |
lbu r20,26[r2] |
lbu r21,27[r2] |
; write to destination header |
sb r16,[r2] |
sb r17,1[r2] |
sb r18,2[r2] |
sb r19,3[r2] |
sb r20,4[r2] |
sb r21,5[r2] |
; and write to ARP destination |
sb r16,32[r2] |
sb r17,33[r2] |
sb r18,34[r2] |
sb r19,35[r2] |
sb r20,36[r2] |
sb r21,37[r2] |
; write to source header |
; stbc #0x00,6[r2] |
; stbc #0xFF,7[r2] |
; stbc #0xEE,8[r2] |
; stbc #0xF0,9[r2] |
; stbc #0xDA,10[r2] |
; stbc #0x42,11[r2] |
sb r0,6[r2] |
lw r1,#0xFF |
sb r1,7[r2] |
lw r1,#0xEE |
sb r1,8[r2] |
lw r1,#0xF0 |
sb r1,9[r2] |
lw r1,#0xDA |
sb r1,10[r2] |
lw r1,#0x42 |
sb r1,11[r2] |
; write to ARP source |
; stbc #0x00,22[r2] |
; stbc #0xFF,23[r2] |
; stbc #0xEE,24[r2] |
; stbc #0xF0,25[r2] |
; stbc #0xDA,26[r2] |
; stbc #0x42,27[r2] |
sb r0,22[r2] |
lw r1,#0xFF |
sb r1,23[r2] |
lw r1,#0xEE |
sb r1,24[r2] |
lw r1,#0xF0 |
sb r1,25[r2] |
lw r1,#0xDA |
sb r1,26[r2] |
lw r1,#0x42 |
sb r1,27[r2] |
; swap sender / destination IP |
; write sender |
sb r9,28[r2] |
sb r10,29[r2] |
sb r11,30[r2] |
sb r12,31[r2] |
; write destination |
sb r5,38[r2] |
sb r6,39[r2] |
sb r7,40[r2] |
sb r8,41[r2] |
; change request to reply |
; stbc #2,21[r2] |
lw r1,#2 |
sb r1,21[r2] |
mov r1,r2 ; r1 = packet address |
lw r2,#0x2A ; r2 = packet length |
call eth_send_packet |
jmp eth_loop |
|
|
;============================================================================== |
;============================================================================== |
;****************************************************************; |
; ; |
; Tiny BASIC for the Raptor64 ; |
2610,28 → 4016,28
lw sp,ENDMEM ; initialize stack pointer |
subui sp,sp,#8 |
sw lr,[sp] ; save off return address |
sc r0,CursorRow ; set screen output |
sc r0,CursorCol |
sb r0,CursorRow ; set screen output |
sb r0,CursorCol |
sb r0,CursorFlash |
sw r0,pos |
sh r0,pos |
lw r2,#0x10000020 ; black chars, yellow background |
sh r2,charToPrint |
; sh r2,charToPrint |
call ClearScreen |
lea r1,msgInit ; tell who we are |
call PRMESGAUX |
; call PRMESGAUX |
lea r1,msgInit ; tell who we are |
call PRMESG |
lw r1,TXTBGN ; init. end-of-program pointer |
sw r1,TXTUNF |
lw r1,ENDMEM ; get address of end of memory |
subui r1,r1,#2048 ; reserve 2K for the stack |
subui r1,r1,#4096 ; reserve 4K for the stack |
sw r1,STKBOT |
subui r1,r1,#8192 ; 1000 vars |
subui r1,r1,#16384 ; 1000 vars |
sw r1,VARBGN |
call clearVars ; clear the variable area |
lw r1,VARBGN ; calculate number of bytes free |
lw r3,TXTUNF |
sub r1,r1,r3 |
subu r1,r1,r3 |
setlo r2,#0 |
call PRTNUM |
lea r1,msgBytesFree |
2751,7 → 4157,7
; executed if none of the other table items are matched. |
; |
; Character-matching tables: |
align 8 |
|
TAB1: |
db "LIS",'T'+0x80 ; Direct commands |
db "LOA",'D'+0x80 |
2873,7 → 4279,7
dw XP_OR |
dw XP_ORX |
|
.align 16 |
.align 4 |
|
;* |
; r3 = match flag (trashed) |
4652,7 → 6058,7
; return r1 = pointer to end of line + 1 |
|
PRTSTG: |
sub sp,sp,#32 |
subui sp,sp,#32 |
sw r5,[sp] |
sw r5,8[sp] |
sw r7,16[sp] |
4682,8 → 6088,7
subui sp,sp,#8 |
sw lr,[sp] |
setlo r3,#'"' |
setlo r4,#<QT3 |
sethi r4,#>QT3 |
lea r4,QT3 |
call TSTC ; *** QTSTG *** |
setlo r2,#'"' ; it is a " |
QT1: |
4695,15 → 6100,13
bra RUNNXL ; if so, run next line |
QT3: |
setlo r3,#'''' |
setlo r4,#<QT4 |
sethi r4,#>QT4 |
lea r4,QT4 |
call TSTC ; is it a single quote? |
setlo r2,#'''' ; if so, do same as above |
bra QT1 |
QT4: |
setlo r3,#'_' |
setlo r4,#<QT5 |
sethi r4,#>QT5 |
lea r4,QT5 |
call TSTC ; is it an underline? |
setlo r1,#CR ; if so, output a CR without LF |
call GOOUT |
4740,15 → 6143,16
sw r6,16[sp] |
sw r7,24[sp] |
sw lr,32[sp] |
ori r7,r0,#NUMWKA ; r7 = pointer to numeric work area |
lea r7,NUMWKA ; r7 = pointer to numeric work area |
mov r6,r1 ; save number for later |
mov r5,r2 ; r5 = min number of chars |
bgt r1,r0,PN1 ; is it negative? if not |
bgt r1,r0,PN2 ; is it negative? if not |
neg r1,r1 ; else make it positive |
subui r5,r5,#1 ; one less for width count |
PN2: |
lw r3,#10 |
PN1: |
lw r3,#10 |
mod r2,r1,r3 ; r2 = r1 mod 10 |
modu r2,r1,r3 ; r2 = r1 mod 10 |
divui r1,r1,#10 ; r1 /= 10 divide by 10 |
addui r2,r2,#'0' ; convert remainder to ascii |
sb r2,[r7] ; and store in buffer |
4762,7 → 6166,7
call GOOUT |
loop r5,PN3 |
PN4: |
bgt r6,r0,PN5 ; is number negative? |
bge r6,r0,PN5 ; is number negative? |
setlo r1,#'-' ; if so, display the sign |
call GOOUT |
PN5: |
4789,17 → 6193,16
sw r7,16[sp] |
sw r8,24[sp] |
sw lr,32[sp] |
setlo r7,#<NUMWKA ; r7 = pointer to numeric work area |
sethi r7,#>NUMWKA |
lea r7,NUMWKA ; r7 = pointer to numeric work area |
or r6,r1,r0 ; save number for later |
setlo r5,#20 ; r5 = min number of chars |
or r4,r1,r0 |
mov r4,r1 |
bgt r4,r0,PHN1 ; is it negative? if not |
neg r4,r4 ; else make it positive |
sub r5,r5,#1 ; one less for width count |
subui r5,r5,#1 ; one less for width count |
setlo r8,#20 ; maximum of 10 digits |
PHN1: |
or r1,r4,r0 |
mov r1,r4 |
andi r1,r1,#15 |
blt r1,#10,PHN7 |
addui r1,r1,#'A'-10 |
4808,9 → 6211,9
add r1,r1,#'0' ; convert remainder to ascii |
PHN8: |
sb r1,[r7] ; and store in buffer |
add r7,r7,#1 |
sub r5,r5,#1 ; decrement width |
shru r4,r4,#4 |
addui r7,r7,#1 |
subui r5,r5,#1 ; decrement width |
shrui r4,r4,#4 |
beq r4,r0,PHN6 ; is it zero yet ? |
loop r8,PHN1 ; safety |
PHN6: ; test pad count |
4824,7 → 6227,7
setlo r1,#'-' ; if so, display the sign |
call GOOUT |
PHN5: |
sub r7,r7,#1 |
subui r7,r7,#1 |
lb r1,[r7] ; now unstack the digits and display |
call GOOUT |
cmpui r1,r7,#NUMWKA |
4883,7 → 6286,7
addui sp,sp,#16 |
jal r0,[r4] ; jump to the routine |
TC1: |
add r8,r8,#1 ; if equal, bump text pointer |
addui r8,r8,#1 ; if equal, bump text pointer |
lw r1,8[sp] |
lw lr,[sp] |
ret #16 |
4908,17 → 6311,16
lb r3,[r8] |
bltui r3,#'0',TSNMRET ; is it less than zero? |
bgtui r3,#'9',TSNMRET ; is it greater than nine? |
setlo r4,#0xFFFFFFFF |
sethi r4,#0x07FFFFFF |
lw r4,#0x07FFFFFF_FFFFFFFF |
bleu r1,r4,TN2 ; see if there's room for new digit |
setlo r1,msgNumTooBig |
lea r1,msgNumTooBig |
bra ERROR ; if not, we've overflowd |
TN2: |
mului r1,r1,#10 ; quickly multiply result by 10 |
addi r8,r8,#1 ; adjust text pointer |
addui r8,r8,#1 ; adjust text pointer |
andi r3,r3,#0x0F ; add in the new digit |
add r1,r1,r3 |
addi r2,r2,#1 ; increment the no. of digits |
addu r1,r1,r3 |
addui r2,r2,#1 ; increment the no. of digits |
bra TN1 |
TSNMRET: |
lw lr,[sp] |
4940,7 → 6342,7
beqi r1,#' ',IGB1 ; see if it's a space |
bnei r1,#'\t',IGBRET ; or a tab |
IGB1: |
add r8,r8,#1 ; increment the text pointer |
addui r8,r8,#1 ; increment the text pointer |
bra IGB2 |
IGBRET: |
lw r1,[sp] |
4958,11 → 6360,11
TOUPBUF: |
subui sp,sp,#8 |
sw lr,[sp] |
setlo r8,BUFFER ; set up text pointer |
lea r8,BUFFER ; set up text pointer |
setlo r3,#0 ; clear quote flag |
TOUPB1: |
lb r1,[r8] ; get the next text char. |
add r8,r8,#1 |
addui r8,r8,#1 |
beqi r1,#CR,TOUPBRT ; is it end of line? |
beqi r1,#'"',DOQUO ; a double quote? |
beqi r1,#'''',DOQUO ; or a single quote? |
4972,7 → 6374,7
bra TOUPB1 ; and go back for more |
DOQUO: |
bne r3,r0,DOQUO1; are we inside quotes? |
or r3,r1,r0 ; if not, toggle inside-quotes flag |
mov r3,r1 ; if not, toggle inside-quotes flag |
bra TOUPB1 |
DOQUO1: |
bne r3,r1,TOUPB1 ; make sure we're ending proper quote |
4986,9 → 6388,9
; ===== Convert the character in r1 to upper case |
; |
toUpper |
blt r1,#'a',TOUPRET ; is it < 'a'? |
bgt r1,#'z',TOUPRET ; or > 'z'? |
sub r1,r1,#32 ; if not, make it upper case |
blti r1,#'a',TOUPRET ; is it < 'a'? |
bgti r1,#'z',TOUPRET ; or > 'z'? |
subui r1,r1,#32 ; if not, make it upper case |
TOUPRET |
ret |
|
5002,7 → 6404,7
subui sp,sp,#8 ; save link reg |
sw lr,[sp] |
call GOIN ; get input if possible |
beq r1,#-1,CHKRET2 ; if Zero, no input |
beqi r1,#-1,CHKRET2 ; if Zero, no input |
bnei r1,#CTRLC,CHKRET ; is it control-C? |
jmp WSTART ; if so, do a warm start |
CHKRET2: |
5028,8 → 6430,8
sw lr,8[sp] |
mov r5,r1 ; r5 = pointer to message |
PRMESG1: |
add r5,r5,#1 |
lb r1,-1[r5] ; get the char. |
addui r5,r5,#1 |
lbu r1,-1[r5] ; get the char. |
beq r1,r0,PRMRET |
call GOOUT ;else display it trashes r4 |
bra PRMESG1 |
5074,7 → 6476,7
jmp DisplayChar |
|
|
; ===== Input a character from the console into register D0 (or |
; ===== Input a character from the console into register R1 (or |
; return Zero status if there's no character available). |
; |
INC: |
5128,8 → 6530,7
; MOVE.B #228,D7 return to Tutor |
; TRAP #14 |
|
.align 16 |
msgInit db CR,LF,"Raptor64 Tiny BASIC v1.0",CR,LF,"(C) 2012 Robert Finch",CR,LF,LF,0 |
msgInit db CR,LF,"Raptor64 Tiny BASIC v1.0",CR,LF,"(C) 2013 Robert Finch",CR,LF,LF,0 |
OKMSG db CR,LF,"OK",CR,LF,0 |
msgWhat db "What?",CR,LF,0 |
SRYMSG db "Sorry." |
5239,6 → 6640,7
wait |
jmp start |
dberr_rout: |
lw sp,#0x100200100 |
lea r1,msgdberr |
call DisplayString |
mfspr r1,ERRADR |
5267,43 → 6669,69
db " EPC: ",0 |
msgiberr: |
db "Err fetching instruction at: ",0 |
.align 16 |
.align 4 |
|
;------------------------------------------------------------------------------ |
; IRQ routine |
; |
; Interrupts are automatically disabled at the time of the interrupt in order |
; to prevent nested interrupts from occuring. Interrupts are re-enabled by |
; the IRET instruction at the end of the interrupt routine. If the interrupt |
; turns out to not match a hardware interrupt, then a software context |
; switching interrupt is assumed. |
; |
; This routine uses it's own private interrupt stack; the stack of the |
; interrupted context is not used at all. A couple of working registers are |
; saved off not on the stack. We can get away with this because nested |
; interrupts are not allowed. |
;------------------------------------------------------------------------------ |
; |
irqrout: |
subui sp,sp,#32 |
sw r1,[sp] ; save off a working register |
sw r2,8[sp] ; and a second work register |
sw r26,16[sp] ; save off implicit constant builder reg |
sw lr,24[sp] |
sw sp,sp_save ; use our own private stack for interrupt processing |
sw lr,lr_save ; so, save off the sp and working registers |
sw r26,r26_save |
sw r1,r1_save |
sw r2,r2_save |
|
lw sp,#0x1_00001000 ; the second two kbytes |
inch r1,PIC ; r1= which IRQ line is active |
|
; Dispatch fork, in order of required timeliness |
|
beqi r1,#2,irq1000Hz |
beqi r1,#3,irq100Hz |
beqi r1,#8,irqSerial |
beqi r1,#13,irqRaster |
beqi r1,#15,irqKeybd |
beqi r1,#1,irqColdStart ; CTRL-ALT-DEL interrupt |
|
; Here, none of the hardware interrupts were active so |
; assume software context switch interrupt |
; |
lw sp,sp_save |
lw lr,lr_save |
lw r26,r26_save |
lw r1,r1_save |
lw r2,r2_save |
iepp |
iret |
|
; 1000 Hz interrupt |
; This IRQ must be fast, so it's placed inline |
; This IRQ must be fast, so it's placed inline. It's also the first |
; IRQ checked for in the interrupt dispatch. |
; Increments the millisecond counter, and switches to the next context |
; |
irq1000Hz: |
bnei r1,#2,irq100Hz |
outb r0,0xFFFFFFFF_FFFF0000 ; acknowledge interrupt |
outb r0,0xDCFFFD ; acknowledge interrupt |
lw r1,Milliseconds ; increment milliseconds count |
addui r1,r1,#1 |
sw r1,Milliseconds |
lea r2,TEXTSCR |
inch r1,332[r2] |
addui r1,r1,#1 |
outc r1,332[r2] |
lw lr,24[sp] |
lw r26,16[sp] ; restore registers from stack |
lw r2,8[sp] |
lw r1,[sp] |
addui sp,sp,#32 ; restore stack pointer |
lw sp,sp_save |
lw lr,lr_save |
lw r26,r26_save |
lw r1,r1_save |
lw r2,r2_save |
iepp ; move to the next context |
nop |
nop |
nop |
iret ; return to the next context |
|
; 100 Hz interrupt |
5311,20 → 6739,23
; we call a subroutine. |
; |
irq100Hz: |
bnei r1,#3,irqSerial |
lw r1,p100IRQvec |
; jal lr,[r1] |
call Pulse100 |
bra irqret |
irqret: |
lw sp,sp_save |
lw lr,lr_save |
lw r26,r26_save |
lw r1,r1_save |
lw r2,r2_save |
iret |
|
irqSerial: |
bnei r1,#8,irqRaster |
lw r1,serialIRQvec |
jal lr,[r1] |
bra irqret |
|
irqRaster: |
bnei r1,#13,irqKeybd |
lw r1,rasterIRQvec |
; jal lr,[r1] |
call RasterIRQfn |
5331,29 → 6762,67
bra irqret |
|
irqKeybd: |
beqi r1,#1,ColdStart ; CTRL-ALT-DEL interrupt |
bnei r1,#15,irqret |
lw r1,keybdIRQvec |
call KeybdIRQ |
; jal lr,[r1] |
bra irqret |
|
irqret: |
lw lr,24[sp] |
lw r26,16[sp] ; restore registers from stack |
lw r2,8[sp] |
lw r1,[sp] |
addui sp,sp,#32 ; restore stack pointer |
irqColdStart: |
jmp ColdStart |
|
;------------------------------------------------------------------------------ |
; NMI routine |
; |
; The NMI line is tied to the parity error signal. But also any non-initialized |
; interrupts get sent here. |
;------------------------------------------------------------------------------ |
; |
nmirout: |
sw sp,sp_save |
sw r1,r1_save |
sw r26,r26_save |
lw sp,#0x100001000 |
outb r0,0xDCFFFE ; acknowledge interrupt |
lea r1,msgPerr |
call DisplayString |
mfspr r1,IPC |
call DisplayWord |
call CRLF |
lw sp,sp_save |
lw r1,r1_save |
lw r26,r26_save |
iret |
|
msgPerr: |
db "Parity error at: ",0 |
|
|
;------------------------------------------- |
; NMI routine |
; Unimplemented instructions end up here |
;------------------------------------------- |
nmirout: |
.align 4 |
ui_irout: |
subui sp,sp,#8 |
sw r1,[sp] |
lea r1,msgUnimp |
call DisplayString |
mfspr r1,IPC |
call DisplayWord |
call CRLF |
lw r1,[sp] |
addui sp,sp,#8 |
; hang the context |
ui_irout1: |
bra ui_irout1 |
iret |
|
msgUnimp: |
db "Unimplemented instruction at: ",0 |
|
;------------------------------------------- |
; Handle miss on Data TLB |
;------------------------------------------- |
.align 4 |
DTLBHandler: |
sw r1,0xFFFF_FFFF_FFFF_0000 |
sw r2,0xFFFF_FFFF_FFFF_0008 |
5387,16 → 6856,15
nop |
nop |
|
; NMI vector |
org 0xFFFF_FFFF_FFFF_FFE0 |
jmp nmirout |
nop |
nop |
dw 0 ; |
dw 0 ; |
|
; RST vector |
; RST vector |
org 0xFFFF_FFFF_FFFF_FFF0 |
jmp start |
nop |
nop |
|
; ROM checksum goes here |
|
org 0xFFFF_FFFF_FFFF_FFF8 |
dw 0 |
/trunk/software/sample code/bootrom.v
1,1880 → 1,2446
rommem[1536] = 65'h133FFED0C33FFED54; |
rommem[1537] = 65'h033FFEE1D33FFEE06; |
rommem[1538] = 65'h033FFEF4733FFEE08; |
rommem[1539] = 65'h10000000A33FFEFE7; |
rommem[1540] = 65'h10410840A0000000D; |
rommem[1541] = 65'h00A1080010410803A; |
rommem[1542] = 65'h1BE207FA9101100FF; |
rommem[1543] = 65'h06A0D642DE6BFB214; |
rommem[1544] = 65'h16A0D782DE6BEFFF8; |
rommem[1545] = 65'h0DE0000000000000F; |
rommem[1546] = 65'h0E6BFB214DE000000; |
rommem[1547] = 65'h1E6BEFBF86A0D642D; |
rommem[1548] = 65'h10000000F6A0D782D; |
rommem[1549] = 65'h0DE000000DE000000; |
rommem[1550] = 65'h06A0D642DE6BFB214; |
rommem[1551] = 65'h06A0D782DE6BEF7F8; |
rommem[1552] = 65'h0DE0000000000000F; |
rommem[1553] = 65'h0E6BFB214DE000000; |
rommem[1554] = 65'h0E6BEF3F86A0D642D; |
rommem[1555] = 65'h10000000F6A0D782D; |
rommem[1556] = 65'h0DE000000DE000000; |
rommem[1557] = 65'h06A0D642DE6BFB214; |
rommem[1558] = 65'h06A0D782DE6BEEFF8; |
rommem[1559] = 65'h0DE0000000000000F; |
rommem[1560] = 65'h0E6BFB214DE000000; |
rommem[1561] = 65'h0E6BEEBF86A0D642D; |
rommem[1562] = 65'h10000000F6A0D782D; |
rommem[1563] = 65'h0DE000000DE000000; |
rommem[1564] = 65'h06A0D642DE6BFB214; |
rommem[1565] = 65'h16A0D782DE6BEE7F8; |
rommem[1566] = 65'h0DE0000000000000F; |
rommem[1567] = 65'h0E6BFB214DE000000; |
rommem[1568] = 65'h1E6BEE3F86A0D642D; |
rommem[1569] = 65'h10000000F6A0D782D; |
rommem[1570] = 65'h0DE000000DE000000; |
rommem[1571] = 65'h06A0D642DE6BFB214; |
rommem[1572] = 65'h06A0D782DE6BEDFF8; |
rommem[1573] = 65'h0DE0000000000000F; |
rommem[1574] = 65'h0E6BFB214DE000000; |
rommem[1575] = 65'h0E6BEDBF86A0D642D; |
rommem[1576] = 65'h10000000F6A0D782D; |
rommem[1577] = 65'h0DE000000DE000000; |
rommem[1578] = 65'h06A0D642DE6BFB214; |
rommem[1579] = 65'h16A0D782DE6BED7F8; |
rommem[1580] = 65'h0DE0000000000000F; |
rommem[1581] = 65'h0E6BFB214DE000000; |
rommem[1582] = 65'h1E6BED3F86A0D642D; |
rommem[1583] = 65'h10000000F6A0D782D; |
rommem[1584] = 65'h0DE000000DE000000; |
rommem[1585] = 65'h06A0D642DE6BFB214; |
rommem[1586] = 65'h16A0D782DE6BECFF8; |
rommem[1587] = 65'h0DE0000000000000F; |
rommem[1588] = 65'h0E6BFB214DE000000; |
rommem[1589] = 65'h1E6BECBF86A0D642D; |
rommem[1590] = 65'h10000000F6A0D782D; |
rommem[1591] = 65'h0DE000000DE000000; |
rommem[1592] = 65'h06A0D642DE6BFB214; |
rommem[1593] = 65'h06A0D782DE6BEC7F8; |
rommem[1594] = 65'h0DE0000000000000F; |
rommem[1595] = 65'h0E6BFB214DE000000; |
rommem[1596] = 65'h0E6BEC3F86A0D642D; |
rommem[1597] = 65'h10000000F6A0D782D; |
rommem[1598] = 65'h0DE000000DE000000; |
rommem[1599] = 65'h1BE1000A802008568; |
rommem[1600] = 65'h0DE0000000000000F; |
rommem[1601] = 65'h1BE007F6ADE000000; |
rommem[1602] = 65'h1020085686000A0C0; |
rommem[1603] = 65'h1BE1107E94A0120C0; |
rommem[1604] = 65'h0E08001FFE0C00000; |
rommem[1605] = 65'h1663080009A00EA20; |
rommem[1606] = 65'h1BE017FCF0A318008; |
rommem[1607] = 65'h16A0D042DE6BFB768; |
rommem[1608] = 65'h09A00E95066008D08; |
rommem[1609] = 65'h09A00E8BC66008E08; |
rommem[1610] = 65'h19A00E8A466008FE0; |
rommem[1611] = 65'h19A00EA2066008FE8; |
rommem[1612] = 65'h0E6BFB7C466008FF0; |
rommem[1613] = 65'h06600B0086A0D042D; |
rommem[1614] = 65'h16A0D042DE6BFB8EC; |
rommem[1615] = 65'h0E6BFB6286600B000; |
rommem[1616] = 65'h06600B0106A0D042D; |
rommem[1617] = 65'h06600B0189A00CAC4; |
rommem[1618] = 65'h131FFEDEC31FFECEC; |
rommem[1619] = 65'h031FFF29931FFECE4; |
rommem[1620] = 65'h1E0C000CE00000040; |
rommem[1621] = 65'h14201941462019414; |
rommem[1622] = 65'h062019416E0C00020; |
rommem[1623] = 65'h1BE21804842011416; |
rommem[1624] = 65'h0620020A80000000D; |
rommem[1625] = 65'h031FFEED9620020A6; |
rommem[1626] = 65'h031FFF1ED31FFEEC4; |
rommem[1627] = 65'h16200141862001416; |
rommem[1628] = 65'h16000941AE0400001; |
rommem[1629] = 65'h06A0D042DE6BFB36D; |
rommem[1630] = 65'h033FFF09631FFEFF5; |
rommem[1631] = 65'h1E0C0000431FFF1F7; |
rommem[1632] = 65'h0EE800003E69C0600; |
rommem[1633] = 65'h131FFF2216A0D0C28; |
rommem[1634] = 65'h0BE007FEA33FFF096; |
rommem[1635] = 65'h10FEF0018BE00000A; |
rommem[1636] = 65'h167E1000867E08000; |
rommem[1637] = 65'h1E6BFB36067EF8010; |
rommem[1638] = 65'h1402080006A0D082D; |
rommem[1639] = 65'h031FFED0CBE100088; |
rommem[1640] = 65'h1BE007F8A0A210001; |
rommem[1641] = 65'h067E1000867EF8010; |
rommem[1642] = 65'h037EF801867E08000; |
rommem[1643] = 65'h00000000000000000; |
rommem[1644] = 65'h06F57206F6C6C6548; |
rommem[1645] = 65'h07061520021646C72; |
rommem[1646] = 65'h07973203436726F74; |
rommem[1647] = 65'h1617473206D657473; |
rommem[1648] = 65'h02E2E2E676E697472; |
rommem[1649] = 65'h0000000000000002E; |
rommem[1650] = 65'h16A0D042DE6BFB3AC; |
rommem[1651] = 65'h0E07FA00F66009030; |
rommem[1652] = 65'h1EE800003E69C0FF2; |
rommem[1653] = 65'h037EF80006A0D0429; |
rommem[1654] = 65'h16200180262001800; |
rommem[1655] = 65'h062009810E04001F0; |
rommem[1656] = 65'h06200980EE0400010; |
rommem[1657] = 65'h1E69C0A04E0400001; |
rommem[1658] = 65'h16A0D0428EE800003; |
rommem[1659] = 65'h06000181260001809; |
rommem[1660] = 65'h16000180A60001813; |
rommem[1661] = 65'h060009814E0400001; |
rommem[1662] = 65'h1E69C0A0137EF8000; |
rommem[1663] = 65'h06A0D0420EE800003; |
rommem[1664] = 65'h1BE107F8814108001; |
rommem[1665] = 65'h0EE800003E69C0A00; |
rommem[1666] = 65'h037EF80006A0D0420; |
rommem[1667] = 65'h1EE800003E69C0A01; |
rommem[1668] = 65'h0141080016A0D0420; |
rommem[1669] = 65'h037EF800004100439; |
rommem[1670] = 65'h167E100000FEF0020; |
rommem[1671] = 65'h167E2001067E18008; |
rommem[1672] = 65'h1E69C0A0667E28018; |
rommem[1673] = 65'h06A0D0820EE800003; |
rommem[1674] = 65'h0E69C0A0616210003; |
rommem[1675] = 65'h16A0D0828EE800003; |
rommem[1676] = 65'h1BE20016840011812; |
rommem[1677] = 65'h0E0C0006446021400; |
rommem[1678] = 65'h11421000A80011808; |
rommem[1679] = 65'h046029400BE2000C9; |
rommem[1680] = 65'h002520009BE42FF88; |
rommem[1681] = 65'h1BE00046ABE01FF4F; |
rommem[1682] = 65'h0BE20016840011813; |
rommem[1683] = 65'h0E0C0006446021400; |
rommem[1684] = 65'h11421001480011808; |
rommem[1685] = 65'h046029400BE2000C9; |
rommem[1686] = 65'h002520009BE42FF88; |
rommem[1687] = 65'h0BE0002EABE01FF4F; |
rommem[1688] = 65'h0BE2000C840011814; |
rommem[1689] = 65'h0BE20008840011815; |
rommem[1690] = 65'h01442008080021808; |
rommem[1691] = 65'h146021400BE407F89; |
rommem[1692] = 65'h0E69C0A01E0C00064; |
rommem[1693] = 65'h06A0D0820EE800003; |
rommem[1694] = 65'h0BE2000C914210020; |
rommem[1695] = 65'h1BE42FF4846029400; |
rommem[1696] = 65'h1BE01FF0F02520009; |
rommem[1697] = 65'h0E69C0A00BE00008A; |
rommem[1536] = 65'h133FFED5C33FFEDA4; |
rommem[1537] = 65'h133FFEF1C33FFEF05; |
rommem[1538] = 65'h133FFF07F33FFEF07; |
rommem[1539] = 65'h033FFF13F33FFF122; |
rommem[1540] = 65'h033FFF01133FFF06F; |
rommem[1541] = 65'h00000000B33FFF169; |
rommem[1542] = 65'h1020000750000000D; |
rommem[1543] = 65'h00410840A020000B5; |
rommem[1544] = 65'h16600A0D86600A0D0; |
rommem[1545] = 65'h16600A0E86600A0E0; |
rommem[1546] = 65'h16600A0F86600A0F0; |
rommem[1547] = 65'h16600A1086600A100; |
rommem[1548] = 65'h16600A1186600A110; |
rommem[1549] = 65'h16600A1286600A120; |
rommem[1550] = 65'h16600A1386600A130; |
rommem[1551] = 65'h16600A1486600A140; |
rommem[1552] = 65'h10410803A0410840A; |
rommem[1553] = 65'h0101100FF0A108001; |
rommem[1554] = 65'h0E6BFB228BE207FA9; |
rommem[1555] = 65'h1039008696A0D642D; |
rommem[1556] = 65'h16A0D782DE6BEFFF8; |
rommem[1557] = 65'h0E6BFB2280000000F; |
rommem[1558] = 65'h1039008696A0D642D; |
rommem[1559] = 65'h06A0D782DE6BEFBF8; |
rommem[1560] = 65'h0E6BFB2280000000F; |
rommem[1561] = 65'h1039008696A0D642D; |
rommem[1562] = 65'h06A0D782DE6BEF7F8; |
rommem[1563] = 65'h0E6BFB2280000000F; |
rommem[1564] = 65'h1039008696A0D642D; |
rommem[1565] = 65'h16A0D782DE6BEF3F8; |
rommem[1566] = 65'h0E6BFB2280000000F; |
rommem[1567] = 65'h1039008696A0D642D; |
rommem[1568] = 65'h06A0D782DE6BEEFF8; |
rommem[1569] = 65'h0E6BFB2280000000F; |
rommem[1570] = 65'h1039008696A0D642D; |
rommem[1571] = 65'h16A0D782DE6BEEBF8; |
rommem[1572] = 65'h0E6BFB2280000000F; |
rommem[1573] = 65'h1039008696A0D642D; |
rommem[1574] = 65'h16A0D782DE6BEE7F8; |
rommem[1575] = 65'h0E6BFB2280000000F; |
rommem[1576] = 65'h1039008696A0D642D; |
rommem[1577] = 65'h06A0D782DE6BEE3F8; |
rommem[1578] = 65'h0E6BFB2280000000F; |
rommem[1579] = 65'h1039008696A0D642D; |
rommem[1580] = 65'h06A0D782DE6BEDFF8; |
rommem[1581] = 65'h0E6BFB2280000000F; |
rommem[1582] = 65'h1039008696A0D642D; |
rommem[1583] = 65'h16A0D782DE6BEDBF8; |
rommem[1584] = 65'h0E6BFB2280000000F; |
rommem[1585] = 65'h1039008696A0D642D; |
rommem[1586] = 65'h16A0D782DE6BED7F8; |
rommem[1587] = 65'h0E6BFB2280000000F; |
rommem[1588] = 65'h1039008696A0D642D; |
rommem[1589] = 65'h06A0D782DE6BED3F8; |
rommem[1590] = 65'h0E6BFB2280000000F; |
rommem[1591] = 65'h1039008696A0D642D; |
rommem[1592] = 65'h16A0D782DE6BECFF8; |
rommem[1593] = 65'h0E6BFB2280000000F; |
rommem[1594] = 65'h1039008696A0D642D; |
rommem[1595] = 65'h06A0D782DE6BECBF8; |
rommem[1596] = 65'h0E6BFB2280000000F; |
rommem[1597] = 65'h1039008696A0D642D; |
rommem[1598] = 65'h06A0D782DE6BEC7F8; |
rommem[1599] = 65'h0E6BFB2280000000F; |
rommem[1600] = 65'h1039008696A0D642D; |
rommem[1601] = 65'h16A0D782DE6BEC3F8; |
rommem[1602] = 65'h1020085680000000F; |
rommem[1603] = 65'h00000000FBE100068; |
rommem[1604] = 65'h16000A0C0BE007FAA; |
rommem[1605] = 65'h04A0120C002008568; |
rommem[1606] = 65'h0E0C00000BE110E69; |
rommem[1607] = 65'h19A00FB38E08001FF; |
rommem[1608] = 65'h00A31800866308000; |
rommem[1609] = 65'h1E6BFB8A8BE017FCF; |
rommem[1610] = 65'h066008CD06A0D042D; |
rommem[1611] = 65'h066008CE89A008000; |
rommem[1612] = 65'h06A0D042DE6BFBAA8; |
rommem[1613] = 65'h0E6BFBB1466008D00; |
rommem[1614] = 65'h166008D086A0D042D; |
rommem[1615] = 65'h166008E089A00FA5C; |
rommem[1616] = 65'h166008F789A00FB94; |
rommem[1617] = 65'h166008FE09A00F9BC; |
rommem[1618] = 65'h066008FE89A00F9A4; |
rommem[1619] = 65'h166008FF09A00FB38; |
rommem[1620] = 65'h06A0D042DE6BFBBC0; |
rommem[1621] = 65'h0E6BFBDCC6600B008; |
rommem[1622] = 65'h16600B0006A0D042D; |
rommem[1623] = 65'h16A0D042DE6BFB768; |
rommem[1624] = 65'h09A00D1AC6600B010; |
rommem[1625] = 65'h0E69CFFFF6600B018; |
rommem[1626] = 65'h16A0D0424EE800003; |
rommem[1627] = 65'h1BE1000482A108824; |
rommem[1628] = 65'h1E69CFFFF31FFEF3A; |
rommem[1629] = 65'h16A0D0424EE800003; |
rommem[1630] = 65'h1BE1000482A108A2C; |
rommem[1631] = 65'h031FFEEEB31FFED3C; |
rommem[1632] = 65'h031FFF45331FFED34; |
rommem[1633] = 65'h1E0C000CE00000040; |
rommem[1634] = 65'h16201941062019414; |
rommem[1635] = 65'h0E0C0002042019414; |
rommem[1636] = 65'h04201141662019416; |
rommem[1637] = 65'h00000000DBE218048; |
rommem[1638] = 65'h1620020A6620020A8; |
rommem[1639] = 65'h00181D09716008002; |
rommem[1640] = 65'h00181D09716008002; |
rommem[1641] = 65'h131FFEFFC31FFF011; |
rommem[1642] = 65'h0EE800003E69CFFFF; |
rommem[1643] = 65'h12A1080046A0D0420; |
rommem[1644] = 65'h131FFF3A7BE100048; |
rommem[1645] = 65'h06000141860001417; |
rommem[1646] = 65'h16000941A16008001; |
rommem[1647] = 65'h16A0D042DE6BFB4AD; |
rommem[1648] = 65'h1E69CFFFF31FFF130; |
rommem[1649] = 65'h06A0D0420EE800003; |
rommem[1650] = 65'h1BE1000E82A108414; |
rommem[1651] = 65'h01600800431FFF3B1; |
rommem[1652] = 65'h0EE800003E69C0600; |
rommem[1653] = 65'h131FFF3DB6A0D0428; |
rommem[1654] = 65'h06A0D042DE6BFB428; |
rommem[1655] = 65'h1E69CFFFF6600A0D8; |
rommem[1656] = 65'h06A0D0420EE800003; |
rommem[1657] = 65'h0BE1000682A10820C; |
rommem[1658] = 65'h16600A0E09A00DD3C; |
rommem[1659] = 65'h06600A0E89A00CDD0; |
rommem[1660] = 65'h0BE10006931FFF54E; |
rommem[1661] = 65'h131FFF60531FFF59D; |
rommem[1662] = 65'h033FFF20A33FFF20A; |
rommem[1663] = 65'h19A00A0D0BE007FEA; |
rommem[1664] = 65'h06A11070302010568; |
rommem[1665] = 65'h0341F8000BE100048; |
rommem[1666] = 65'h1DE00000000000040; |
rommem[1667] = 65'h0DE000000DE000000; |
rommem[1668] = 65'h1BE007ECA0181E097; |
rommem[1669] = 65'h0E6900000660020D8; |
rommem[1670] = 65'h06A0D0C2DEE800003; |
rommem[1671] = 65'h01601014A16008056; |
rommem[1672] = 65'h031FFF0631602002F; |
rommem[1673] = 65'h10A1080016A310421; |
rommem[1674] = 65'h00A2100A86A310429; |
rommem[1675] = 65'h1BE007E6ABE027F8F; |
rommem[1676] = 65'h067E080000FEF0018; |
rommem[1677] = 65'h067EF801067E10008; |
rommem[1678] = 65'h06A0D082DE6BFB4A0; |
rommem[1679] = 65'h0BE10008840208000; |
rommem[1680] = 65'h00A21000131FFED5C; |
rommem[1681] = 65'h067EF8010BE007F8A; |
rommem[1682] = 65'h167E0800067E10008; |
rommem[1683] = 65'h10000000037EF8018; |
rommem[1684] = 65'h06F57206F6C6C6548; |
rommem[1685] = 65'h07061520021646C72; |
rommem[1686] = 65'h07973203436726F74; |
rommem[1687] = 65'h1617473206D657473; |
rommem[1688] = 65'h02E2E2E676E697472; |
rommem[1689] = 65'h0000000000000002E; |
rommem[1690] = 65'h16A0D042DE6BFB4EC; |
rommem[1691] = 65'h1E07F800F66009030; |
rommem[1692] = 65'h1EE800003E69C0FF2; |
rommem[1693] = 65'h037EF80006A0D0429; |
rommem[1694] = 65'h16200180262001800; |
rommem[1695] = 65'h062009810E04001F0; |
rommem[1696] = 65'h06200980EE0400010; |
rommem[1697] = 65'h1E69C0A04E0400001; |
rommem[1698] = 65'h16A0D0428EE800003; |
rommem[1699] = 65'h047E1800847E10000; |
rommem[1700] = 65'h047E2801847E20010; |
rommem[1701] = 65'h14202180037EF8020; |
rommem[1702] = 65'h00441100542011802; |
rommem[1703] = 65'h0E1000200BE4000A3; |
rommem[1704] = 65'h14201180004411003; |
rommem[1705] = 65'h137EF800004411005; |
rommem[1706] = 65'h167E100000FEF0020; |
rommem[1707] = 65'h167E2001067E18008; |
rommem[1708] = 65'h14201980067EF8018; |
rommem[1709] = 65'h1BE21852842011802; |
rommem[1710] = 65'h16A2184009A019600; |
rommem[1711] = 65'h0142101FF0A210001; |
rommem[1712] = 65'h14001180C62011802; |
rommem[1713] = 65'h14201980EBE2003A8; |
rommem[1714] = 65'h1BE41834331FFED4B; |
rommem[1715] = 65'h0400218096000180C; |
rommem[1716] = 65'h0E69C0A06BE400108; |
rommem[1717] = 65'h06A0D1020EE800003; |
rommem[1718] = 65'h1E69C0A0616420002; |
rommem[1719] = 65'h16A0D1028EE800003; |
rommem[1720] = 65'h1BE4001084002180A; |
rommem[1721] = 65'h0EE800003E69C0A06; |
rommem[1722] = 65'h1164200016A0D1020; |
rommem[1723] = 65'h0EE800003E69C0A06; |
rommem[1724] = 65'h14002180B6A0D1028; |
rommem[1725] = 65'h0E1000011BE4000A8; |
rommem[1726] = 65'h0EE800003E69C0A00; |
rommem[1727] = 65'h047E100006A0D1028; |
rommem[1728] = 65'h147E2001047E18008; |
rommem[1729] = 65'h037EF802047EF8018; |
rommem[1730] = 65'h047E10000E07FFFFF; |
rommem[1731] = 65'h147E2001047E18008; |
rommem[1732] = 65'h037EF802047EF8018; |
rommem[1733] = 65'h067E080000FEF0028; |
rommem[1734] = 65'h167E1801067E10008; |
rommem[1735] = 65'h167EF802067E20018; |
rommem[1736] = 65'h0EE800003E69C0A03; |
rommem[1737] = 65'h1BE1000A16A0D0420; |
rommem[1738] = 65'h1B0100D041410807F; |
rommem[1739] = 65'h1B0100710B0100B0C; |
rommem[1740] = 65'h147E1000847E08000; |
rommem[1741] = 65'h047E2001847E18010; |
rommem[1742] = 65'h037EF802847EF8020; |
rommem[1743] = 65'h16000980880009808; |
rommem[1744] = 65'h0BE007EEABE007F0A; |
rommem[1745] = 65'h0EE800003E69C0A00; |
rommem[1746] = 65'h1400118146A0D0420; |
rommem[1747] = 65'h0B2100413BE200108; |
rommem[1748] = 65'h160009815E0400001; |
rommem[1749] = 65'h0B2100311BE00016A; |
rommem[1750] = 65'h0BE00010A60001815; |
rommem[1751] = 65'h04201180060001815; |
rommem[1752] = 65'h06A3104109A019600; |
rommem[1753] = 65'h0142101FF0A210001; |
rommem[1754] = 65'h0E69C0A0162011800; |
rommem[1755] = 65'h06A0D0420EE800003; |
rommem[1756] = 65'h1BE107D2914108001; |
rommem[1757] = 65'h1BE1003C94000980C; |
rommem[1758] = 65'h14200981031FFED4B; |
rommem[1759] = 65'h1E0400001BE408360; |
rommem[1760] = 65'h1400098096000980C; |
rommem[1761] = 65'h0E69C0A06BE100108; |
rommem[1762] = 65'h06A0D0420EE800003; |
rommem[1763] = 65'h0E69C0A06141080FD; |
rommem[1764] = 65'h16A0D0428EE800003; |
rommem[1765] = 65'h1BE1001084000980A; |
rommem[1766] = 65'h0EE800003E69C0A06; |
rommem[1767] = 65'h0141080FE6A0D0420; |
rommem[1768] = 65'h0EE800003E69C0A06; |
rommem[1769] = 65'h14000980B6A0D0428; |
rommem[1770] = 65'h1E0400013BE1000A8; |
rommem[1771] = 65'h0EE800003E69C0A00; |
rommem[1772] = 65'h1BE0077EA6A0D0428; |
rommem[1773] = 65'h167EF80000FEF0008; |
rommem[1774] = 65'h131FFEDECB2100300; |
rommem[1775] = 65'h0B2100401BE00016A; |
rommem[1776] = 65'h031FFEE0602208009; |
rommem[1777] = 65'h1B2100302BE0000EA; |
rommem[1778] = 65'h1BE00008A31FFEE08; |
rommem[1779] = 65'h031FFEE1DB2100303; |
rommem[1780] = 65'h147EF8000BE00002A; |
rommem[1781] = 65'h1018000210BEF0008; |
rommem[1782] = 65'h16000145160001450; |
rommem[1783] = 65'h16000941CE0400001; |
rommem[1784] = 65'h10FEF000837EF8000; |
rommem[1785] = 65'h14A00945067E10000; |
rommem[1786] = 65'h1E69C00001410800F; |
rommem[1787] = 65'h16A0D0821EE800003; |
rommem[1788] = 65'h1EE800003E69C0002; |
rommem[1789] = 65'h1601114406A0D0029; |
rommem[1790] = 65'h11410800F0A108001; |
rommem[1791] = 65'h04A01145160009450; |
rommem[1792] = 65'h00A210001BE110089; |
rommem[1793] = 65'h0600114511421000F; |
rommem[1794] = 65'h037EF800847E10000; |
rommem[1795] = 65'h137EF80006000941C; |
rommem[1796] = 65'h167E100000FEF0010; |
rommem[1797] = 65'h14A01145167EF8008; |
rommem[1798] = 65'h1BE1101884A009450; |
rommem[1799] = 65'h10A2100014A209440; |
rommem[1800] = 65'h0600114511421000F; |
rommem[1801] = 65'h0BE2000E84001141C; |
rommem[1802] = 65'h131FFF93FB210030D; |
rommem[1803] = 65'h131FFEF47BE00008A; |
rommem[1804] = 65'h1E07FFFFFBE00004A; |
rommem[1805] = 65'h147E1000047EF8008; |
rommem[1806] = 65'h14A00945137EF8010; |
rommem[1807] = 65'h0041104394A011450; |
rommem[1808] = 65'h0E69C000037EF8000; |
rommem[1809] = 65'h16A0D0421EE800003; |
rommem[1810] = 65'h037EF800004100430; |
rommem[1811] = 65'h167E100000FEF0010; |
rommem[1812] = 65'h1E09C000067EF8008; |
rommem[1813] = 65'h0EE800003E69C0000; |
rommem[1814] = 65'h1BE107FA16A0D0421; |
rommem[1815] = 65'h1EE800003E69C0002; |
rommem[1816] = 65'h0141080FF6A0D0029; |
rommem[1817] = 65'h1BE2000A84001141C; |
rommem[1818] = 65'h131FFF93FB210030D; |
rommem[1819] = 65'h131FFEF47BE00004A; |
rommem[1820] = 65'h147EF800847E10000; |
rommem[1821] = 65'h00FEF000837EF8010; |
rommem[1822] = 65'h0E690000067EF8000; |
rommem[1823] = 65'h16A0D082DEE800003; |
rommem[1824] = 65'h00A1080018220814E; |
rommem[1825] = 65'h031FFF2D89220814E; |
rommem[1826] = 65'h031FFEE4C31FFEE4A; |
rommem[1827] = 65'h16A0D0010E6BF0010; |
rommem[1828] = 65'h037EF800847EF8000; |
rommem[1829] = 65'h037EF8000620020A8; |
rommem[1830] = 65'h1660120B86600A0B0; |
rommem[1831] = 65'h14C0120A64C00A0A8; |
rommem[1832] = 65'h14600A0B0BE110089; |
rommem[1833] = 65'h037EF8000460120B8; |
rommem[1834] = 65'h11A210200142101FF; |
rommem[1835] = 65'h0EE800400E6800000; |
rommem[1836] = 65'h04600A0B0042D0803; |
rommem[1837] = 65'h14600A0B866208000; |
rommem[1838] = 65'h16621801066208008; |
rommem[1839] = 65'h06622802066220018; |
rommem[1840] = 65'h16623803066230028; |
rommem[1841] = 65'h16624804066240038; |
rommem[1842] = 65'h16625805066250048; |
rommem[1843] = 65'h06626806066260058; |
rommem[1844] = 65'h16627807066270068; |
rommem[1845] = 65'h06628808066280078; |
rommem[1846] = 65'h16629809066290088; |
rommem[1847] = 65'h0662A80A0662A0098; |
rommem[1848] = 65'h1662B80B0662B00A8; |
rommem[1849] = 65'h1662C80C0662C00B8; |
rommem[1850] = 65'h1662D80D0662D00C8; |
rommem[1851] = 65'h0662E80E0662E00D8; |
rommem[1852] = 65'h1662F80F0662F00E8; |
rommem[1853] = 65'h1620120A64C0120A8; |
rommem[1854] = 65'h0E68000001A210200; |
rommem[1855] = 65'h0042D0803EE800400; |
rommem[1856] = 65'h04621801046208000; |
rommem[1857] = 65'h04622802046220018; |
rommem[1858] = 65'h14623803046230028; |
rommem[1859] = 65'h14624804046240038; |
rommem[1860] = 65'h14625805046250048; |
rommem[1861] = 65'h04626806046260058; |
rommem[1862] = 65'h14627807046270068; |
rommem[1863] = 65'h04628808046280078; |
rommem[1864] = 65'h14629809046290088; |
rommem[1865] = 65'h0462A80A0462A0098; |
rommem[1866] = 65'h1462B80B0462B00A8; |
rommem[1867] = 65'h1462C80C0462C00B8; |
rommem[1868] = 65'h1462D80D0462D00C8; |
rommem[1869] = 65'h0462E80E0462E00D8; |
rommem[1870] = 65'h1462F80F0462F00E8; |
rommem[1871] = 65'h137EF800046210008; |
rommem[1872] = 65'h167E080000FEF0020; |
rommem[1873] = 65'h167E1801067E10008; |
rommem[1874] = 65'h031FFEF3767EF8018; |
rommem[1875] = 65'h1041D0403E6810000; |
rommem[1876] = 65'h0BE2001C84001141A; |
rommem[1877] = 65'h10A21000182110000; |
rommem[1878] = 65'h04601140892110000; |
rommem[1879] = 65'h042019414BE110088; |
rommem[1880] = 65'h06600940892218000; |
rommem[1881] = 65'h147E1000847E08000; |
rommem[1882] = 65'h047EF801847E18010; |
rommem[1883] = 65'h04201941437EF8020; |
rommem[1884] = 65'h1BE007E8A92118000; |
rommem[1885] = 65'h0E69A0010160080A0; |
rommem[1886] = 65'h06A0D0429EE800003; |
rommem[1887] = 65'h0160080E037EF8000; |
rommem[1888] = 65'h1EE800003E69A0010; |
rommem[1889] = 65'h037EF80006A0D0429; |
rommem[1890] = 65'h067E080000FEF0018; |
rommem[1891] = 65'h167E1801067E10008; |
rommem[1892] = 65'h1040D0809E68FFC00; |
rommem[1893] = 65'h0E6A9292906210601; |
rommem[1894] = 65'h1F6829292EEA4A4A4; |
rommem[1895] = 65'h1E6A000006A0D042D; |
rommem[1896] = 65'h16A0D0C2DEE800400; |
rommem[1897] = 65'h00A31800866308000; |
rommem[1898] = 65'h047E08000BE017FCF; |
rommem[1899] = 65'h147E1801047E10008; |
rommem[1900] = 65'h00FEF002837EF8018; |
rommem[1901] = 65'h167E1000867E08000; |
rommem[1902] = 65'h067E2001867E18010; |
rommem[1903] = 65'h1E69A000067EF8020; |
rommem[1904] = 65'h06A0D0C2DEE800003; |
rommem[1905] = 65'h18231000282308000; |
rommem[1906] = 65'h1E040002004110818; |
rommem[1907] = 65'h131FFEF2B42021414; |
rommem[1908] = 65'h0EE800003E6900000; |
rommem[1909] = 65'h1923080006A0D0C2D; |
rommem[1910] = 65'h06A3D1029E6810000; |
rommem[1911] = 65'h0BE017F8F0A318002; |
rommem[1912] = 65'h147E2001847EF8020; |
rommem[1913] = 65'h147E1000847E18010; |
rommem[1914] = 65'h137EF802847E08000; |
rommem[1915] = 65'h067E080000FEF0028; |
rommem[1916] = 65'h167E1801067E10008; |
rommem[1917] = 65'h167EF802067E20018; |
rommem[1918] = 65'h0EE800003E69A0000; |
rommem[1919] = 65'h0823080006A0D0C2D; |
rommem[1920] = 65'h00411081882310002; |
rommem[1921] = 65'h1E690000004208805; |
rommem[1922] = 65'h06A0D0C2DEE800003; |
rommem[1923] = 65'h0923200006A309021; |
rommem[1924] = 65'h1BE017FAF0A318002; |
rommem[1925] = 65'h0EE800003E69A0000; |
rommem[1926] = 65'h1823080026A0D0C2D; |
rommem[1927] = 65'h131FFEF160E108001; |
rommem[1928] = 65'h147E1000847E08000; |
rommem[1929] = 65'h047E2001847E18010; |
rommem[1930] = 65'h037EF802847EF8020; |
rommem[1931] = 65'h067E080000FEF0018; |
rommem[1932] = 65'h167E1801067E10008; |
rommem[1933] = 65'h0EE800003E69A0000; |
rommem[1934] = 65'h0823100006A0D0C2D; |
rommem[1935] = 65'h00631820004208C18; |
rommem[1936] = 65'h0EE800003E6900000; |
rommem[1937] = 65'h1E0400020043D0C03; |
rommem[1938] = 65'h10A31800292308000; |
rommem[1939] = 65'h047E08000BE017FCF; |
rommem[1940] = 65'h147E1801047E10008; |
rommem[1941] = 65'h1141080FF37EF8018; |
rommem[1942] = 65'h0AC10045AA8100541; |
rommem[1943] = 65'h1A8100261AE10037A; |
rommem[1944] = 65'h0161081000C108060; |
rommem[1945] = 65'h1141080FF37EF8000; |
rommem[1946] = 65'h00A10803CAE10021A; |
rommem[1947] = 65'h14200941637EF8000; |
rommem[1948] = 65'h0E69A00001410807F; |
rommem[1949] = 65'h06A0D0C2DEE800003; |
rommem[1950] = 65'h10420881882310000; |
rommem[1951] = 65'h01410807F42009418; |
rommem[1952] = 65'h19231001604208803; |
rommem[1953] = 65'h0E690000006210200; |
rommem[1954] = 65'h1042D0403EE800003; |
rommem[1955] = 65'h0B210080D37EF8000; |
rommem[1956] = 65'h167E080000FEF0020; |
rommem[1957] = 65'h167E1801067E10008; |
rommem[1958] = 65'h06200141867EF8018; |
rommem[1959] = 65'h1E6800091BE00018A; |
rommem[1960] = 65'h10FEF0020BE1D0209; |
rommem[1961] = 65'h167E1000867E08000; |
rommem[1962] = 65'h067EF801867E18010; |
rommem[1963] = 65'h0B020033842011418; |
rommem[1964] = 65'h1620114180A210001; |
rommem[1965] = 65'h147EF801831FFEF37; |
rommem[1966] = 65'h147E1000847E18010; |
rommem[1967] = 65'h037EF802047E08000; |
rommem[1968] = 65'h1BE1D0169E6800090; |
rommem[1969] = 65'h167E080000FEF0020; |
rommem[1970] = 65'h167E1801067E10008; |
rommem[1971] = 65'h14201141667EF8018; |
rommem[1972] = 65'h10E210001B02FF200; |
rommem[1973] = 65'h0BE007DEA62011416; |
rommem[1974] = 65'h1BE1D0169E6800093; |
rommem[1975] = 65'h167E080000FEF0020; |
rommem[1976] = 65'h167E1801067E10008; |
rommem[1977] = 65'h04201141867EF8018; |
rommem[1978] = 65'h10E210001B02FE600; |
rommem[1979] = 65'h1BE007C6A62011418; |
rommem[1980] = 65'h0BE1D0169E6800092; |
rommem[1981] = 65'h167E080000FEF0020; |
rommem[1982] = 65'h167E1801067E10008; |
rommem[1983] = 65'h14201141667EF8018; |
rommem[1984] = 65'h00A210001B02FDA1E; |
rommem[1985] = 65'h1BE007AEA62011416; |
rommem[1986] = 65'h1BE1D0189E6800094; |
rommem[1987] = 65'h167E080000FEF0020; |
rommem[1988] = 65'h167E1801067E10008; |
rommem[1989] = 65'h04201141867EF8018; |
rommem[1990] = 65'h162001418BE200068; |
rommem[1991] = 65'h062001416BE00798A; |
rommem[1992] = 65'h10FEF0030BE00794A; |
rommem[1993] = 65'h167E1000867E08000; |
rommem[1994] = 65'h067E2001867E18010; |
rommem[1995] = 65'h067EF802867E28020; |
rommem[1996] = 65'h0BE1D00A9E6800099; |
rommem[1997] = 65'h104008C0931FFEF37; |
rommem[1998] = 65'h1BE00012A42009418; |
rommem[1999] = 65'h042011418B2101508; |
rommem[2000] = 65'h00E210001BE2003A8; |
rommem[2001] = 65'h131FFEF3762011418; |
rommem[2002] = 65'h14200941804008C09; |
rommem[2003] = 65'h09231000082310002; |
rommem[2004] = 65'h00A1080010A318002; |
rommem[2005] = 65'h0EE800003E69A0000; |
rommem[2006] = 65'h1824280006A0D102D; |
rommem[2007] = 65'h0E0400020BE12FF04; |
rommem[2008] = 65'h09230FFFE31FFEF2B; |
rommem[2009] = 65'h1B010090ABE00016A; |
rommem[2010] = 65'h031FFEF3704009009; |
rommem[2011] = 65'h10402040904008C09; |
rommem[2012] = 65'h09230800031FFEF2B; |
rommem[2013] = 65'h0BE00004A31FFEFC4; |
rommem[2014] = 65'h047EF802831FFEFD2; |
rommem[2015] = 65'h047E2001847E28020; |
rommem[2016] = 65'h147E1000847E18010; |
rommem[2017] = 65'h137EF803047E08000; |
rommem[2018] = 65'h167E080000FEF0020; |
rommem[2019] = 65'h167E1801067E10008; |
rommem[2020] = 65'h04200941867EF8018; |
rommem[2021] = 65'h1620094180A108001; |
rommem[2022] = 65'h0EE800003E69A0000; |
rommem[2023] = 65'h0BE1102466A0D0821; |
rommem[2024] = 65'h1BE0000CA62001418; |
rommem[2025] = 65'h167E080000FEF0020; |
rommem[2026] = 65'h167E1801067E10008; |
rommem[2027] = 65'h14200941667EF8018; |
rommem[2028] = 65'h0620094160A108001; |
rommem[2029] = 65'h1EE800003E69A0002; |
rommem[2030] = 65'h1BE1100866A0D0821; |
rommem[2031] = 65'h1620114160E210001; |
rommem[2032] = 65'h031FFEF3731FFEEF6; |
rommem[2033] = 65'h047E1801047EF8018; |
rommem[2034] = 65'h147E0800047E10008; |
rommem[2035] = 65'h00DEF001837EF8020; |
rommem[2036] = 65'h167E1000867E08000; |
rommem[2037] = 65'h10211000967EF8010; |
rommem[2038] = 65'h00A2100014A208000; |
rommem[2039] = 65'h031FFEF47BE100068; |
rommem[2040] = 65'h147EF8010BE007F8A; |
rommem[2041] = 65'h147E0800047E10008; |
rommem[2042] = 65'h10FEF000837EF8018; |
rommem[2043] = 65'h131FFEFE767EF8000; |
rommem[2044] = 65'h10BEF000847EF8000; |
rommem[2045] = 65'h167E080000FEF0010; |
rommem[2046] = 65'h1E040000D67EF8008; |
rommem[2047] = 65'h0E040000A31FFEF47; |
rommem[2048] = 65'h147EF800831FFEF47; |
rommem[2049] = 65'h037EF801047E08000; |
rommem[2050] = 65'h167E080000FEF0010; |
rommem[2051] = 65'h01410800F67EF8008; |
rommem[2052] = 65'h0AC1002390A108030; |
rommem[2053] = 65'h131FFEF470A108007; |
rommem[2054] = 65'h147E0800047EF8008; |
rommem[2055] = 65'h00FEF001037EF8010; |
rommem[2056] = 65'h167EF800867E08000; |
rommem[2057] = 65'h031FFF00406108804; |
rommem[2058] = 65'h031FFF00406108802; |
rommem[2059] = 65'h147E0800047EF8008; |
rommem[2060] = 65'h10FEF001837EF8010; |
rommem[2061] = 65'h067E1800867E08000; |
rommem[2062] = 65'h0E0C0000767EF8010; |
rommem[2063] = 65'h131FFF00F06109002; |
rommem[2064] = 65'h047EF8010BE01FFCF; |
rommem[2065] = 65'h047E0800047E18008; |
rommem[2066] = 65'h00FEF001837EF8018; |
rommem[2067] = 65'h067E1800867E08000; |
rommem[2068] = 65'h0E040003A67EF8010; |
rommem[2069] = 65'h10220800931FFEF47; |
rommem[2070] = 65'h0E0C0000731FFF019; |
rommem[2071] = 65'h131FFEF47E0400020; |
rommem[2072] = 65'h031FFF00F40208000; |
rommem[2073] = 65'h0BE01FF6F0A210001; |
rommem[2074] = 65'h147EF801031FFEFFA; |
rommem[2075] = 65'h047E0800047E18008; |
rommem[2076] = 65'h00FEF003037EF8018; |
rommem[2077] = 65'h067E2000867E18000; |
rommem[2078] = 65'h167E3001867E28010; |
rommem[2079] = 65'h167E4002867E38020; |
rommem[2080] = 65'h1E2000013E080000A; |
rommem[2081] = 65'h00631F80004110C1C; |
rommem[2082] = 65'h1064208010653F800; |
rommem[2083] = 65'h00652880104439009; |
rommem[2084] = 65'h01C10800004519409; |
rommem[2085] = 65'h106426001BE047F0F; |
rommem[2086] = 65'h00443100906532000; |
rommem[2087] = 65'h0024080090652E001; |
rommem[2088] = 65'h147E1800002510009; |
rommem[2089] = 65'h147E2801047E20008; |
rommem[2090] = 65'h047E3802047E30018; |
rommem[2091] = 65'h137EF803047E40028; |
rommem[2092] = 65'h067E180000FEF0020; |
rommem[2093] = 65'h167E2801067E20008; |
rommem[2094] = 65'h1E200000F67E40018; |
rommem[2095] = 65'h1162100301411000F; |
rommem[2096] = 65'h10642100106217000; |
rommem[2097] = 65'h0044290090632F000; |
rommem[2098] = 65'h004310C0906319001; |
rommem[2099] = 65'h0BE047EEF06108801; |
rommem[2100] = 65'h10231000902408009; |
rommem[2101] = 65'h047E2000847E18000; |
rommem[2102] = 65'h047E4001847E28010; |
rommem[2103] = 65'h00FEF003837EF8020; |
rommem[2104] = 65'h067E3800867E18000; |
rommem[2105] = 65'h067E4801867E40010; |
rommem[2106] = 65'h067E5802867E50020; |
rommem[2107] = 65'h00225800967EF8030; |
rommem[2108] = 65'h10225000931FFF039; |
rommem[2109] = 65'h0E240000131FFF058; |
rommem[2110] = 65'h006938600E2000007; |
rommem[2111] = 65'h10A7380040A738000; |
rommem[2112] = 65'h06A758C10141180FF; |
rommem[2113] = 65'h1BE047F4F06109001; |
rommem[2114] = 65'h0BE04FEEF02208009; |
rommem[2115] = 65'h031FFF05802A08009; |
rommem[2116] = 65'h1141180FFE2000003; |
rommem[2117] = 65'h1061090016A858C10; |
rommem[2118] = 65'h160B00014BE047FAF; |
rommem[2119] = 65'h047E3800847E18000; |
rommem[2120] = 65'h047E4801847E40010; |
rommem[2121] = 65'h047E5802847E50020; |
rommem[2122] = 65'h037EF803847EF8030; |
rommem[2123] = 65'h16A0D782DE6BEFFF8; |
rommem[2124] = 65'h131FFEFFA6000141C; |
rommem[2125] = 65'h031FFEF47E0400024; |
rommem[2126] = 65'h0B01FFFFF31FFEE08; |
rommem[2127] = 65'h131FFEF47B010030D; |
rommem[2128] = 65'h162001418BE007F8A; |
rommem[2129] = 65'h104100C0931FFEF37; |
rommem[2130] = 65'h00A31800282308000; |
rommem[2131] = 65'h0B210042431FFEF33; |
rommem[2132] = 65'h00A31800282308000; |
rommem[2133] = 65'h0B010563A31FFEF33; |
rommem[2134] = 65'h0B012EF42B0106344; |
rommem[2135] = 65'h0B010914CB0105D4A; |
rommem[2136] = 65'h1B0100743B010153F; |
rommem[2137] = 65'h0B012B849B0100452; |
rommem[2138] = 65'h1BE007C2AB011A350; |
rommem[2139] = 65'h0BE007BEA31FFF1BC; |
rommem[2140] = 65'h00A31800282308000; |
rommem[2141] = 65'h0B21FDB4C31FFEF33; |
rommem[2142] = 65'h00A31800282308000; |
rommem[2143] = 65'h1B21FD75331FFEF33; |
rommem[2144] = 65'h06000141831FFEED9; |
rommem[2145] = 65'h031FFEF3760001416; |
rommem[2146] = 65'h1E07FC320BE007A4A; |
rommem[2147] = 65'h0BE0079EA31FFEFE7; |
rommem[2148] = 65'h170736944203D203F; |
rommem[2149] = 65'h1706C65682079616C; |
rommem[2150] = 65'h0203D20534C430A0D; |
rommem[2151] = 65'h16373207261656C63; |
rommem[2152] = 65'h1203A0A0D6E656572; |
rommem[2153] = 65'h06D2074696445203D; |
rommem[2154] = 65'h179622079726F6D65; |
rommem[2155] = 65'h13D204C0A0D736574; |
rommem[2156] = 65'h031532064616F4C20; |
rommem[2157] = 65'h00A0D656C69662039; |
rommem[2158] = 65'h0706D7544203D2044; |
rommem[2159] = 65'h10D79726F6D656D20; |
rommem[2160] = 65'h1617473203D20420A; |
rommem[2161] = 65'h020796E6974207472; |
rommem[2162] = 65'h14A0A0D6369736162; |
rommem[2163] = 65'h020706D754A203D20; |
rommem[2164] = 65'h10D65646F63206F74; |
rommem[2165] = 65'h1766E49203D20490A; |
rommem[2166] = 65'h1520A0D7372656461; |
rommem[2167] = 65'h16F646E6152203D20; |
rommem[2168] = 65'h10D73656E696C206D; |
rommem[2169] = 65'h0616950203D20500A; |
rommem[2170] = 65'h0000000000A0D6F6E; |
rommem[2171] = 65'h00000000000000000; |
rommem[2172] = 65'h167EF80000FEF0008; |
rommem[2173] = 65'h00A31800282308000; |
rommem[2174] = 65'h0B01FFD2031FFEF33; |
rommem[2175] = 65'h047EF80000E318002; |
rommem[2176] = 65'h031FFF0F837EF8008; |
rommem[2177] = 65'h10410140931FFF11C; |
rommem[2178] = 65'h131FFF0F8E1000007; |
rommem[2179] = 65'h06050800031FFF11C; |
rommem[2180] = 65'h0BE027F8F0A528001; |
rommem[2181] = 65'h131FFF0F8BE00718A; |
rommem[2182] = 65'h0341F800031FFF11C; |
rommem[2183] = 65'h031FFF0F8BE00710A; |
rommem[2184] = 65'h00211000931FFF11C; |
rommem[2185] = 65'h031FFF02531FFEFFA; |
rommem[2186] = 65'h031FFF02531FFF025; |
rommem[2187] = 65'h031FFF02531FFF025; |
rommem[2188] = 65'h031FFF02531FFF025; |
rommem[2189] = 65'h0BE006F6A31FFF025; |
rommem[2190] = 65'h067E100000FEF0018; |
rommem[2191] = 65'h067EF801067E20008; |
rommem[2192] = 65'h0E100000FE0800000; |
rommem[2193] = 65'h00A31800282308000; |
rommem[2194] = 65'h031FFF13031FFEF33; |
rommem[2195] = 65'h106210800B01005FF; |
rommem[2196] = 65'h0042088091410800F; |
rommem[2197] = 65'h102208009BE027F0F; |
rommem[2198] = 65'h047E2000847EF8010; |
rommem[2199] = 65'h137EF801847E10000; |
rommem[2200] = 65'h1AE100339A8100E30; |
rommem[2201] = 65'h037EF80000E108030; |
rommem[2202] = 65'h0AE100446A8100A41; |
rommem[2203] = 65'h10A10800A0E108041; |
rommem[2204] = 65'h0A810056137EF8000; |
rommem[2205] = 65'h10E108061AE100466; |
rommem[2206] = 65'h137EF80000A10800A; |
rommem[2207] = 65'h137EF8000E07FFFFF; |
rommem[2208] = 65'h031FFF1B2BE00006A; |
rommem[2209] = 65'h131FFF1B2B21FFF0A; |
rommem[2210] = 65'h1B21FFC53B01F521A; |
rommem[2211] = 65'h1A01FFA3031FFF1B2; |
rommem[2212] = 65'h004101009A61FF939; |
rommem[2213] = 65'h031FFF13031FFF1B2; |
rommem[2214] = 65'h131FFF1B204100809; |
rommem[2215] = 65'h10621080031FFF130; |
rommem[2216] = 65'h104208C0904208809; |
rommem[2217] = 65'h0B0401E31B04FEF30; |
rommem[2218] = 65'h1B0402033B0401F32; |
rommem[2219] = 65'h0B0402037B04FEB35; |
rommem[2220] = 65'h1B0402439B0402238; |
rommem[2221] = 65'h0143180FFBE007CEA; |
rommem[2222] = 65'h031FFF1B20E318001; |
rommem[2223] = 65'h10621080031FFF130; |
rommem[2224] = 65'h031FFF1B204208809; |
rommem[2225] = 65'h10621080031FFF130; |
rommem[2226] = 65'h16051000004208809; |
rommem[2227] = 65'h1BE01FECF0A528001; |
rommem[2228] = 65'h031FFF13031FFF1B2; |
rommem[2229] = 65'h10420880906210800; |
rommem[2230] = 65'h031FFF13031FFF1B2; |
rommem[2231] = 65'h10420880906210800; |
rommem[2232] = 65'h131FFF180BE007A2A; |
rommem[2233] = 65'h031FFF186BE007D2A; |
rommem[2234] = 65'h131FFF18CBE007CEA; |
rommem[2235] = 65'h031FFF18CBE007CAA; |
rommem[2236] = 65'h0BE0063AA66028000; |
rommem[2237] = 65'h16602800031FFF186; |
rommem[2238] = 65'h031FFF180BE00634A; |
rommem[2239] = 65'h0BE0062EA66028000; |
rommem[2240] = 65'h167EF80000FEF0008; |
rommem[2241] = 65'h031FFF13031FFF1B2; |
rommem[2242] = 65'h0BE00038A04100809; |
rommem[2243] = 65'h167EF80000FEF0008; |
rommem[2244] = 65'h031FFF13031FFF1B2; |
rommem[2245] = 65'h0BE0001CA04100809; |
rommem[2246] = 65'h167EF80000FEF0008; |
rommem[2247] = 65'h031FFF13031FFF1B2; |
rommem[2248] = 65'h131FFF1B204100809; |
rommem[2249] = 65'h10621080031FFF130; |
rommem[2250] = 65'h031FFF1B204110809; |
rommem[2251] = 65'h10621080031FFF130; |
rommem[2252] = 65'h031FFF1B204208809; |
rommem[2253] = 65'h10621080031FFF130; |
rommem[2254] = 65'h031FFF1B204208809; |
rommem[2255] = 65'h10621080031FFF130; |
rommem[2256] = 65'h031FFF1B204208809; |
rommem[2257] = 65'h10621080031FFF130; |
rommem[2258] = 65'h031FFF1B204208809; |
rommem[2259] = 65'h10621080031FFF130; |
rommem[2260] = 65'h031FFF1B204208809; |
rommem[2261] = 65'h10621080031FFF130; |
rommem[2262] = 65'h00442100A04208809; |
rommem[2263] = 65'h047EF800004201409; |
rommem[2264] = 65'h037EF80000BEF0008; |
rommem[2265] = 65'h167EF80000FEF0008; |
rommem[2266] = 65'h1BE10690831FFEE1D; |
rommem[2267] = 65'h0B01EDF0031FFEE08; |
rommem[2268] = 65'h0BE107F6231FFF95C; |
rommem[2269] = 65'h037EF800847EF8000; |
rommem[2270] = 65'h067E080000FEF0018; |
rommem[2271] = 65'h167EF801067E18008; |
rommem[2272] = 65'h0020088A800000050; |
rommem[2273] = 65'h1EE800003E69AE000; |
rommem[2274] = 65'h1000000506A0D042A; |
rommem[2275] = 65'h016018554020088A8; |
rommem[2276] = 65'h1E69AE0080411841C; |
rommem[2277] = 65'h06A0D042AEE800003; |
rommem[2278] = 65'h0020088A800000050; |
rommem[2279] = 65'h00411841C16018554; |
rommem[2280] = 65'h0EE800003E69AE010; |
rommem[2281] = 65'h1000000506A0D042A; |
rommem[2282] = 65'h116018300020088A8; |
rommem[2283] = 65'h0E69AE00C0411841C; |
rommem[2284] = 65'h06A0D042AEE800003; |
rommem[2285] = 65'h0020088A800000050; |
rommem[2286] = 65'h10411841C16018300; |
rommem[2287] = 65'h1EE800003E69AE014; |
rommem[2288] = 65'h0E04000026A0D042A; |
rommem[2289] = 65'h1EE800003E69AE03C; |
rommem[2290] = 65'h131FFEE086A0D042A; |
rommem[2291] = 65'h1B01FD972B0100303; |
rommem[2292] = 65'h047EF8010BE007FAA; |
rommem[2293] = 65'h047E0800047E18008; |
rommem[2294] = 65'h1E698000037EF8018; |
rommem[2295] = 65'h16A0D082DEE800003; |
rommem[2296] = 65'h100000050E10037FF; |
rommem[2297] = 65'h192208000020088A8; |
rommem[2298] = 65'h0BE027F8F0A210002; |
rommem[2299] = 65'h10FEF001037EF8000; |
rommem[2300] = 65'h167EF800867E08000; |
rommem[2301] = 65'h0EE800003E69C1026; |
rommem[2302] = 65'h031FFEE086A0D0029; |
rommem[2303] = 65'h1E69C1068B0100A03; |
rommem[2304] = 65'h06A0D0429EE800003; |
rommem[2305] = 65'h1E69C1026BE107F69; |
rommem[2306] = 65'h06A0D0429EE800003; |
rommem[2307] = 65'h1B21FF30F1410800F; |
rommem[2308] = 65'h0EE800003E69C1002; |
rommem[2309] = 65'h1E69C10046A0D0029; |
rommem[2310] = 65'h16A0D0029EE800003; |
rommem[2311] = 65'h1EE800003E69C1018; |
rommem[2312] = 65'h0E69C100A6A0D0029; |
rommem[2313] = 65'h16A0D0029EE800003; |
rommem[2314] = 65'h0E69C1020E07F8000; |
rommem[2315] = 65'h06A0D0429EE800003; |
rommem[2316] = 65'h0B010050331FFEE08; |
rommem[2317] = 65'h0EE800003E69C1068; |
rommem[2318] = 65'h1BE107F696A0D0429; |
rommem[2319] = 65'h147E0800047EF8008; |
rommem[2320] = 65'h00FEF001037EF8010; |
rommem[2321] = 65'h167EF800867E08000; |
rommem[2322] = 65'h0E69C0600E0400008; |
rommem[2323] = 65'h16A0D0428EE800003; |
rommem[2324] = 65'h0E69500801600800F; |
rommem[2325] = 65'h06A0D0429EE800003; |
rommem[2326] = 65'h1E69500001600B46E; |
rommem[2327] = 65'h06A0D0429EE800003; |
rommem[2328] = 65'h1E69C0600E0400009; |
rommem[2329] = 65'h16A0D0428EE800003; |
rommem[2330] = 65'h1E6950006E07FCA12; |
rommem[2331] = 65'h06A0D0429EE800003; |
rommem[2332] = 65'h1E695000416009104; |
rommem[2333] = 65'h06A0D0429EE800003; |
rommem[2334] = 65'h1EE800005E6BD7840; |
rommem[2335] = 65'h0BE00800F040D0409; |
rommem[2336] = 65'h0E69C0600E040000D; |
rommem[2337] = 65'h16A0D0428EE800003; |
rommem[2338] = 65'h0E695000416008104; |
rommem[2339] = 65'h06A0D0429EE800003; |
rommem[2340] = 65'h1EE800005E6BD7840; |
rommem[2341] = 65'h0BE00800F040D0409; |
rommem[2342] = 65'h0E69C0600E0400010; |
rommem[2343] = 65'h16A0D0428EE800003; |
rommem[2344] = 65'h0E695000416008000; |
rommem[2345] = 65'h06A0D0429EE800003; |
rommem[2346] = 65'h147E0800047EF8008; |
rommem[2347] = 65'h01600800F37EF8010; |
rommem[2348] = 65'h1EE800003E6950080; |
rommem[2349] = 65'h131FFEE086A0D0429; |
rommem[2350] = 65'h1B0100861B01E3A03; |
rommem[2351] = 65'h1B0100C63B0100A62; |
rommem[2352] = 65'h1B0101065B0100E64; |
rommem[2353] = 65'h1B0101467B0101266; |
rommem[2354] = 65'h1E0401C31BE007EEA; |
rommem[2355] = 65'h0BE007E8A31FFF27A; |
rommem[2356] = 65'h031FFF27AE0401FA5; |
rommem[2357] = 65'h0E04010C3BE007E2A; |
rommem[2358] = 65'h1BE007DCA31FFF27A; |
rommem[2359] = 65'h131FFF27AE04012D1; |
rommem[2360] = 65'h0E040151FBE007D6A; |
rommem[2361] = 65'h1BE007D0A31FFF27A; |
rommem[2362] = 65'h031FFF27AE0401660; |
rommem[2363] = 65'h0E040191EBE007CAA; |
rommem[2364] = 65'h1BE007C4A31FFF27A; |
rommem[2365] = 65'h167E080000FEF0010; |
rommem[2366] = 65'h1E695000067EF8008; |
rommem[2367] = 65'h06A0D0429EE800003; |
rommem[2368] = 65'h1E6950006E07FCA12; |
rommem[2369] = 65'h06A0D0429EE800003; |
rommem[2370] = 65'h1E695000416009104; |
rommem[2371] = 65'h06A0D0429EE800003; |
rommem[2372] = 65'h0040D0409E683D090; |
rommem[2373] = 65'h116008104BE00800F; |
rommem[2374] = 65'h1EE800003E6950004; |
rommem[2375] = 65'h0E683D0906A0D0429; |
rommem[2376] = 65'h0BE00800F040D0409; |
rommem[2377] = 65'h0E695000416008000; |
rommem[2378] = 65'h06A0D0429EE800003; |
rommem[2379] = 65'h147E0800047EF8008; |
rommem[2380] = 65'h00FEF000837EF8010; |
rommem[2381] = 65'h0E04000C867E08000; |
rommem[2382] = 65'h1EE800003E69A0100; |
rommem[2383] = 65'h1E04000F06A0D0429; |
rommem[2384] = 65'h0EE800003E69A0102; |
rommem[2385] = 65'h0E04001186A0D0429; |
rommem[2386] = 65'h0EE800003E69A0104; |
rommem[2387] = 65'h1E04001406A0D0429; |
rommem[2388] = 65'h1EE800003E69A0106; |
rommem[2389] = 65'h1E04001686A0D0429; |
rommem[2390] = 65'h0EE800003E69A0108; |
rommem[2391] = 65'h147E080006A0D0429; |
rommem[2392] = 65'h0E69A011E37EF8008; |
rommem[2393] = 65'h16A0D0421EE800003; |
rommem[2394] = 65'h1B0100802B0100901; |
rommem[2395] = 65'h0B0100604B0100703; |
rommem[2396] = 65'h1B0100406B0100505; |
rommem[2397] = 65'h1B0100208B0100307; |
rommem[2398] = 65'h01A10802837EF8000; |
rommem[2399] = 65'h1E69AD0020A1080CC; |
rommem[2400] = 65'h06A0D0429EE800003; |
rommem[2401] = 65'h1EE800003E69AD012; |
rommem[2402] = 65'h1E69AD0226A0D0429; |
rommem[2403] = 65'h06A0D0429EE800003; |
rommem[2404] = 65'h0EE800003E69AD032; |
rommem[2405] = 65'h1E69AD0426A0D0429; |
rommem[2406] = 65'h06A0D0429EE800003; |
rommem[2407] = 65'h0EE800003E69AD052; |
rommem[2408] = 65'h0E69AD0626A0D0429; |
rommem[2409] = 65'h06A0D0429EE800003; |
rommem[2410] = 65'h1EE800003E69AD072; |
rommem[2411] = 65'h037EF80006A0D0429; |
rommem[2412] = 65'h167E080000FEF0020; |
rommem[2413] = 65'h167E1801067E10008; |
rommem[2414] = 65'h131FFEEBA67EF8018; |
rommem[2415] = 65'h04201941842011416; |
rommem[2416] = 65'h1EE800003E69C0418; |
rommem[2417] = 65'h11600802E6A0D002B; |
rommem[2418] = 65'h01600804062009416; |
rommem[2419] = 65'h0E69C040062009418; |
rommem[2420] = 65'h06A0D0423EE800003; |
rommem[2421] = 65'h16201141631FFF019; |
rommem[2422] = 65'h031FFEF3762019418; |
rommem[2423] = 65'h047EF801831FFEEBF; |
rommem[2424] = 65'h147E1000847E18010; |
rommem[2425] = 65'h037EF802047E08000; |
rommem[2426] = 65'h0400000040FEF0010; |
rommem[2427] = 65'h062019508E0C00140; |
rommem[2428] = 65'h06000151062001500; |
rommem[2429] = 65'h06200151462001512; |
rommem[2430] = 65'h037EF827740000004; |
rommem[2431] = 65'h0400000050FEF0018; |
rommem[2432] = 65'h160019416E0C00001; |
rommem[2433] = 65'h160019418E0C00028; |
rommem[2434] = 65'h031FFF00F40009500; |
rommem[2435] = 65'h131FFF00F40009501; |
rommem[2436] = 65'h037EF827F40000005; |
rommem[2437] = 65'h0400000010FEF0010; |
rommem[2438] = 65'h0AC10140242009514; |
rommem[2439] = 65'h10610860142009512; |
rommem[2440] = 65'h14200951460009418; |
rommem[2441] = 65'h00E10800160009416; |
rommem[2442] = 65'h0E040005E62009514; |
rommem[2443] = 65'h04000941831FFEF47; |
rommem[2444] = 65'h1600094180E108001; |
rommem[2445] = 65'h10E10800140009416; |
rommem[2446] = 65'h1E040002060009416; |
rommem[2447] = 65'h04000000131FFEF47; |
rommem[2448] = 65'h06000151037EF8010; |
rommem[2449] = 65'h10610860142009512; |
rommem[2450] = 65'h14200951460009418; |
rommem[2451] = 65'h1E040002060009416; |
rommem[2452] = 65'h04000000131FFEF47; |
rommem[2453] = 65'h10FEF001837EF8010; |
rommem[2454] = 65'h0E0C0027F40000005; |
rommem[2455] = 65'h14201950860019416; |
rommem[2456] = 65'h16001941806318601; |
rommem[2457] = 65'h131FFEF47E0400020; |
rommem[2458] = 65'h131FFEF47E0400023; |
rommem[2459] = 65'h031FFEF47E0400041; |
rommem[2460] = 65'h131FFEF47E0400023; |
rommem[2461] = 65'h131FFEF47E0400020; |
rommem[2462] = 65'h037EF827F40000005; |
rommem[2463] = 65'h0160080E946018000; |
rommem[2464] = 65'h1160080F262308000; |
rommem[2465] = 65'h0160080DF62308001; |
rommem[2466] = 65'h037EF800062308002; |
rommem[2467] = 65'h04000000F0FEF0028; |
rommem[2468] = 65'h04202157042009520; |
rommem[2469] = 65'h1BE2003A814110001; |
rommem[2470] = 65'h16001941640019571; |
rommem[2471] = 65'h0E040002060021418; |
rommem[2472] = 65'h0E040002331FFF00F; |
rommem[2473] = 65'h0E040002331FFF00F; |
rommem[2474] = 65'h0E040002331FFF00F; |
rommem[2475] = 65'h0E040002031FFF00F; |
rommem[2476] = 65'h04000941631FFF00F; |
rommem[2477] = 65'h1600094160A108001; |
rommem[2478] = 65'h10E10800540009418; |
rommem[2479] = 65'h031FFF00FE0400020; |
rommem[2480] = 65'h031FFF00FE0400058; |
rommem[2481] = 65'h031FFF00FE0400020; |
rommem[2482] = 65'h031FFF00FE0400058; |
rommem[2483] = 65'h031FFF00FE0400020; |
rommem[2484] = 65'h037EF827F4000000F; |
rommem[2485] = 65'h1FFFF000037EF8000; |
rommem[2486] = 65'h131FFF2FF4000000F; |
rommem[2487] = 65'h131FFF34631FFF2FE; |
rommem[2488] = 65'h031FFF30A31FFF36A; |
rommem[2489] = 65'h131FFEE0831FFF32B; |
rommem[2490] = 65'h0B010096AB010046B; |
rommem[2491] = 65'h1BE0002AAB0100D20; |
rommem[2492] = 65'h1E680028042011508; |
rommem[2493] = 65'h00A210008BE2D0247; |
rommem[2494] = 65'h0BE0001EA62011508; |
rommem[2495] = 65'h0BE2001A242011508; |
rommem[2496] = 65'h0620115080E210008; |
rommem[2497] = 65'h040011510BE00014A; |
rommem[2498] = 65'h1E0800001BE200109; |
rommem[2499] = 65'h04201150860011510; |
rommem[2500] = 65'h1E080002E62011512; |
rommem[2501] = 65'h0BE00002A62011514; |
rommem[2502] = 65'h1BE007C2AB0100203; |
rommem[2503] = 65'h10BEF02F74000000F; |
rommem[2504] = 65'h133FFF39CBE0020CA; |
rommem[2505] = 65'h033FFF95A33FFF3BE; |
rommem[2506] = 65'h033FFF96233FFF95B; |
rommem[2507] = 65'h133FFF9EA33FFF95C; |
rommem[2508] = 65'h10000000010060000; |
rommem[2509] = 65'h100000000107FFFF8; |
rommem[2510] = 65'h167EF80000FEF0008; |
rommem[2511] = 65'h1460F4E68660F1088; |
rommem[2512] = 65'h167EF80000FEF0008; |
rommem[2513] = 65'h16200141862001416; |
rommem[2514] = 65'h06600103C6000141A; |
rommem[2515] = 65'h1EE800040E6800020; |
rommem[2516] = 65'h164011040040D0809; |
rommem[2517] = 65'h19A00E5C031FFEED9; |
rommem[2518] = 65'h09A00E5C031FFF94D; |
rommem[2519] = 65'h04600CE6031FFF940; |
rommem[2520] = 65'h04600CE68660090D0; |
rommem[2521] = 65'h1660090F80E108800; |
rommem[2522] = 65'h0660090D80E10A000; |
rommem[2523] = 65'h1460090D831FFF4C3; |
rommem[2524] = 65'h104118404460190D0; |
rommem[2525] = 65'h031FFF88DE0800000; |
rommem[2526] = 65'h031FFF9409A00E668; |
rommem[2527] = 65'h066001098660010A8; |
rommem[2528] = 65'h1460F4E6866001090; |
rommem[2529] = 65'h031FFF9409A00E676; |
rommem[2530] = 65'h131FFF7D8E040003E; |
rommem[2531] = 65'h10286000931FFF91D; |
rommem[2532] = 65'h131FFF8FF9A04111B; |
rommem[2533] = 65'h0BE10172831FFF914; |
rommem[2534] = 65'h19A00E694AC1003FF; |
rommem[2535] = 65'h102110009BE007F4A; |
rommem[2536] = 65'h00621100160817FFE; |
rommem[2537] = 65'h10E84000260817FFF; |
rommem[2538] = 65'h00296800931FFF80C; |
rommem[2539] = 65'h1E0400000BE1001C8; |
rommem[2540] = 65'h1BE10004931FFF820; |
rommem[2541] = 65'h002908009BE900108; |
rommem[2542] = 65'h0460190D002D10009; |
rommem[2543] = 65'h0660110D031FFF829; |
rommem[2544] = 65'h0BE00006A02D48009; |
rommem[2545] = 65'h102D48009660690D0; |
rommem[2546] = 65'h10414040402C08009; |
rommem[2547] = 65'h0460590D0A41FDE03; |
rommem[2548] = 65'h104B0AC0202B50009; |
rommem[2549] = 65'h0BEB08064460090D8; |
rommem[2550] = 65'h033FFF7C89A00E76F; |
rommem[2551] = 65'h102A08009660590D0; |
rommem[2552] = 65'h00291800902B10009; |
rommem[2553] = 65'h00280800931FFF82F; |
rommem[2554] = 65'h002C1800902D10009; |
rommem[2555] = 65'h0BE0079AA31FFF829; |
rommem[2556] = 65'h1C4414F4CD453494C; |
rommem[2557] = 65'h14153CE5552D7454E; |
rommem[2558] = 65'h0454CD458454EC556; |
rommem[2559] = 65'h147CF544F47C649D4; |
rommem[2560] = 65'h155544552C255534F; |
rommem[2561] = 65'h1D24F46CD4552CE52; |
rommem[2562] = 65'h1495250D455504E49; |
rommem[2563] = 65'h050C3454B4F50D44E; |
rommem[2564] = 65'h1454B4F50C8454B4F; |
rommem[2565] = 65'h14F5453C54B4F50D7; |
rommem[2566] = 65'h143D35953C55942D0; |
rommem[2567] = 65'h0434452D24C43D34C; |
rommem[2568] = 65'h050C34B45455000C6; |
rommem[2569] = 65'h14B454550C84B4545; |
rommem[2570] = 65'h1C44E52CB454550D7; |
rommem[2571] = 65'h055C55A4953D34241; |
rommem[2572] = 65'h0545300CF5400D253; |
rommem[2573] = 65'h1BEBE3CBD3E00D045; |
rommem[2574] = 65'h0C44E4100BCBD3CBD; |
rommem[2576] = 65'h0FFFFFFFFFFFFD338; |
rommem[2577] = 65'h0FFFFFFFFFFFFD67C; |
rommem[2578] = 65'h0FFFFFFFFFFFFD284; |
rommem[2579] = 65'h0FFFFFFFFFFFFD29C; |
rommem[2580] = 65'h0FFFFFFFFFFFFD728; |
rommem[2581] = 65'h0FFFFFFFFFFFFD508; |
rommem[2582] = 65'h0FFFFFFFFFFFFD664; |
rommem[2583] = 65'h1FFFFFFFFFFFFD578; |
rommem[2584] = 65'h0FFFFFFFFFFFFD2E4; |
rommem[2585] = 65'h0FFFFFFFFFFFFD418; |
rommem[2586] = 65'h1FFFFFFFFFFFFD454; |
rommem[2587] = 65'h0FFFFFFFFFFFFD580; |
rommem[2588] = 65'h1FFFFFFFFFFFFD48C; |
rommem[2589] = 65'h0FFFFFFFFFFFFD5A8; |
rommem[2590] = 65'h0FFFFFFFFFFFFD380; |
rommem[2591] = 65'h0FFFFFFFFFFFFD83C; |
rommem[2592] = 65'h1FFFFFFFFFFFFD868; |
rommem[2593] = 65'h1FFFFFFFFFFFFD894; |
rommem[2594] = 65'h1FFFFFFFFFFFFD808; |
rommem[2595] = 65'h1FFFFFFFFFFFFD294; |
rommem[2596] = 65'h1FFFFFFFFFFFFCE5C; |
rommem[2597] = 65'h0FFFFFFFFFFFFD8C0; |
rommem[2598] = 65'h0FFFFFFFFFFFFE58C; |
rommem[2599] = 65'h0FFFFFFFFFFFFD304; |
rommem[2600] = 65'h1FFFFFFFFFFFFE5A0; |
rommem[2601] = 65'h1FFFFFFFFFFFFD65C; |
rommem[2602] = 65'h0FFFFFFFFFFFFDD3C; |
rommem[2603] = 65'h0FFFFFFFFFFFFDD50; |
rommem[2604] = 65'h1FFFFFFFFFFFFDD64; |
rommem[2605] = 65'h1FFFFFFFFFFFFDD2C; |
rommem[2606] = 65'h1FFFFFFFFFFFFDD94; |
rommem[2607] = 65'h1FFFFFFFFFFFFDE2C; |
rommem[2608] = 65'h1FFFFFFFFFFFFDE4C; |
rommem[2609] = 65'h0FFFFFFFFFFFFDD78; |
rommem[2610] = 65'h0FFFFFFFFFFFFDB50; |
rommem[2611] = 65'h1FFFFFFFFFFFFD4A4; |
rommem[2612] = 65'h0FFFFFFFFFFFFDF1C; |
rommem[2613] = 65'h0FFFFFFFFFFFFD4B8; |
rommem[2614] = 65'h0FFFFFFFFFFFFD4C0; |
rommem[2615] = 65'h0FFFFFFFFFFFFD9D0; |
rommem[2616] = 65'h0FFFFFFFFFFFFD9E0; |
rommem[2617] = 65'h1FFFFFFFFFFFFD9F0; |
rommem[2618] = 65'h0FFFFFFFFFFFFDA10; |
rommem[2619] = 65'h1FFFFFFFFFFFFDA00; |
rommem[2620] = 65'h0FFFFFFFFFFFFDA20; |
rommem[2621] = 65'h1FFFFFFFFFFFFDA48; |
rommem[2622] = 65'h1FFFFFFFFFFFFD93C; |
rommem[2623] = 65'h0FFFFFFFFFFFFD94C; |
rommem[2624] = 65'h0FFFFFFFFFFFFD904; |
rommem[2625] = 65'h1FFFFFFFFFFFFD914; |
rommem[2626] = 65'h19A0550809A04CFE0; |
rommem[2627] = 65'h031FFF91403F58009; |
rommem[2628] = 65'h00285800902BF8009; |
rommem[2629] = 65'h04A808000E0C00000; |
rommem[2630] = 65'h14A9100000A840001; |
rommem[2631] = 65'h002B40009BE200069; |
rommem[2632] = 65'h1BE1181C8BE0001EA; |
rommem[2633] = 65'h1BE2081081421007F; |
rommem[2634] = 65'h002B400090AA50008; |
rommem[2635] = 65'h00A948001E0C00000; |
rommem[2636] = 65'h1BE107FC34090FFFF; |
rommem[2637] = 65'h0E0C0002EBE007E2A; |
rommem[2638] = 65'h04090FFFF0A948001; |
rommem[2639] = 65'h146A58000BE107DA3; |
rommem[2640] = 65'h131FFF7B934B00000; |
rommem[2641] = 65'h1660090D04600CE60; |
rommem[2642] = 65'h131FFF7B931FFF4C3; |
rommem[2643] = 65'h131FFF7B9BE00630A; |
rommem[2644] = 65'h06604109046044E60; |
rommem[2645] = 65'h14600909031FFF4C3; |
rommem[2646] = 65'h0E0400000BE106248; |
rommem[2647] = 65'h131FFF81002848009; |
rommem[2648] = 65'h0BE900049BE100069; |
rommem[2649] = 65'h166049090BE00618A; |
rommem[2650] = 65'h131FFF9369A940002; |
rommem[2651] = 65'h19A0550A89A04CFF2; |
rommem[2652] = 65'h031FFF63ABE0079CA; |
rommem[2653] = 65'h131FFF7B902128009; |
rommem[2654] = 65'h031FFF80C02508009; |
rommem[2655] = 65'h09A00E73BBE107EA9; |
rommem[2656] = 65'h131FFF4C3BE00610A; |
rommem[2657] = 65'h00FEF0010BE00084A; |
rommem[2658] = 65'h067EF800867E30000; |
rommem[2659] = 65'h1460090D8E1800800; |
rommem[2660] = 65'h10810800866100000; |
rommem[2661] = 65'h047EF8008BE037FCF; |
rommem[2662] = 65'h137EF801047E30000; |
rommem[2663] = 65'h00212800931FFF8FF; |
rommem[2664] = 65'h10250800931FFF7B9; |
rommem[2665] = 65'h0BE10004931FFF80C; |
rommem[2666] = 65'h102908009BE905D48; |
rommem[2667] = 65'h10214800931FFF8DF; |
rommem[2668] = 65'h0BE10008831FFF936; |
rommem[2669] = 65'h131FFF936B2100313; |
rommem[2670] = 65'h0E0400000BE107FE8; |
rommem[2671] = 65'h0BE007E8A31FFF810; |
rommem[2672] = 65'h1E0C0003A1602800B; |
rommem[2673] = 65'h131FFF8F19A025398; |
rommem[2674] = 65'h1BE007A0A31FFEFFA; |
rommem[2675] = 65'h19A0253ACE0C0000D; |
rommem[2676] = 65'h131FFEFFA31FFF8F1; |
rommem[2677] = 65'h1E0C00023BE00782A; |
rommem[2678] = 65'h131FFF8F19A0253C4; |
rommem[2679] = 65'h10410140931FFF63A; |
rommem[2680] = 65'h1E0C00024BE00012A; |
rommem[2681] = 65'h131FFF8F19A0253DC; |
rommem[2682] = 65'h031FFF39331FFF63A; |
rommem[2683] = 65'h131FFF867BE00006A; |
rommem[2684] = 65'h1E0C0002CBE00010A; |
rommem[2685] = 65'h131FFF8F19A0253F8; |
rommem[2686] = 65'h0BE007DCA31FFF7AA; |
rommem[2687] = 65'h0BE0000AA31FFEFFA; |
rommem[2688] = 65'h10450080931FFF63A; |
rommem[2689] = 65'h0BE007ECA31FFF88D; |
rommem[2690] = 65'h033FFF7C731FFF7AA; |
rommem[2691] = 65'h031FFF63A31FFF83E; |
rommem[2692] = 65'h1BE10006931FFF80C; |
rommem[2693] = 65'h0BE0057AA9A00E73B; |
rommem[2694] = 65'h167E400000DEF0018; |
rommem[2695] = 65'h167E0800846009090; |
rommem[2696] = 65'h067E0801046009098; |
rommem[2697] = 65'h0660F1098660010A8; |
rommem[2698] = 65'h131FFF7B9BE0073EA; |
rommem[2699] = 65'h1BE10006946009098; |
rommem[2700] = 65'h0BE0055EA9A00E758; |
rommem[2701] = 65'h147E08010021F0009; |
rommem[2702] = 65'h047E0800866009098; |
rommem[2703] = 65'h047E4000066009090; |
rommem[2704] = 65'h031FFF83109EF0018; |
rommem[2705] = 65'h131FFF83EBE007C4A; |
rommem[2706] = 65'h0660090A831FFF798; |
rommem[2707] = 65'h09A0551989A04D063; |
rommem[2708] = 65'h131FFF63A33FFF486; |
rommem[2709] = 65'h09A04D066660090B8; |
rommem[2710] = 65'h033FFF4869A0551A8; |
rommem[2711] = 65'h0BE00004A31FFF63A; |
rommem[2712] = 65'h0660090B0E0400001; |
rommem[2713] = 65'h1660110C046011090; |
rommem[2714] = 65'h005E00C09660410C8; |
rommem[2715] = 65'h0BE00004A460310A8; |
rommem[2716] = 65'h0463100000A318028; |
rommem[2717] = 65'h1BE237FA9BE2000E8; |
rommem[2718] = 65'h10A31002804300409; |
rommem[2719] = 65'h031FFF82F05E00C09; |
rommem[2720] = 65'h1BE00786A09EF0028; |
rommem[2721] = 65'h031FFF6ECE0400000; |
rommem[2722] = 65'h19A00E717BE100069; |
rommem[2723] = 65'h102148009BE00504A; |
rommem[2724] = 65'h1BE100069460090A8; |
rommem[2725] = 65'h0BE004FAA9A00E704; |
rommem[2726] = 65'h131FFF831BE148068; |
rommem[2727] = 65'h046908000BE007F4A; |
rommem[2728] = 65'h004110403460110B0; |
rommem[2729] = 65'h1460190B866908000; |
rommem[2730] = 65'h1BE1180E0BE200063; |
rommem[2731] = 65'h0BE1180A3BE00004A; |
rommem[2732] = 65'h166041090460410C0; |
rommem[2733] = 65'h0BE00752A460410C8; |
rommem[2734] = 65'h0BE0074EA31FFF831; |
rommem[2735] = 65'h0BE106AC931FFF63A; |
rommem[2736] = 65'h0E040000002848009; |
rommem[2737] = 65'h1BE104B6331FFF821; |
rommem[2738] = 65'h1460F10A0BE0069EA; |
rommem[2739] = 65'h16604109047E40010; |
rommem[2740] = 65'h10BEF002847E40008; |
rommem[2741] = 65'h067E280200FEF0028; |
rommem[2742] = 65'h031FFF86767E40000; |
rommem[2743] = 65'h1E0400001BE0000CA; |
rommem[2744] = 65'h1BE1003E831FFF6EC; |
rommem[2745] = 65'h1BE0001AA02150009; |
rommem[2746] = 65'h1E040000167E40008; |
rommem[2747] = 65'h1BE10006931FFF6EC; |
rommem[2748] = 65'h1BE0049EA9A00E6E7; |
rommem[2749] = 65'h04082800002150009; |
rommem[2750] = 65'h047E0800860800000; |
rommem[2751] = 65'h06082800031FFF851; |
rommem[2752] = 65'h14600909067E40008; |
rommem[2753] = 65'h0E07FFFFF67E08010; |
rommem[2754] = 65'h1660F10A066009090; |
rommem[2755] = 65'h0E040003A67E50018; |
rommem[2756] = 65'h19A04111B31FFF7D8; |
rommem[2757] = 65'h047E5001831FFF63A; |
rommem[2758] = 65'h047E0801066A08000; |
rommem[2759] = 65'h147E4000866009090; |
rommem[2760] = 65'h19A025650E0C0002C; |
rommem[2761] = 65'h0BE007B2A31FFF8F1; |
rommem[2762] = 65'h109EF002847E28020; |
rommem[2763] = 65'h04080800033FFF504; |
rommem[2764] = 65'h031FFF798B01F6C0D; |
rommem[2765] = 65'h19A025410E0C0002C; |
rommem[2766] = 65'h1BE007F8A31FFF8F1; |
rommem[2767] = 65'h046044E60BE006CCA; |
rommem[2768] = 65'h031FFF395E040000D; |
rommem[2769] = 65'h1BE107FE231FFF396; |
rommem[2770] = 65'h0B0100D1AB0100E40; |
rommem[2771] = 65'h031FFF5B4B21FFC3A; |
rommem[2772] = 65'h00610900160808000; |
rommem[2773] = 65'h00A84000260808001; |
rommem[2774] = 65'h1BE107FE231FFF396; |
rommem[2775] = 65'h10A84000160808000; |
rommem[2776] = 65'h1BE007E2AB21FFC0D; |
rommem[2777] = 65'h1BE00416A660410D0; |
rommem[2778] = 65'h167E280000FEF0018; |
rommem[2779] = 65'h167EF801067E30008; |
rommem[2780] = 65'h0E1400000E1800003; |
rommem[2781] = 65'h1BE107FE231FFF396; |
rommem[2782] = 65'h00652880031FFF5C5; |
rommem[2783] = 65'h1BE037F6F04509409; |
rommem[2784] = 65'h147EF801002508009; |
rommem[2785] = 65'h147E2800047E30008; |
rommem[2786] = 65'h0A410023937EF8018; |
rommem[2787] = 65'h10E1080300E108007; |
rommem[2788] = 65'h137EF80001410800F; |
rommem[2789] = 65'h1460490D046044E60; |
rommem[2790] = 65'h1BE8481C531FFF5E1; |
rommem[2791] = 65'h131FFF395E040003A; |
rommem[2792] = 65'h14A8100014A808000; |
rommem[2793] = 65'h10411040906211000; |
rommem[2794] = 65'h131FFF5E90A840002; |
rommem[2795] = 65'h00A84000140808000; |
rommem[2796] = 65'h131FFF395B01FF40D; |
rommem[2797] = 65'h1E0400040BE007F8A; |
rommem[2798] = 65'h031FFF5E131FFF395; |
rommem[2799] = 65'h031FFF395E040001A; |
rommem[2800] = 65'h10FEF0008BE003BCA; |
rommem[2801] = 65'h0E040000D67EF8000; |
rommem[2802] = 65'h1E040000A31FFF395; |
rommem[2803] = 65'h147EF800031FFF395; |
rommem[2804] = 65'h10DEF001037EF8008; |
rommem[2805] = 65'h067E2800867EF8000; |
rommem[2806] = 65'h1021200099A02910F; |
rommem[2807] = 65'h10642080102408009; |
rommem[2808] = 65'h16050800031FFF5FD; |
rommem[2809] = 65'h1125091000E528001; |
rommem[2810] = 65'h10A528001BE107F41; |
rommem[2811] = 65'h131FFF39540508000; |
rommem[2812] = 65'h0BE107F801250910F; |
rommem[2813] = 65'h047EF800047E28008; |
rommem[2814] = 65'h01410800F37EF8010; |
rommem[2815] = 65'h008108007A010020A; |
rommem[2816] = 65'h137EF80000A108030; |
rommem[2817] = 65'h131FFF63A0FEF0008; |
rommem[2818] = 65'h19A025834E0C0002C; |
rommem[2819] = 65'h067E0800031FFF8F1; |
rommem[2820] = 65'h147E1000031FFF63A; |
rommem[2821] = 65'h10BEF000860208000; |
rommem[2822] = 65'h09A00E680BE005F0A; |
rommem[2823] = 65'h00FEF0008BE00374A; |
rommem[2824] = 65'h1E0C0002C31FFF63A; |
rommem[2825] = 65'h031FFF8F19A025834; |
rommem[2826] = 65'h031FFF63A67E08000; |
rommem[2827] = 65'h16220800047E10000; |
rommem[2828] = 65'h033FFF5040BEF0008; |
rommem[2829] = 65'h131FFF63A0FEF0008; |
rommem[2830] = 65'h19A025834E0C0002C; |
rommem[2831] = 65'h067E0800031FFF8F1; |
rommem[2832] = 65'h147E1000031FFF63A; |
rommem[2833] = 65'h00BEF000864208000; |
rommem[2834] = 65'h10FEF000833FFF504; |
rommem[2835] = 65'h1E0C0002C31FFF63A; |
rommem[2836] = 65'h031FFF8F19A025834; |
rommem[2837] = 65'h031FFF63A67E08000; |
rommem[2838] = 65'h06620800047E10000; |
rommem[2839] = 65'h033FFF5040BEF0008; |
rommem[2840] = 65'h131FFF63A0FEF0008; |
rommem[2841] = 65'h19A00E6D5BE100069; |
rommem[2842] = 65'h167E40000BE00328A; |
rommem[2843] = 65'h147E40000341F8000; |
rommem[2844] = 65'h1BE00596A0BEF0008; |
rommem[2845] = 65'h167EF80000FEF0010; |
rommem[2846] = 65'h167E0800431FFF648; |
rommem[2847] = 65'h09A0552009A04D079; |
rommem[2848] = 65'h131FFF64833FFF486; |
rommem[2849] = 65'h10411040947E10008; |
rommem[2850] = 65'h147E08008BE007F2A; |
rommem[2851] = 65'h037EF801047EF8000; |
rommem[2852] = 65'h167EF80000FEF0010; |
rommem[2853] = 65'h067E0800831FFF66D; |
rommem[2854] = 65'h09A0551F09A04D075; |
rommem[2855] = 65'h031FFF66D33FFF486; |
rommem[2856] = 65'h00411040847E10008; |
rommem[2857] = 65'h147E08008BE007F2A; |
rommem[2858] = 65'h037EF801047EF8000; |
rommem[2859] = 65'h1A6100339A0100430; |
rommem[2860] = 65'h037EF8000E0400001; |
rommem[2861] = 65'h137EF8000E0400000; |
rommem[2862] = 65'h1A410035AA0100641; |
rommem[2863] = 65'h1A610037AA0100461; |
rommem[2864] = 65'h037EF8000E0400001; |
rommem[2865] = 65'h137EF8000E0400000; |
rommem[2866] = 65'h167EF80000FEF0008; |
rommem[2867] = 65'h031FFF65604100809; |
rommem[2868] = 65'h004200409BE100069; |
rommem[2869] = 65'h147EF800031FFF65C; |
rommem[2870] = 65'h00FEF001037EF8008; |
rommem[2871] = 65'h031FFF69C67EF8000; |
rommem[2872] = 65'h19A04D06B67E08008; |
rommem[2873] = 65'h133FFF4869A0551B8; |
rommem[2874] = 65'h031FFF69547E08008; |
rommem[2875] = 65'h1BE0002AABE208321; |
rommem[2876] = 65'h031FFF69547E08008; |
rommem[2877] = 65'h1BE00022ABE2082A9; |
rommem[2878] = 65'h031FFF69547E08008; |
rommem[2879] = 65'h1BE0001AABE208223; |
rommem[2880] = 65'h031FFF69547E08008; |
rommem[2881] = 65'h0BE00012ABE2081A2; |
rommem[2882] = 65'h031FFF69547E08008; |
rommem[2883] = 65'h1BE0000AABE208128; |
rommem[2884] = 65'h031FFF69547E08008; |
rommem[2885] = 65'h1BE00002ABE2080A0; |
rommem[2886] = 65'h0E040000047EF8000; |
rommem[2887] = 65'h047EF800037EF8010; |
rommem[2888] = 65'h137EF8010E0400001; |
rommem[2889] = 65'h147EF800047E08008; |
rommem[2890] = 65'h00FEF001037EF8010; |
rommem[2891] = 65'h167E0800867EF8000; |
rommem[2892] = 65'h047E1000831FFF69C; |
rommem[2893] = 65'h037EF801047EF8000; |
rommem[2894] = 65'h167EF80000FEF0010; |
rommem[2895] = 65'h09A025A90E0C0002D; |
rommem[2896] = 65'h1E040000031FFF8F1; |
rommem[2897] = 65'h0BE00020A67E00008; |
rommem[2898] = 65'h09A025A9CE0C0002B; |
rommem[2899] = 65'h131FFF6B931FFF8F1; |
rommem[2900] = 65'h1E0C0002B67E08008; |
rommem[2901] = 65'h031FFF8F19A025AC0; |
rommem[2902] = 65'h147E1000831FFF6B9; |
rommem[2903] = 65'h1BE007F2A04110402; |
rommem[2904] = 65'h09A025AD8E0C0002D; |
rommem[2905] = 65'h131FFF6B931FFF8F1; |
rommem[2906] = 65'h0BE007F0A02108006; |
rommem[2907] = 65'h147EF800047E08008; |
rommem[2908] = 65'h00FEF001037EF8010; |
rommem[2909] = 65'h031FFF6CF67EF8000; |
rommem[2910] = 65'h0E0C0002A67E08008; |
rommem[2911] = 65'h031FFF8F19A025B10; |
rommem[2912] = 65'h047E1000831FFF6CF; |
rommem[2913] = 65'h1BE007F2A04110419; |
rommem[2914] = 65'h09A025B30E0C0002F; |
rommem[2915] = 65'h031FFF6CF31FFF8F1; |
rommem[2916] = 65'h047E0800804100809; |
rommem[2917] = 65'h1BE007E2A0411041B; |
rommem[2918] = 65'h147EF800047E08008; |
rommem[2919] = 65'h10FEF001837EF8010; |
rommem[2920] = 65'h19A04D04267EF8000; |
rommem[2921] = 65'h133FFF4869A055150; |
rommem[2922] = 65'h031FFF6ECE0400000; |
rommem[2923] = 65'h046108000BE100088; |
rommem[2924] = 65'h137EF801847EF8000; |
rommem[2925] = 65'h0BE20004931FFF8FF; |
rommem[2926] = 65'h047EF800031FFF6DF; |
rommem[2927] = 65'h10FEF000837EF8018; |
rommem[2928] = 65'h0E0C0002867EF8000; |
rommem[2929] = 65'h031FFF8F19A025BA8; |
rommem[2930] = 65'h1E0C0002931FFF63A; |
rommem[2931] = 65'h031FFF8F19A025BA8; |
rommem[2932] = 65'h037EF800847EF8000; |
rommem[2933] = 65'h0BE001BAA9A00E5FD; |
rommem[2934] = 65'h067EF80000FEF0018; |
rommem[2935] = 65'h10410140967E28008; |
rommem[2936] = 65'h04A80800031FFF914; |
rommem[2937] = 65'h0B2100F40A0101740; |
rommem[2938] = 65'h131FFF6DF0A840001; |
rommem[2939] = 65'h10FEF001806108600; |
rommem[2940] = 65'h167EF800067E08008; |
rommem[2941] = 65'h047EF800031FFF793; |
rommem[2942] = 65'h1BE20804447E10008; |
rommem[2943] = 65'h19A0090D833FFF7C5; |
rommem[2944] = 65'h0BE0000AA04110405; |
rommem[2945] = 65'h1BE10006831FFF70D; |
rommem[2946] = 65'h031FFF73302510009; |
rommem[2947] = 65'h047EF800047E28008; |
rommem[2948] = 65'h147E2800837EF8018; |
rommem[2949] = 65'h0E040000047EF8000; |
rommem[2950] = 65'h00FEF001837EF8018; |
rommem[2951] = 65'h067E2801067EF8000; |
rommem[2952] = 65'h167E0800840808000; |
rommem[2953] = 65'h0BE10038831FFF65C; |
rommem[2954] = 65'h00A840001E1400005; |
rommem[2955] = 65'h131FFF66440808000; |
rommem[2956] = 65'h047E08008BE100168; |
rommem[2957] = 65'h04081000006109000; |
rommem[2958] = 65'h067E0800804110409; |
rommem[2959] = 65'h00A840001BE02FEEF; |
rommem[2960] = 65'h131FFF66440808000; |
rommem[2961] = 65'h140808000BE107FA9; |
rommem[2962] = 65'h0B0100324B0100425; |
rommem[2963] = 65'h00E840001E0400000; |
rommem[2964] = 65'h047E100080A840001; |
rommem[2965] = 65'h10411040906211000; |
rommem[2966] = 65'h047E2801047EF8000; |
rommem[2967] = 65'h147EF800037EF8018; |
rommem[2968] = 65'h0E040000047E28010; |
rommem[2969] = 65'h10FEF001037EF8018; |
rommem[2970] = 65'h167E3800867EF8000; |
rommem[2971] = 65'h046338000460190D8; |
rommem[2972] = 65'h0BE138128BE700108; |
rommem[2973] = 65'h0460390F808318008; |
rommem[2974] = 65'h1E07FE650BE33FF60; |
rommem[2975] = 65'h0BE00112AF04FFFFF; |
rommem[2976] = 65'h166308000BE2000C8; |
rommem[2977] = 65'h047EF80000A308008; |
rommem[2978] = 65'h137EF801047E38008; |
rommem[2979] = 65'h147E3800847EF8000; |
rommem[2980] = 65'h1E04000000BEF0010; |
rommem[2981] = 65'h131FFF6DF37EF8000; |
rommem[2982] = 65'h147EF80004A108000; |
rommem[2983] = 65'h131FFF6DF37EF8018; |
rommem[2984] = 65'h14C1080001410FFFE; |
rommem[2985] = 65'h137EF801847EF8000; |
rommem[2986] = 65'h11410FFFC31FFF6DF; |
rommem[2987] = 65'h047EF80004E108000; |
rommem[2988] = 65'h131FFF6DF37EF8018; |
rommem[2989] = 65'h1461080001410FFF8; |
rommem[2990] = 65'h137EF801847EF8000; |
rommem[2991] = 65'h067E4000831FFF6DF; |
rommem[2992] = 65'h0342F800046011028; |
rommem[2993] = 65'h147EF800047E40008; |
rommem[2994] = 65'h131FFF6DF37EF8018; |
rommem[2995] = 65'h1BE100100BE100168; |
rommem[2996] = 65'h10000005004100809; |
rommem[2997] = 65'h131FFF775020088A8; |
rommem[2998] = 65'h147EF80000A108001; |
rommem[2999] = 65'h19A00E6C137EF8018; |
rommem[3000] = 65'h100000050BE000B0A; |
rommem[3001] = 65'h047EF8000020088A8; |
rommem[3002] = 65'h10FEF002037EF8018; |
rommem[3003] = 65'h167E2800867E18000; |
rommem[3004] = 65'h067E3801867E30010; |
rommem[3005] = 65'h10452940A1603803F; |
rommem[3006] = 65'h1061082020463180A; |
rommem[3007] = 65'h10663020014118001; |
rommem[3008] = 65'h11410FFFE04619809; |
rommem[3009] = 65'h104611805BE230047; |
rommem[3010] = 65'h102608009BE03FF2F; |
rommem[3011] = 65'h147E2800847E18000; |
rommem[3012] = 65'h047E3801847E30010; |
rommem[3013] = 65'h031FFF6DF37EF8020; |
rommem[3014] = 65'h047EF800002108007; |
rommem[3015] = 65'h131FFF6DF37EF8018; |
rommem[3016] = 65'h047EF800002108008; |
rommem[3017] = 65'h0460090D837EF8018; |
rommem[3018] = 65'h004110405460110D0; |
rommem[3019] = 65'h137EF801847EF8000; |
rommem[3020] = 65'h167EF80000FEF0010; |
rommem[3021] = 65'h131FFF6ECE0400001; |
rommem[3022] = 65'h09A00E6AABE100069; |
rommem[3023] = 65'h167E08008BE00054A; |
rommem[3024] = 65'h19A025EA4E0C0003D; |
rommem[3025] = 65'h031FFF63A31FFF8F1; |
rommem[3026] = 65'h16620800047E10008; |
rommem[3027] = 65'h147EF800004200409; |
rommem[3028] = 65'h0BE0003CA37EF8010; |
rommem[3029] = 65'h167EF80000FEF0008; |
rommem[3030] = 65'h09A025EC4E0C0003A; |
rommem[3031] = 65'h00BEF000831FFF8F1; |
rommem[3032] = 65'h1E0C0000DBE0020AA; |
rommem[3033] = 65'h031FFF8F19A025EDC; |
rommem[3034] = 65'h10BEF000847EF8000; |
rommem[3035] = 65'h047EF8000BE001EAA; |
rommem[3036] = 65'h00FEF000837EF8008; |
rommem[3037] = 65'h031FFF91467EF8000; |
rommem[3038] = 65'h1B010040D40808000; |
rommem[3039] = 65'h1F04FFFFFE07FE784; |
rommem[3040] = 65'h047EF800033FFF7C8; |
rommem[3041] = 65'h09A00E76F37EF8008; |
rommem[3042] = 65'h09A00E605BE00008A; |
rommem[3043] = 65'h19A00E5FDBE00004A; |
rommem[3044] = 65'h14600909031FFF940; |
rommem[3045] = 65'h0B01D9AFFBE107E88; |
rommem[3046] = 65'h16080000040828000; |
rommem[3047] = 65'h031FFF8DF46009090; |
rommem[3048] = 65'h16082800004101809; |
rommem[3049] = 65'h131FFF393E040003F; |
rommem[3050] = 65'h10E608001E0800000; |
rommem[3051] = 65'h133FFF3BE31FFF851; |
rommem[3052] = 65'h167EF80000FEF0010; |
rommem[3053] = 65'h031FFF39367E28008; |
rommem[3054] = 65'h060009046E0400001; |
rommem[3055] = 65'h031FFF393E0400020; |
rommem[3056] = 65'h1F2000000E200111B; |
rommem[3057] = 65'h1BE107FE831FFF936; |
rommem[3058] = 65'h0B0101418B0100B08; |
rommem[3059] = 65'h0A81FFB20B010020D; |
rommem[3060] = 65'h00884000160808000; |
rommem[3061] = 65'h14080FFFF31FFF393; |
rommem[3062] = 65'h01280916AB010190D; |
rommem[3063] = 65'h1E0400008BE107E80; |
rommem[3064] = 65'h0E040002031FFF393; |
rommem[3065] = 65'h11280911B31FFF393; |
rommem[3066] = 65'h1E0400008BE107DC2; |
rommem[3067] = 65'h00C84000131FFF393; |
rommem[3068] = 65'h004800409BE007D4A; |
rommem[3069] = 65'h0BE5001080E12911B; |
rommem[3070] = 65'h031FFF393E0400008; |
rommem[3071] = 65'h031FFF393E0400020; |
rommem[3072] = 65'h031FFF393E0400008; |
rommem[3073] = 65'h19A04111BBE02FF4F; |
rommem[3074] = 65'h0E0400000BE007BCA; |
rommem[3075] = 65'h1E040000A60009046; |
rommem[3076] = 65'h147EF800031FFF393; |
rommem[3077] = 65'h037EF801047E28008; |
rommem[3078] = 65'h19A00E694AC1003FF; |
rommem[3079] = 65'h04604CE60BE00774A; |
rommem[3080] = 65'h10EA50001460510D0; |
rommem[3081] = 65'h04A918000BE950127; |
rommem[3082] = 65'h0062110004A910001; |
rommem[3083] = 65'h0BE11012704218809; |
rommem[3084] = 65'h10410840ABE1100C8; |
rommem[3085] = 65'h00494A40A37EF8000; |
rommem[3086] = 65'h137EF80000410840A; |
rommem[3087] = 65'h037EF8000E0400001; |
rommem[3088] = 65'h14A9100000A948002; |
rommem[3089] = 65'h0B22FFE0D0A948001; |
rommem[3090] = 65'h040120000BE007D8A; |
rommem[3091] = 65'h00810800160220000; |
rommem[3092] = 65'h1BE11FF8908210001; |
rommem[3093] = 65'h00C10800137EF8000; |
rommem[3094] = 65'h0401200000C210001; |
rommem[3095] = 65'h1BE11FF8960220000; |
rommem[3096] = 65'h147E0800037EF8000; |
rommem[3097] = 65'h1BE100148660090A8; |
rommem[3098] = 65'h0660090C847E08020; |
rommem[3099] = 65'h0660090C047E08018; |
rommem[3100] = 65'h1660090B847E08010; |
rommem[3101] = 65'h0660090B047E08008; |
rommem[3102] = 65'h137EF800837EF8028; |
rommem[3103] = 65'h00A108028460090F8; |
rommem[3104] = 65'h1460090A8BFE0F0A4; |
rommem[3105] = 65'h10FEF0028BE100188; |
rommem[3106] = 65'h1460090C867E08000; |
rommem[3107] = 65'h1460090C067E08020; |
rommem[3108] = 65'h0460090B867E08018; |
rommem[3109] = 65'h0460090B067E08010; |
rommem[3110] = 65'h137EF800067E08008; |
rommem[3111] = 65'h167E080000FEF0008; |
rommem[3112] = 65'h00DEF002037EF8000; |
rommem[3113] = 65'h167E2800867E28000; |
rommem[3114] = 65'h167EF801867E38010; |
rommem[3115] = 65'h00223000902128009; |
rommem[3116] = 65'h10A5280014A538000; |
rommem[3117] = 65'h102708009BE7300C8; |
rommem[3118] = 65'h0B27FFB0D31FFF393; |
rommem[3119] = 65'h131FFF393E040000A; |
rommem[3120] = 65'h10250800902710009; |
rommem[3121] = 65'h147E3801047EF8018; |
rommem[3122] = 65'h147E2800047E28008; |
rommem[3123] = 65'h00FEF000837EF8020; |
rommem[3124] = 65'h0E0C0002267EF8000; |
rommem[3125] = 65'h0F10FFFFFE13FE1D0; |
rommem[3126] = 65'h1E080002231FFF8F1; |
rommem[3127] = 65'h031FFF85104800409; |
rommem[3128] = 65'h0B2200F0A04102009; |
rommem[3129] = 65'h0BE00070A0BEF0008; |
rommem[3130] = 65'h1E13FE1E8E0C00027; |
rommem[3131] = 65'h031FFF8F1F10FFFFF; |
rommem[3132] = 65'h0BE007EAAE0800027; |
rommem[3133] = 65'h1E13FE20CE0C0005F; |
rommem[3134] = 65'h031FFF8F1F10FFFFF; |
rommem[3135] = 65'h031FFF393E040000D; |
rommem[3136] = 65'h10BEF000847EF8000; |
rommem[3137] = 65'h147EF800035F00004; |
rommem[3138] = 65'h00FEF000837EF8008; |
rommem[3139] = 65'h0E040000D67EF8000; |
rommem[3140] = 65'h1E040000A31FFF393; |
rommem[3141] = 65'h147EF800031FFF393; |
rommem[3142] = 65'h10FEF002837EF8008; |
rommem[3143] = 65'h167E2800867E18000; |
rommem[3144] = 65'h067E3801867E30010; |
rommem[3145] = 65'h01603910067EF8020; |
rommem[3146] = 65'h00222800902130009; |
rommem[3147] = 65'h002108006BE100063; |
rommem[3148] = 65'h11601800A0E528001; |
rommem[3149] = 65'h11C10800A0411881C; |
rommem[3150] = 65'h0607100000A210030; |
rommem[3151] = 65'h10E5280010A738001; |
rommem[3152] = 65'h1BE500082BE107F29; |
rommem[3153] = 65'h031FFF393E0400020; |
rommem[3154] = 65'h1BE600063BE02FFCF; |
rommem[3155] = 65'h131FFF393E040002D; |
rommem[3156] = 65'h1407080000E738001; |
rommem[3157] = 65'h11270910031FFF393; |
rommem[3158] = 65'h147EF8020BE107F87; |
rommem[3159] = 65'h047E3001047E38018; |
rommem[3160] = 65'h147E1800047E28008; |
rommem[3161] = 65'h00FEF002837EF8028; |
rommem[3162] = 65'h167E3000867E28000; |
rommem[3163] = 65'h167E4001867E38010; |
rommem[3164] = 65'h0E1C0110067EF8020; |
rommem[3165] = 65'h104101809F1C00000; |
rommem[3166] = 65'h004101009E1400014; |
rommem[3167] = 65'h102420006BE400083; |
rommem[3168] = 65'h1E20000140C528001; |
rommem[3169] = 65'h11410800F04400409; |
rommem[3170] = 65'h00A108037A010030A; |
rommem[3171] = 65'h008108030BE00004A; |
rommem[3172] = 65'h00873800160708000; |
rommem[3173] = 65'h0BE4000480C528001; |
rommem[3174] = 65'h1BE500082BE047ECF; |
rommem[3175] = 65'h031FFF393E0400020; |
rommem[3176] = 65'h1BE600063BE02FFCF; |
rommem[3177] = 65'h131FFF393E040002D; |
rommem[3178] = 65'h0407080000C738001; |
rommem[3179] = 65'h11270910031FFF393; |
rommem[3180] = 65'h047EF8020BE107F83; |
rommem[3181] = 65'h147E3801047E40018; |
rommem[3182] = 65'h147E2800047E30008; |
rommem[3183] = 65'h10FEF001037EF8028; |
rommem[3184] = 65'h067EF800867E28000; |
rommem[3185] = 65'h14A50FFFE08128002; |
rommem[3186] = 65'h0062110004A517FFF; |
rommem[3187] = 65'h0E080000004110409; |
rommem[3188] = 65'h1E040002031FFF88D; |
rommem[3189] = 65'h1E080000031FFF393; |
rommem[3190] = 65'h131FFF85104500409; |
rommem[3191] = 65'h047E2800047EF8008; |
rommem[3192] = 65'h00FEF001037EF8010; |
rommem[3193] = 65'h167E0800867EF8000; |
rommem[3194] = 65'h04080800031FFF914; |
rommem[3195] = 65'h147E08008BE3080A8; |
rommem[3196] = 65'h10BEF001047EF8000; |
rommem[3197] = 65'h00884000134400000; |
rommem[3198] = 65'h147EF800047E08008; |
rommem[3199] = 65'h00FEF000837EF8010; |
rommem[3200] = 65'h031FFF91467EF8000; |
rommem[3201] = 65'h0E0800000E0400000; |
rommem[3202] = 65'h0A8300D3040818000; |
rommem[3203] = 65'h1E13FFFFFAE300C39; |
rommem[3204] = 65'h1BE120066F10FFFFF; |
rommem[3205] = 65'h1BE0057AAE07FE629; |
rommem[3206] = 65'h1088400011A10800A; |
rommem[3207] = 65'h0041184021431800F; |
rommem[3208] = 65'h0BE007E6A08210001; |
rommem[3209] = 65'h037EF800847EF8000; |
rommem[3210] = 65'h167E080000FEF0008; |
rommem[3211] = 65'h1B010022040808000; |
rommem[3212] = 65'h108840001B2100300; |
rommem[3213] = 65'h047E08000BE007F8A; |
rommem[3214] = 65'h00FEF000837EF8008; |
rommem[3215] = 65'h1E200111B67EF8000; |
rommem[3216] = 65'h040808000E0C00000; |
rommem[3217] = 65'h0B0100D0D08840001; |
rommem[3218] = 65'h0B0100527B0100622; |
rommem[3219] = 65'h131FFF932BE307F69; |
rommem[3220] = 65'h0BE007F0A6080FFFF; |
rommem[3221] = 65'h004100C09BE300069; |
rommem[3222] = 65'h0BE30FE89BE007EAA; |
rommem[3223] = 65'h0BE007E4AE0C00000; |
rommem[3224] = 65'h037EF800847EF8000; |
rommem[3225] = 65'h1A610027AA0100361; |
rommem[3226] = 65'h037EF80000C108020; |
rommem[3227] = 65'h167EF80000FEF0008; |
rommem[3228] = 65'h0B01003FF31FFF394; |
rommem[3229] = 65'h133FFF3BEB2100303; |
rommem[3230] = 65'h047EF80000410840A; |
rommem[3231] = 65'h0E07FE60B37EF8008; |
rommem[3232] = 65'h067E280000FEF0010; |
rommem[3233] = 65'h00212800967EF8008; |
rommem[3234] = 65'h14050FFFF08528001; |
rommem[3235] = 65'h131FFF393BE100068; |
rommem[3236] = 65'h002508009BE007F8A; |
rommem[3237] = 65'h047E2800047EF8008; |
rommem[3238] = 65'h00FEF001037EF8010; |
rommem[3239] = 65'h067EF800867E28000; |
rommem[3240] = 65'h10A52800102128009; |
rommem[3241] = 65'h1BE1000684050FFFF; |
rommem[3242] = 65'h1BE007F8A31FFF395; |
rommem[3243] = 65'h147EF800802508009; |
rommem[3244] = 65'h137EF801047E28000; |
rommem[3245] = 65'h033FFEE0833FFEF47; |
rommem[3246] = 65'h0B01003FF31FFED54; |
rommem[3247] = 65'h037EF80001410807F; |
rommem[3248] = 65'h137EF80000410840A; |
rommem[3249] = 65'h031FFEED933FFED0C; |
rommem[3250] = 65'h137EF8000BE00740A; |
rommem[3251] = 65'h037EF800037EF8000; |
rommem[3252] = 65'h1BE004BEABE00738A; |
rommem[3253] = 65'h047EF8000460F1088; |
rommem[3254] = 65'h0C44E4100BCBD3CBD; |
rommem[3255] = 65'h10000000000D24F00; |
rommem[3256] = 65'h0726F747061520A0D; |
rommem[3257] = 65'h020796E6954203436; |
rommem[3258] = 65'h13176204349534142; |
rommem[3259] = 65'h0202943280A0D302E; |
rommem[3260] = 65'h06F52202032313032; |
rommem[3261] = 65'h06E69462074726562; |
rommem[3262] = 65'h10A0D000A0A0D6863; |
rommem[3263] = 65'h1616857000A0D4B4F; |
rommem[3264] = 65'h1726F53000A0D3F74; |
rommem[3265] = 65'h16F43000A0D2E7972; |
rommem[3266] = 65'h04C4620746361706D; |
rommem[3267] = 65'h16461657220485341; |
rommem[3268] = 65'h00A0D726F72726520; |
rommem[3269] = 65'h0207265626D754E00; |
rommem[3270] = 65'h062206F6F74207369; |
rommem[3271] = 65'h1766944000A0D6769; |
rommem[3272] = 65'h17962206E6F697369; |
rommem[3273] = 65'h1000A0D6F72657A20; |
rommem[3274] = 65'h17620666F2074754F; |
rommem[3275] = 65'h020656C6261697261; |
rommem[3276] = 65'h0000A0D6563617073; |
rommem[3277] = 65'h16620736574796220; |
rommem[3278] = 65'h00A0D000A0D656572; |
rommem[3279] = 65'h1000A0D7964616552; |
rommem[3280] = 65'h16E69746365707845; |
rommem[3281] = 65'h06D6D6F6320612067; |
rommem[3282] = 65'h0656E694C000A0D61; |
rommem[3283] = 65'h0207265626D756E20; |
rommem[3284] = 65'h00D676962206F6F74; |
rommem[3285] = 65'h0746365707845000A; |
rommem[3286] = 65'h16176206120676E69; |
rommem[3287] = 65'h10A0D656C62616972; |
rommem[3288] = 65'h164616220444E5200; |
rommem[3289] = 65'h174656D6172617020; |
rommem[3290] = 65'h1535953000A0D7265; |
rommem[3291] = 65'h06464612064616220; |
rommem[3292] = 65'h049000A0D73736572; |
rommem[3293] = 65'h1707865205455504E; |
rommem[3294] = 65'h06120676E69746365; |
rommem[3295] = 65'h16C62616972617620; |
rommem[3296] = 65'h05458454E000A0D65; |
rommem[3297] = 65'h174756F6874697720; |
rommem[3298] = 65'h14E000A0D524F4620; |
rommem[3299] = 65'h16570786520545845; |
rommem[3300] = 65'h1206120676E697463; |
rommem[3301] = 65'h02064656E69666564; |
rommem[3302] = 65'h0656C626169726176; |
rommem[3303] = 65'h12F4F544F47000A0D; |
rommem[3304] = 65'h06162204255534F47; |
rommem[3305] = 65'h16E20656E696C2064; |
rommem[3306] = 65'h0000A0D7265626D75; |
rommem[3307] = 65'h177204E5255544552; |
rommem[3308] = 65'h1472074756F687469; |
rommem[3309] = 65'h050000A0D4255534F; |
rommem[3310] = 65'h069206D6172676F72; |
rommem[3311] = 65'h06962206F6F742073; |
rommem[3312] = 65'h172747845000A0D67; |
rommem[3313] = 65'h16361726168632061; |
rommem[3314] = 65'h0206E6F2073726574; |
rommem[3315] = 65'h06E676920656E696C; |
rommem[3316] = 65'h000000A0D6465726F; |
rommem[3317] = 65'h00000000033FFF096; |
rommem[3318] = 65'h1E6AA555504002009; |
rommem[3319] = 65'h1F68AAAA5EE9556AA; |
rommem[3320] = 65'h166808000040D0409; |
rommem[3321] = 65'h004110C0646810000; |
rommem[3322] = 65'h10A840008BE3000C9; |
rommem[3323] = 65'h0EE800010E6800000; |
rommem[3324] = 65'h0BE307F00048D0C06; |
rommem[3325] = 65'h00400200904802809; |
rommem[3326] = 65'h0E6AA555546810000; |
rommem[3327] = 65'h1F68AAAA5EE9556AA; |
rommem[3328] = 65'h1BE3000C9042D0C06; |
rommem[3329] = 65'h0E680000008840008; |
rommem[3330] = 65'h1048D0C06EE800004; |
rommem[3331] = 65'h0BE850389BE307EC0; |
rommem[3332] = 65'h1E695AAAA04002009; |
rommem[3333] = 65'h1F685555AEEAAA955; |
rommem[3334] = 65'h166808000040D0409; |
rommem[3335] = 65'h004110C0646810000; |
rommem[3336] = 65'h008840008BE3000C9; |
rommem[3337] = 65'h0EE800004E6800000; |
rommem[3338] = 65'h0BE307F00048D0C06; |
rommem[3339] = 65'h10400200904802C09; |
rommem[3340] = 65'h0E695AAAA46810000; |
rommem[3341] = 65'h1F685555AEEAAA955; |
rommem[3342] = 65'h1BE3000C9042D0C06; |
rommem[3343] = 65'h0E680000008840008; |
rommem[3344] = 65'h1048D0C06EE800004; |
rommem[3345] = 65'h0BE858048BE307EC0; |
rommem[3346] = 65'h1BE8500480485A014; |
rommem[3347] = 65'h16604040004852014; |
rommem[3348] = 65'h09A00E92B37EF8000; |
rommem[3349] = 65'h0020085E831FFEFE7; |
rommem[3350] = 65'h00000002831FFF019; |
rommem[3351] = 65'h09A00E91033FFEC07; |
rommem[3352] = 65'h00200862831FFEFE7; |
rommem[3353] = 65'h19A00E92431FFF019; |
rommem[3354] = 65'h0020085E831FFEFE7; |
rommem[3355] = 65'h131FFF93F31FFF019; |
rommem[3356] = 65'h102200FA91601001F; |
rommem[3357] = 65'h0DE000000DE000000; |
rommem[3358] = 65'h002008FE8DE000000; |
rommem[3359] = 65'h131FFF93F31FFF019; |
rommem[3360] = 65'h100000028BE017F2F; |
rommem[3361] = 65'h00000000033FFEC07; |
rommem[3362] = 65'h07375622061746144; |
rommem[3363] = 65'h16120726F72726520; |
rommem[3364] = 65'h04350452000203A74; |
rommem[3365] = 65'h1662072724500203A; |
rommem[3366] = 65'h020676E6968637465; |
rommem[3367] = 65'h17463757274736E69; |
rommem[3368] = 65'h0203A7461206E6F69; |
rommem[3369] = 65'h00000000000000000; |
rommem[3370] = 65'h167E080000FEF0020; |
rommem[3371] = 65'h067ED001067E10008; |
rommem[3372] = 65'h0E69C0FF067EF8018; |
rommem[3373] = 65'h16A0D0421EE800003; |
rommem[3374] = 65'h1E6BF0000B2101602; |
rommem[3375] = 65'h1460094006A0D0028; |
rommem[3376] = 65'h0660094000A108001; |
rommem[3377] = 65'h0EE800003E6900000; |
rommem[3378] = 65'h08220814C6A0D082D; |
rommem[3379] = 65'h09220814C0A108001; |
rommem[3380] = 65'h147ED001047EF8018; |
rommem[3381] = 65'h147E0800047E10008; |
rommem[3382] = 65'h10000000F0BEF0020; |
rommem[3383] = 65'h0DE000000DE000000; |
rommem[3384] = 65'h001900020DE000000; |
rommem[3385] = 65'h04600B000B2100403; |
rommem[3386] = 65'h1BE0001AA31FFEE3B; |
rommem[3387] = 65'h04600B010B2100408; |
rommem[3388] = 65'h1BE00012A341F8000; |
rommem[3389] = 65'h14600B018B210040D; |
rommem[3390] = 65'h0BE0000AA31FFF2B1; |
rommem[3391] = 65'h0B210030FB0118901; |
rommem[3392] = 65'h131FFEDF14600B008; |
rommem[3393] = 65'h147ED001047EF8018; |
rommem[3394] = 65'h147E0800047E10008; |
rommem[3395] = 65'h1019000200BEF0020; |
rommem[3396] = 65'h0E6BF000001900020; |
rommem[3397] = 65'h0E6BF00086A0D0413; |
rommem[3398] = 65'h0020080346A0D0813; |
rommem[3399] = 65'h002008128BE107FE9; |
rommem[3400] = 65'h1022002E902010228; |
rommem[3401] = 65'h00411040306211A01; |
rommem[3402] = 65'h11421000046110000; |
rommem[3403] = 65'h146110008022002A9; |
rommem[3404] = 65'h0022002E914210000; |
rommem[3405] = 65'h10200003502000034; |
rommem[3406] = 65'h06A0D0403E6BF0000; |
rommem[3407] = 65'h16A0D0803E6BF0008; |
rommem[3408] = 65'h00000000001900020; |
rommem[3409] = 65'h16A0D0803E6BF0008; |
rommem[3410] = 65'h00000000000000000; |
rommem[3411] = 65'h00000000000000000; |
rommem[4086] = 65'h1DE00000033FFFA89; |
rommem[4088] = 65'h1DE00000033FFFA89; |
rommem[4092] = 65'h0DE00000033FFFA88; |
rommem[4094] = 65'h0DE00000033FFEC07; |
rommem[4095] = 65'h000000000DE000000; |
rommem[1699] = 65'h06000181260001809; |
rommem[1700] = 65'h16000180A60001813; |
rommem[1701] = 65'h060009814E0400001; |
rommem[1702] = 65'h1E69C0A0137EF8000; |
rommem[1703] = 65'h06A0D0420EE800003; |
rommem[1704] = 65'h1BE107F8814108001; |
rommem[1705] = 65'h0EE800003E69C0A00; |
rommem[1706] = 65'h037EF80006A0D0420; |
rommem[1707] = 65'h1EE800003E69C0A01; |
rommem[1708] = 65'h0141080016A0D0420; |
rommem[1709] = 65'h037EF800004100439; |
rommem[1710] = 65'h167E100000FEF0020; |
rommem[1711] = 65'h167E2001067E18008; |
rommem[1712] = 65'h1E69C0A0667E28018; |
rommem[1713] = 65'h06A0D0820EE800003; |
rommem[1714] = 65'h0E69C0A0616210003; |
rommem[1715] = 65'h16A0D0828EE800003; |
rommem[1716] = 65'h1BE20016840011812; |
rommem[1717] = 65'h0E0C0006446021400; |
rommem[1718] = 65'h11421000A80011808; |
rommem[1719] = 65'h046029400BE2000C9; |
rommem[1720] = 65'h002520009BE42FF88; |
rommem[1721] = 65'h1BE00046ABE01FF4F; |
rommem[1722] = 65'h0BE20016840011813; |
rommem[1723] = 65'h0E0C0006446021400; |
rommem[1724] = 65'h11421001480011808; |
rommem[1725] = 65'h046029400BE2000C9; |
rommem[1726] = 65'h002520009BE42FF88; |
rommem[1727] = 65'h0BE0002EABE01FF4F; |
rommem[1728] = 65'h0BE2000C840011814; |
rommem[1729] = 65'h0BE20008840011815; |
rommem[1730] = 65'h01442008080021808; |
rommem[1731] = 65'h146021400BE407F89; |
rommem[1732] = 65'h0E69C0A01E0C00064; |
rommem[1733] = 65'h06A0D0820EE800003; |
rommem[1734] = 65'h0BE2000C914210020; |
rommem[1735] = 65'h1BE42FF4846029400; |
rommem[1736] = 65'h1BE01FF0F02520009; |
rommem[1737] = 65'h0E69C0A00BE00008A; |
rommem[1738] = 65'h16A0D0428EE800003; |
rommem[1739] = 65'h047E1800847E10000; |
rommem[1740] = 65'h047E2801847E20010; |
rommem[1741] = 65'h14202180037EF8020; |
rommem[1742] = 65'h00441100542011802; |
rommem[1743] = 65'h0E1000200BE4000A3; |
rommem[1744] = 65'h14201180004411003; |
rommem[1745] = 65'h137EF800004411005; |
rommem[1746] = 65'h167E100000FEF0020; |
rommem[1747] = 65'h167E2001067E18008; |
rommem[1748] = 65'h14201980067EF8018; |
rommem[1749] = 65'h1BE21852842011802; |
rommem[1750] = 65'h16A2184009A019600; |
rommem[1751] = 65'h0142101FF0A210001; |
rommem[1752] = 65'h14001180C62011802; |
rommem[1753] = 65'h14201980EBE2003A8; |
rommem[1754] = 65'h0BE41834331FFED9B; |
rommem[1755] = 65'h0400218096000180C; |
rommem[1756] = 65'h0E69C0A06BE400108; |
rommem[1757] = 65'h06A0D1020EE800003; |
rommem[1758] = 65'h1E69C0A0616420002; |
rommem[1759] = 65'h16A0D1028EE800003; |
rommem[1760] = 65'h1BE4001084002180A; |
rommem[1761] = 65'h0EE800003E69C0A06; |
rommem[1762] = 65'h1164200016A0D1020; |
rommem[1763] = 65'h0EE800003E69C0A06; |
rommem[1764] = 65'h14002180B6A0D1028; |
rommem[1765] = 65'h0E1000011BE4000A8; |
rommem[1766] = 65'h0EE800003E69C0A00; |
rommem[1767] = 65'h047E100006A0D1028; |
rommem[1768] = 65'h147E2001047E18008; |
rommem[1769] = 65'h037EF802047EF8018; |
rommem[1770] = 65'h047E10000E07FFFFF; |
rommem[1771] = 65'h147E2001047E18008; |
rommem[1772] = 65'h037EF802047EF8018; |
rommem[1773] = 65'h067E080000FEF0028; |
rommem[1774] = 65'h167E1801067E10008; |
rommem[1775] = 65'h167EF802067E20018; |
rommem[1776] = 65'h0EE800003E69C0A03; |
rommem[1777] = 65'h1BE1000A16A0D0420; |
rommem[1778] = 65'h1B0100D041410807F; |
rommem[1779] = 65'h1B0100710B0100B0C; |
rommem[1780] = 65'h147E1000847E08000; |
rommem[1781] = 65'h047E2001847E18010; |
rommem[1782] = 65'h037EF802847EF8020; |
rommem[1783] = 65'h16000980880009808; |
rommem[1784] = 65'h0BE007EEABE007F0A; |
rommem[1785] = 65'h0EE800003E69C0A00; |
rommem[1786] = 65'h1400118146A0D0420; |
rommem[1787] = 65'h0B2100413BE200108; |
rommem[1788] = 65'h160009815E0400001; |
rommem[1789] = 65'h0B2100311BE00016A; |
rommem[1790] = 65'h0BE00010A60001815; |
rommem[1791] = 65'h04201180060001815; |
rommem[1792] = 65'h06A3104109A019600; |
rommem[1793] = 65'h0142101FF0A210001; |
rommem[1794] = 65'h0E69C0A0162011800; |
rommem[1795] = 65'h06A0D0420EE800003; |
rommem[1796] = 65'h1BE107D2914108001; |
rommem[1797] = 65'h1BE1003C94000980C; |
rommem[1798] = 65'h04200981031FFED9B; |
rommem[1799] = 65'h1E0400001BE408360; |
rommem[1800] = 65'h1400098096000980C; |
rommem[1801] = 65'h0E69C0A06BE100108; |
rommem[1802] = 65'h06A0D0420EE800003; |
rommem[1803] = 65'h0E69C0A06141080FD; |
rommem[1804] = 65'h16A0D0428EE800003; |
rommem[1805] = 65'h1BE1001084000980A; |
rommem[1806] = 65'h0EE800003E69C0A06; |
rommem[1807] = 65'h0141080FE6A0D0420; |
rommem[1808] = 65'h0EE800003E69C0A06; |
rommem[1809] = 65'h14000980B6A0D0428; |
rommem[1810] = 65'h1E0400013BE1000A8; |
rommem[1811] = 65'h0EE800003E69C0A00; |
rommem[1812] = 65'h1BE0077EA6A0D0428; |
rommem[1813] = 65'h107AD0606020D0568; |
rommem[1814] = 65'h007AD100667AF2200; |
rommem[1815] = 65'h1E680800003AF0009; |
rommem[1816] = 65'h005ED7803EE800400; |
rommem[1817] = 65'h167EF80000FEF0008; |
rommem[1818] = 65'h1BFF07FE9020F80B4; |
rommem[1819] = 65'h1B0101003B0100D02; |
rommem[1820] = 65'h1B0101309B0101206; |
rommem[1821] = 65'h1B0101A0CB010170A; |
rommem[1822] = 65'h1B0103B14B010270C; |
rommem[1823] = 65'h0B0104016B0103D15; |
rommem[1824] = 65'h1B010441AB0104217; |
rommem[1825] = 65'h060011417BE0008CA; |
rommem[1826] = 65'h131FFF06F60019418; |
rommem[1827] = 65'h04A009417BE00084A; |
rommem[1828] = 65'h0BE0007EA4A011418; |
rommem[1829] = 65'h0BE0007AA31FFF02E; |
rommem[1830] = 65'h10220800962019410; |
rommem[1831] = 65'h1BE027FEF31FFF07F; |
rommem[1832] = 65'h002208009BE00070A; |
rommem[1833] = 65'h0BE01FFEF31FFF07F; |
rommem[1834] = 65'h0E69AE008BE00068A; |
rommem[1835] = 65'h16A0D0812EE800003; |
rommem[1836] = 65'h1EE800003E69AE00C; |
rommem[1837] = 65'h1E69AE0006A0D0C12; |
rommem[1838] = 65'h16A0D1012EE800003; |
rommem[1839] = 65'h1E69AE03C16008001; |
rommem[1840] = 65'h16A0D0412EE800003; |
rommem[1841] = 65'h0E69AE008BE0004CA; |
rommem[1842] = 65'h16A0D0812EE800003; |
rommem[1843] = 65'h1EE800003E69AE00C; |
rommem[1844] = 65'h0160080086A0D0C12; |
rommem[1845] = 65'h1EE800003E69AE03C; |
rommem[1846] = 65'h0DE0000006A0D0412; |
rommem[1847] = 65'h0DE000000DE000000; |
rommem[1848] = 65'h0EE800003E69AE038; |
rommem[1849] = 65'h1BE107FA96A0D0407; |
rommem[1850] = 65'h0EE800003E69AE034; |
rommem[1851] = 65'h1BE00022A6A0D0407; |
rommem[1852] = 65'h131FFF12202208009; |
rommem[1853] = 65'h002208009BE0001CA; |
rommem[1854] = 65'h031FFF13F02310009; |
rommem[1855] = 65'h102208009BE00014A; |
rommem[1856] = 65'h1BE0000EA31FFF130; |
rommem[1857] = 65'h131FFF16902208009; |
rommem[1858] = 65'h002208009BE00008A; |
rommem[1859] = 65'h1BE00002A31FFF14B; |
rommem[1860] = 65'h047EF8000020000B5; |
rommem[1861] = 65'h107AD0606020D0568; |
rommem[1862] = 65'h00180002147AF2200; |
rommem[1863] = 65'h107AD0606020D0568; |
rommem[1864] = 65'h007AD100667AF2200; |
rommem[1865] = 65'h1E680800003AF0009; |
rommem[1866] = 65'h005ED7803EE800400; |
rommem[1867] = 65'h167EF80000FEF0008; |
rommem[1868] = 65'h0BFF07FE9020F80F4; |
rommem[1869] = 65'h0B0100501B0100400; |
rommem[1870] = 65'h1BE0000EAB0100802; |
rommem[1871] = 65'h1BE0000AA31FFF54E; |
rommem[1872] = 65'h10231000902208009; |
rommem[1873] = 65'h1BE00002A31FFF56D; |
rommem[1874] = 65'h147EF8000020000F5; |
rommem[1875] = 65'h107AD0606020D0568; |
rommem[1876] = 65'h00180002147AF2200; |
rommem[1877] = 65'h107AD0606020D0568; |
rommem[1878] = 65'h007AD100667AF2200; |
rommem[1879] = 65'h1E680800003AF0009; |
rommem[1880] = 65'h005ED7803EE800400; |
rommem[1881] = 65'h167EF80000FEF0008; |
rommem[1882] = 65'h0B0100301B0100200; |
rommem[1883] = 65'h1BE00012A020085A8; |
rommem[1884] = 65'h1EE800003E69C0418; |
rommem[1885] = 65'h1DE0000006A0D002B; |
rommem[1886] = 65'h1EE800003E69C0400; |
rommem[1887] = 65'h0BE00002A6A0D0423; |
rommem[1888] = 65'h1020D056847EF8000; |
rommem[1889] = 65'h047AF220007AD0606; |
rommem[1890] = 65'h1020D056801800021; |
rommem[1891] = 65'h167AF220007AD0606; |
rommem[1892] = 65'h103AF000907AD1006; |
rommem[1893] = 65'h1EE800400E6808000; |
rommem[1894] = 65'h00FEF000805ED7803; |
rommem[1895] = 65'h1020F807467EF8000; |
rommem[1896] = 65'h0B0100700BFF07FE9; |
rommem[1897] = 65'h1B0100A02B0100801; |
rommem[1898] = 65'h0B0100C04B0100B03; |
rommem[1899] = 65'h0BE0001CAB0100D05; |
rommem[1900] = 65'h1BE00018A31FFEEEB; |
rommem[1901] = 65'h131FFEF0502208009; |
rommem[1902] = 65'h131FFEF07BE00012A; |
rommem[1903] = 65'h031FFEF1CBE0000EA; |
rommem[1904] = 65'h131FFEF20BE0000AA; |
rommem[1905] = 65'h131FFEF25BE00006A; |
rommem[1906] = 65'h102000075BE00002A; |
rommem[1907] = 65'h1020D056847EF8000; |
rommem[1908] = 65'h047AF220007AD0606; |
rommem[1909] = 65'h06000145001800021; |
rommem[1910] = 65'h0E040000160001451; |
rommem[1911] = 65'h137EF80006000941C; |
rommem[1912] = 65'h167E100000FEF0008; |
rommem[1913] = 65'h01410800F4A009450; |
rommem[1914] = 65'h0EE800003E69C0000; |
rommem[1915] = 65'h0E69C00026A0D0821; |
rommem[1916] = 65'h16A0D0029EE800003; |
rommem[1917] = 65'h00A10800160111440; |
rommem[1918] = 65'h1600094501410800F; |
rommem[1919] = 65'h0BE1100894A011451; |
rommem[1920] = 65'h11421000F0A210001; |
rommem[1921] = 65'h047E1000060011451; |
rommem[1922] = 65'h06000941C37EF8008; |
rommem[1923] = 65'h10FEF001037EF8000; |
rommem[1924] = 65'h167EF800867E10000; |
rommem[1925] = 65'h14A0094504A011451; |
rommem[1926] = 65'h14A209440BE110188; |
rommem[1927] = 65'h11421000F0A210001; |
rommem[1928] = 65'h14001141C60011451; |
rommem[1929] = 65'h1B210030DBE2000E8; |
rommem[1930] = 65'h0BE00008A31FFFD80; |
rommem[1931] = 65'h1BE00004A31FFF07F; |
rommem[1932] = 65'h147EF8008E07FFFFF; |
rommem[1933] = 65'h037EF801047E10000; |
rommem[1934] = 65'h14A0114504A009451; |
rommem[1935] = 65'h137EF800004110439; |
rommem[1936] = 65'h0EE800003E69C0000; |
rommem[1937] = 65'h1041004306A0D0421; |
rommem[1938] = 65'h10FEF001037EF8000; |
rommem[1939] = 65'h167EF800867E10000; |
rommem[1940] = 65'h0E69C0000E09C0000; |
rommem[1941] = 65'h16A0D0421EE800003; |
rommem[1942] = 65'h1E69C0002BE107FA1; |
rommem[1943] = 65'h16A0D0029EE800003; |
rommem[1944] = 65'h14001141C141080FF; |
rommem[1945] = 65'h0B210030DBE2000A8; |
rommem[1946] = 65'h0BE00004A31FFFD80; |
rommem[1947] = 65'h047E1000031FFF07F; |
rommem[1948] = 65'h137EF801047EF8008; |
rommem[1949] = 65'h1EE800002E6989680; |
rommem[1950] = 65'h1BE2000C8040D0809; |
rommem[1951] = 65'h0E69C03020E210001; |
rommem[1952] = 65'h16A0D0421EE800003; |
rommem[1953] = 65'h116008051BE107F60; |
rommem[1954] = 65'h0EE800003E69C0300; |
rommem[1955] = 65'h0160089C46A0D0429; |
rommem[1956] = 65'h0E6989680BE00800F; |
rommem[1957] = 65'h1040D0809EE800002; |
rommem[1958] = 65'h00E210001BE2000C8; |
rommem[1959] = 65'h1EE800003E69C0302; |
rommem[1960] = 65'h0BE107F606A0D0421; |
rommem[1961] = 65'h00FEF001837EF8000; |
rommem[1962] = 65'h167E0800867EF8000; |
rommem[1963] = 65'h0E6BD784067E10010; |
rommem[1964] = 65'h0040D0409EE800005; |
rommem[1965] = 65'h1160080ACBE00800F; |
rommem[1966] = 65'h0EE800003E69C0300; |
rommem[1967] = 65'h0160089C46A0D0429; |
rommem[1968] = 65'h0E6989680BE00800F; |
rommem[1969] = 65'h1040D0809EE800002; |
rommem[1970] = 65'h1EE800003E69C0302; |
rommem[1971] = 65'h0BE2000686A0D0421; |
rommem[1972] = 65'h0BE107F600E210001; |
rommem[1973] = 65'h1EE800003E69C0302; |
rommem[1974] = 65'h0160100056A0D0421; |
rommem[1975] = 65'h047EF800031FFF13F; |
rommem[1976] = 65'h047E1001047E08008; |
rommem[1977] = 65'h10FEF000837EF8018; |
rommem[1978] = 65'h0E690000067EF8000; |
rommem[1979] = 65'h16A0D082DEE800003; |
rommem[1980] = 65'h00A1080018220814E; |
rommem[1981] = 65'h031FFEF829220814E; |
rommem[1982] = 65'h1E69CFFFC31FFEF84; |
rommem[1983] = 65'h06A0D0028EE800003; |
rommem[1984] = 65'h037EF800847EF8000; |
rommem[1985] = 65'h037EF8000620020A8; |
rommem[1986] = 65'h1660120B86600A0B0; |
rommem[1987] = 65'h14C0120A64C00A0A8; |
rommem[1988] = 65'h14600A0B0BE110089; |
rommem[1989] = 65'h037EF8000460120B8; |
rommem[1990] = 65'h11A210200142101FF; |
rommem[1991] = 65'h0EE800400E6800000; |
rommem[1992] = 65'h04600A0B0042D0803; |
rommem[1993] = 65'h14600A0B866208000; |
rommem[1994] = 65'h16621801066208008; |
rommem[1995] = 65'h06622802066220018; |
rommem[1996] = 65'h16623803066230028; |
rommem[1997] = 65'h16624804066240038; |
rommem[1998] = 65'h16625805066250048; |
rommem[1999] = 65'h06626806066260058; |
rommem[2000] = 65'h16627807066270068; |
rommem[2001] = 65'h06628808066280078; |
rommem[2002] = 65'h16629809066290088; |
rommem[2003] = 65'h0662A80A0662A0098; |
rommem[2004] = 65'h1662B80B0662B00A8; |
rommem[2005] = 65'h1662C80C0662C00B8; |
rommem[2006] = 65'h1662D80D0662D00C8; |
rommem[2007] = 65'h0662E80E0662E00D8; |
rommem[2008] = 65'h1662F80F0662F00E8; |
rommem[2009] = 65'h1620120A64C0120A8; |
rommem[2010] = 65'h0E68000001A210200; |
rommem[2011] = 65'h0042D0803EE800400; |
rommem[2012] = 65'h04621801046208000; |
rommem[2013] = 65'h04622802046220018; |
rommem[2014] = 65'h14623803046230028; |
rommem[2015] = 65'h14624804046240038; |
rommem[2016] = 65'h14625805046250048; |
rommem[2017] = 65'h04626806046260058; |
rommem[2018] = 65'h14627807046270068; |
rommem[2019] = 65'h04628808046280078; |
rommem[2020] = 65'h14629809046290088; |
rommem[2021] = 65'h0462A80A0462A0098; |
rommem[2022] = 65'h1462B80B0462B00A8; |
rommem[2023] = 65'h1462C80C0462C00B8; |
rommem[2024] = 65'h1462D80D0462D00C8; |
rommem[2025] = 65'h0462E80E0462E00D8; |
rommem[2026] = 65'h1462F80F0462F00E8; |
rommem[2027] = 65'h137EF800046210008; |
rommem[2028] = 65'h167E080000FEF0020; |
rommem[2029] = 65'h167E1801067E10008; |
rommem[2030] = 65'h031FFF06F67EF8018; |
rommem[2031] = 65'h1041D0403E6810000; |
rommem[2032] = 65'h0BE2001C84001141A; |
rommem[2033] = 65'h10A21000182110000; |
rommem[2034] = 65'h04601140892110000; |
rommem[2035] = 65'h042019414BE110088; |
rommem[2036] = 65'h06600940892218000; |
rommem[2037] = 65'h147E1000847E08000; |
rommem[2038] = 65'h047EF801847E18010; |
rommem[2039] = 65'h04201941437EF8020; |
rommem[2040] = 65'h1BE007E8A92118000; |
rommem[2041] = 65'h0E69A0010160080A0; |
rommem[2042] = 65'h06A0D0429EE800003; |
rommem[2043] = 65'h0160080E037EF8000; |
rommem[2044] = 65'h1EE800003E69A0010; |
rommem[2045] = 65'h037EF80006A0D0429; |
rommem[2046] = 65'h067E080000FEF0018; |
rommem[2047] = 65'h167E1801067E10008; |
rommem[2048] = 65'h1040D0809E68FFC00; |
rommem[2049] = 65'h0E6A9292906210601; |
rommem[2050] = 65'h1F6829292EEA4A4A4; |
rommem[2051] = 65'h1E6A000006A0D042D; |
rommem[2052] = 65'h16A0D0C2DEE800400; |
rommem[2053] = 65'h00A31800866308000; |
rommem[2054] = 65'h047E08000BE017FCF; |
rommem[2055] = 65'h147E1801047E10008; |
rommem[2056] = 65'h00FEF002837EF8018; |
rommem[2057] = 65'h167E1000867E08000; |
rommem[2058] = 65'h067E2001867E18010; |
rommem[2059] = 65'h1E69A000067EF8020; |
rommem[2060] = 65'h06A0D0C2DEE800003; |
rommem[2061] = 65'h18231000282308000; |
rommem[2062] = 65'h1E040002004110818; |
rommem[2063] = 65'h031FFF06342021414; |
rommem[2064] = 65'h0EE800003E6900000; |
rommem[2065] = 65'h1923080006A0D0C2D; |
rommem[2066] = 65'h06A3D1029E6810000; |
rommem[2067] = 65'h0BE017F8F0A318002; |
rommem[2068] = 65'h147E2001847EF8020; |
rommem[2069] = 65'h147E1000847E18010; |
rommem[2070] = 65'h137EF802847E08000; |
rommem[2071] = 65'h067E080000FEF0028; |
rommem[2072] = 65'h167E1801067E10008; |
rommem[2073] = 65'h167EF802067E20018; |
rommem[2074] = 65'h0EE800003E69A0000; |
rommem[2075] = 65'h0823080006A0D0C2D; |
rommem[2076] = 65'h00411081882310002; |
rommem[2077] = 65'h1E690000004208805; |
rommem[2078] = 65'h06A0D0C2DEE800003; |
rommem[2079] = 65'h1923200006A309121; |
rommem[2080] = 65'h1BE017FAF0A318002; |
rommem[2081] = 65'h0EE800003E69A0000; |
rommem[2082] = 65'h1823080026A0D0C2D; |
rommem[2083] = 65'h131FFF04E0E108001; |
rommem[2084] = 65'h147E1000847E08000; |
rommem[2085] = 65'h047E2001847E18010; |
rommem[2086] = 65'h037EF802847EF8020; |
rommem[2087] = 65'h067E080000FEF0018; |
rommem[2088] = 65'h167E1801067E10008; |
rommem[2089] = 65'h0EE800003E69A0000; |
rommem[2090] = 65'h0823100006A0D0C2D; |
rommem[2091] = 65'h00631820004208C18; |
rommem[2092] = 65'h0EE800003E6900000; |
rommem[2093] = 65'h1E0400020043D0C03; |
rommem[2094] = 65'h10A31800292308000; |
rommem[2095] = 65'h047E08000BE017FCF; |
rommem[2096] = 65'h147E1801047E10008; |
rommem[2097] = 65'h1141080FF37EF8018; |
rommem[2098] = 65'h0AC10045AA8100541; |
rommem[2099] = 65'h1A8100261AE10037A; |
rommem[2100] = 65'h1161081000E108060; |
rommem[2101] = 65'h1141080FF37EF8000; |
rommem[2102] = 65'h00A10803CAE10021A; |
rommem[2103] = 65'h14A00941737EF8000; |
rommem[2104] = 65'h0E69A00001410807F; |
rommem[2105] = 65'h06A0D0C2DEE800003; |
rommem[2106] = 65'h10420881882310000; |
rommem[2107] = 65'h11410807F4A009418; |
rommem[2108] = 65'h19231001604208803; |
rommem[2109] = 65'h0E690000006210206; |
rommem[2110] = 65'h1042D0403EE800003; |
rommem[2111] = 65'h0B210080D37EF8000; |
rommem[2112] = 65'h167E080000FEF0020; |
rommem[2113] = 65'h167E1801067E10008; |
rommem[2114] = 65'h16000141867EF8018; |
rommem[2115] = 65'h1E6800091BE00018A; |
rommem[2116] = 65'h10FEF0020BE1D0209; |
rommem[2117] = 65'h167E1000867E08000; |
rommem[2118] = 65'h067EF801867E18010; |
rommem[2119] = 65'h1B02003384A011418; |
rommem[2120] = 65'h0600114180A210001; |
rommem[2121] = 65'h147EF801831FFF06F; |
rommem[2122] = 65'h147E1000847E18010; |
rommem[2123] = 65'h037EF802047E08000; |
rommem[2124] = 65'h1BE1D0169E6800090; |
rommem[2125] = 65'h167E080000FEF0020; |
rommem[2126] = 65'h167E1801067E10008; |
rommem[2127] = 65'h14A01141767EF8018; |
rommem[2128] = 65'h10E210001B02FF200; |
rommem[2129] = 65'h0BE007DEA60011417; |
rommem[2130] = 65'h1BE1D0169E6800093; |
rommem[2131] = 65'h167E080000FEF0020; |
rommem[2132] = 65'h167E1801067E10008; |
rommem[2133] = 65'h14A01141867EF8018; |
rommem[2134] = 65'h10E210001B02FE600; |
rommem[2135] = 65'h0BE007C6A60011418; |
rommem[2136] = 65'h0BE1D0169E6800092; |
rommem[2137] = 65'h167E080000FEF0020; |
rommem[2138] = 65'h167E1801067E10008; |
rommem[2139] = 65'h14A01141767EF8018; |
rommem[2140] = 65'h00A210001B02FDA1E; |
rommem[2141] = 65'h1BE007AEA60011417; |
rommem[2142] = 65'h1BE1D0189E6800094; |
rommem[2143] = 65'h167E080000FEF0020; |
rommem[2144] = 65'h167E1801067E10008; |
rommem[2145] = 65'h14A01141867EF8018; |
rommem[2146] = 65'h060001418BE200068; |
rommem[2147] = 65'h060001417BE00798A; |
rommem[2148] = 65'h10FEF0030BE00794A; |
rommem[2149] = 65'h167E1000867E08000; |
rommem[2150] = 65'h067E2001867E18010; |
rommem[2151] = 65'h067EF802867E28020; |
rommem[2152] = 65'h0BE1D00A9E6800099; |
rommem[2153] = 65'h10211800931FFF06F; |
rommem[2154] = 65'h0BE00012A4A009418; |
rommem[2155] = 65'h14A011418B2101508; |
rommem[2156] = 65'h10E210001BE200408; |
rommem[2157] = 65'h031FFF06F60011418; |
rommem[2158] = 65'h04A00941802118009; |
rommem[2159] = 65'h09231000082310002; |
rommem[2160] = 65'h00A1080010A318002; |
rommem[2161] = 65'h0EE800003E69A0000; |
rommem[2162] = 65'h1824280006A0D102D; |
rommem[2163] = 65'h0E0400020BE12FF04; |
rommem[2164] = 65'h19230FFFE31FFF063; |
rommem[2165] = 65'h1B0100C0ABE0001CA; |
rommem[2166] = 65'h031FFF06F02120009; |
rommem[2167] = 65'h10240800902118009; |
rommem[2168] = 65'h19230800031FFF063; |
rommem[2169] = 65'h1E681000042009410; |
rommem[2170] = 65'h031FFF0FF6A3D0429; |
rommem[2171] = 65'h031FFF10DBE00004A; |
rommem[2172] = 65'h047E2802047EF8028; |
rommem[2173] = 65'h047E1801047E20018; |
rommem[2174] = 65'h147E0800047E10008; |
rommem[2175] = 65'h10FEF002037EF8030; |
rommem[2176] = 65'h167E1000867E08000; |
rommem[2177] = 65'h067EF801867E18010; |
rommem[2178] = 65'h10A1080014A009418; |
rommem[2179] = 65'h0E69A000060009418; |
rommem[2180] = 65'h16A0D0821EE800003; |
rommem[2181] = 65'h060001418BE110246; |
rommem[2182] = 65'h00FEF0020BE0000CA; |
rommem[2183] = 65'h167E1000867E08000; |
rommem[2184] = 65'h067EF801867E18010; |
rommem[2185] = 65'h10A1080014A009417; |
rommem[2186] = 65'h1E69A000260009417; |
rommem[2187] = 65'h16A0D0821EE800003; |
rommem[2188] = 65'h10E210001BE110086; |
rommem[2189] = 65'h031FFF02E60011417; |
rommem[2190] = 65'h147EF801831FFF06F; |
rommem[2191] = 65'h147E1000847E18010; |
rommem[2192] = 65'h037EF802047E08000; |
rommem[2193] = 65'h067E080000FEF0018; |
rommem[2194] = 65'h067EF801067E10008; |
rommem[2195] = 65'h04A20800002110009; |
rommem[2196] = 65'h1BE1000680A210001; |
rommem[2197] = 65'h0BE007F8A31FFF07F; |
rommem[2198] = 65'h047E1000847EF8010; |
rommem[2199] = 65'h137EF801847E08000; |
rommem[2200] = 65'h167EF80000FEF0008; |
rommem[2201] = 65'h047EF800031FFF122; |
rommem[2202] = 65'h10FEF00100BEF0008; |
rommem[2203] = 65'h167EF800867E08000; |
rommem[2204] = 65'h131FFF07FE040000D; |
rommem[2205] = 65'h031FFF07FE040000A; |
rommem[2206] = 65'h147E0800047EF8008; |
rommem[2207] = 65'h033FFFCCC37EF8010; |
rommem[2208] = 65'h167E080000FEF0010; |
rommem[2209] = 65'h01410800F67EF8008; |
rommem[2210] = 65'h0AC1002390A108030; |
rommem[2211] = 65'h131FFF07F0A108007; |
rommem[2212] = 65'h147E0800047EF8008; |
rommem[2213] = 65'h00FEF001037EF8010; |
rommem[2214] = 65'h167EF800867E08000; |
rommem[2215] = 65'h131FFF14006108804; |
rommem[2216] = 65'h131FFF14006108802; |
rommem[2217] = 65'h147E0800047EF8008; |
rommem[2218] = 65'h00FEF001037EF8010; |
rommem[2219] = 65'h167EF800867E08000; |
rommem[2220] = 65'h031FFF14B06109004; |
rommem[2221] = 65'h031FFF14B06109002; |
rommem[2222] = 65'h147E0800047EF8008; |
rommem[2223] = 65'h00FEF001037EF8010; |
rommem[2224] = 65'h167EF800867E08000; |
rommem[2225] = 65'h031FFF1550610A004; |
rommem[2226] = 65'h031FFF1550610A002; |
rommem[2227] = 65'h147E0800047EF8008; |
rommem[2228] = 65'h10FEF001837EF8010; |
rommem[2229] = 65'h067E1800867E08000; |
rommem[2230] = 65'h0E0C0000767EF8010; |
rommem[2231] = 65'h031FFF14B06109002; |
rommem[2232] = 65'h047EF8010BE01FFCF; |
rommem[2233] = 65'h047E0800047E18008; |
rommem[2234] = 65'h00FEF001837EF8018; |
rommem[2235] = 65'h067E1800867E08000; |
rommem[2236] = 65'h0E040003A67EF8010; |
rommem[2237] = 65'h10220800931FFF07F; |
rommem[2238] = 65'h0E0C0000731FFF169; |
rommem[2239] = 65'h131FFF07FE0400020; |
rommem[2240] = 65'h131FFF14B4A208000; |
rommem[2241] = 65'h0BE01FF6F0A210001; |
rommem[2242] = 65'h147EF801031FFF135; |
rommem[2243] = 65'h047E0800047E18008; |
rommem[2244] = 65'h00FEF001837EF8018; |
rommem[2245] = 65'h067E1800867E08000; |
rommem[2246] = 65'h0E040003A67EF8010; |
rommem[2247] = 65'h10220800931FFF07F; |
rommem[2248] = 65'h1E0C0000331FFF169; |
rommem[2249] = 65'h131FFF07FE0400020; |
rommem[2250] = 65'h131FFF1554C208000; |
rommem[2251] = 65'h0BE01FF6F0A210002; |
rommem[2252] = 65'h147EF801031FFF135; |
rommem[2253] = 65'h047E0800047E18008; |
rommem[2254] = 65'h00FEF001837EF8018; |
rommem[2255] = 65'h167EF801067E08000; |
rommem[2256] = 65'h031FFF07FE040003A; |
rommem[2257] = 65'h131FFF16902208009; |
rommem[2258] = 65'h131FFF07FE0400020; |
rommem[2259] = 65'h131FFF16946208000; |
rommem[2260] = 65'h131FFF1350A210008; |
rommem[2261] = 65'h147E0800047EF8010; |
rommem[2262] = 65'h00FEF003037EF8018; |
rommem[2263] = 65'h067E2000867E18000; |
rommem[2264] = 65'h167E3001867E28010; |
rommem[2265] = 65'h167E4002867E38020; |
rommem[2266] = 65'h1E2000013E080000A; |
rommem[2267] = 65'h00631F80004110C1C; |
rommem[2268] = 65'h1064208010653F800; |
rommem[2269] = 65'h00652880104439009; |
rommem[2270] = 65'h11E10800004519409; |
rommem[2271] = 65'h106426001BE047F0F; |
rommem[2272] = 65'h00443100906532000; |
rommem[2273] = 65'h0024080090652E001; |
rommem[2274] = 65'h147E1800002510009; |
rommem[2275] = 65'h147E2801047E20008; |
rommem[2276] = 65'h047E3802047E30018; |
rommem[2277] = 65'h137EF803047E40028; |
rommem[2278] = 65'h067E180000FEF0020; |
rommem[2279] = 65'h167E2801067E20008; |
rommem[2280] = 65'h1E200000F67E40018; |
rommem[2281] = 65'h1162100301411000F; |
rommem[2282] = 65'h10642100106217000; |
rommem[2283] = 65'h0044290090632F000; |
rommem[2284] = 65'h004310C0906319001; |
rommem[2285] = 65'h0BE047EEF06108801; |
rommem[2286] = 65'h10231000902408009; |
rommem[2287] = 65'h047E2000847E18000; |
rommem[2288] = 65'h047E4001847E28010; |
rommem[2289] = 65'h00FEF003837EF8020; |
rommem[2290] = 65'h067E3800867E18000; |
rommem[2291] = 65'h067E4801867E40010; |
rommem[2292] = 65'h067E5802867E50020; |
rommem[2293] = 65'h00225800967EF8030; |
rommem[2294] = 65'h10225000931FFF1AD; |
rommem[2295] = 65'h0E240000131FFF1CC; |
rommem[2296] = 65'h006938600E2000007; |
rommem[2297] = 65'h10A7380040A738000; |
rommem[2298] = 65'h06A758C10141180FF; |
rommem[2299] = 65'h1BE047F4F06109001; |
rommem[2300] = 65'h0BE04FEEF02208009; |
rommem[2301] = 65'h031FFF1CC02A08009; |
rommem[2302] = 65'h1141180FFE2000003; |
rommem[2303] = 65'h1061090016A858C10; |
rommem[2304] = 65'h160B00014BE047FAF; |
rommem[2305] = 65'h047E3800847E18000; |
rommem[2306] = 65'h047E4801847E40010; |
rommem[2307] = 65'h047E5802847E50020; |
rommem[2308] = 65'h037EF803847EF8030; |
rommem[2309] = 65'h16A0D782DE6BEFFF8; |
rommem[2310] = 65'h131FFF1356000141C; |
rommem[2311] = 65'h031FFF07FE0400024; |
rommem[2312] = 65'h1B01FFFFF31FFEF07; |
rommem[2313] = 65'h131FFF07FB010030D; |
rommem[2314] = 65'h060001418BE007F8A; |
rommem[2315] = 65'h10211800931FFF06F; |
rommem[2316] = 65'h00A31800282308000; |
rommem[2317] = 65'h0B210042431FFF06B; |
rommem[2318] = 65'h00A31800282308000; |
rommem[2319] = 65'h0B0106A3A31FFF06B; |
rommem[2320] = 65'h1B0109446B0107C44; |
rommem[2321] = 65'h033FFF7E0B2100242; |
rommem[2322] = 65'h0B210024CB0106F4A; |
rommem[2323] = 65'h0B210043F33FFF297; |
rommem[2324] = 65'h131FFF1229A00C910; |
rommem[2325] = 65'h0B0100C4333FFF20A; |
rommem[2326] = 65'h033FFF235B2100252; |
rommem[2327] = 65'h133FFF528B2100249; |
rommem[2328] = 65'h133FFF411B2100250; |
rommem[2329] = 65'h131FFEF53B2100254; |
rommem[2330] = 65'h031FFF37433FFF20A; |
rommem[2331] = 65'h08230800033FFF20A; |
rommem[2332] = 65'h131FFF06B0A318002; |
rommem[2333] = 65'h082308000B21FD04C; |
rommem[2334] = 65'h131FFF06B0A318002; |
rommem[2335] = 65'h031FFF011B21FCC53; |
rommem[2336] = 65'h06000141760001418; |
rommem[2337] = 65'h033FFF20A31FFF06F; |
rommem[2338] = 65'h170736944203D203F; |
rommem[2339] = 65'h1706C65682079616C; |
rommem[2340] = 65'h0203D20534C430A0D; |
rommem[2341] = 65'h16373207261656C63; |
rommem[2342] = 65'h1203A0A0D6E656572; |
rommem[2343] = 65'h06D2074696445203D; |
rommem[2344] = 65'h179622079726F6D65; |
rommem[2345] = 65'h13D204C0A0D736574; |
rommem[2346] = 65'h031532064616F4C20; |
rommem[2347] = 65'h00A0D656C69662039; |
rommem[2348] = 65'h17C487C437C425B44; |
rommem[2349] = 65'h16D7544203D205D57; |
rommem[2350] = 65'h179726F6D656D2070; |
rommem[2351] = 65'h07C437C425B460A0D; |
rommem[2352] = 65'h146203D205D577C48; |
rommem[2353] = 65'h16F6D656D206C6C69; |
rommem[2354] = 65'h1203D20420A0D7972; |
rommem[2355] = 65'h16974207472617473; |
rommem[2356] = 65'h0636973616220796E; |
rommem[2357] = 65'h1754A203D204A0A0D; |
rommem[2358] = 65'h06F63206F7420706D; |
rommem[2359] = 65'h0203D20490A0D6564; |
rommem[2360] = 65'h07372656461766E49; |
rommem[2361] = 65'h16152203D20520A0D; |
rommem[2362] = 65'h16E696C206D6F646E; |
rommem[2363] = 65'h0203D20540A0D7365; |
rommem[2364] = 65'h0706D657420746567; |
rommem[2365] = 65'h10D65727574617265; |
rommem[2366] = 65'h0616950203D20500A; |
rommem[2367] = 65'h0000000000A0D6F6E; |
rommem[2368] = 65'h167EF80000FEF0008; |
rommem[2369] = 65'h00A31800282308000; |
rommem[2370] = 65'h0B01FFD2031FFF06B; |
rommem[2371] = 65'h047EF80000E318002; |
rommem[2372] = 65'h131FFF28037EF8008; |
rommem[2373] = 65'h00410140931FFF2D4; |
rommem[2374] = 65'h031FFF280E1000007; |
rommem[2375] = 65'h16050800031FFF2D4; |
rommem[2376] = 65'h0BE027F8F0A528001; |
rommem[2377] = 65'h031FFF28033FFF20A; |
rommem[2378] = 65'h1341F800031FFF2D4; |
rommem[2379] = 65'h031FFF28033FFF20A; |
rommem[2380] = 65'h11601380031FFF2D4; |
rommem[2381] = 65'h133FFF20A31FFF56D; |
rommem[2382] = 65'h00A31800282308000; |
rommem[2383] = 65'h00213000931FFF06B; |
rommem[2384] = 65'h131FFF2D431FFF280; |
rommem[2385] = 65'h031FFF28002110009; |
rommem[2386] = 65'h10610860131FFF2D4; |
rommem[2387] = 65'h116008001B2100200; |
rommem[2388] = 65'h1B060085731FFF135; |
rommem[2389] = 65'h031FFF175B0600443; |
rommem[2390] = 65'h033FFF20ABE00FFEF; |
rommem[2391] = 65'h0BE00FFEF31FFF189; |
rommem[2392] = 65'h031FFF19D33FFF20A; |
rommem[2393] = 65'h033FFF20ABE00FFEF; |
rommem[2394] = 65'h182308000BE006ACA; |
rommem[2395] = 65'h131FFF06B0A318002; |
rommem[2396] = 65'h131FFF28002130009; |
rommem[2397] = 65'h10211000931FFF2D4; |
rommem[2398] = 65'h131FFF2D431FFF280; |
rommem[2399] = 65'h131FFF28002128009; |
rommem[2400] = 65'h1B060074331FFF2D4; |
rommem[2401] = 65'h0B0600D57B0600A48; |
rommem[2402] = 65'h10A21000160208000; |
rommem[2403] = 65'h033FFF20ABE02FFCF; |
rommem[2404] = 65'h00A21000262208000; |
rommem[2405] = 65'h033FFF20ABE02FFCF; |
rommem[2406] = 65'h00A21000464208000; |
rommem[2407] = 65'h033FFF20ABE02FFCF; |
rommem[2408] = 65'h10A21000866208000; |
rommem[2409] = 65'h033FFF20ABE02FFCF; |
rommem[2410] = 65'h067E100000FEF0018; |
rommem[2411] = 65'h067EF801067E20008; |
rommem[2412] = 65'h0E100000FE0800000; |
rommem[2413] = 65'h00A31800282308000; |
rommem[2414] = 65'h031FFF2E831FFF06B; |
rommem[2415] = 65'h106210800B01005FF; |
rommem[2416] = 65'h0042088091410800F; |
rommem[2417] = 65'h102208009BE027F0F; |
rommem[2418] = 65'h047E2000847EF8010; |
rommem[2419] = 65'h137EF801847E10000; |
rommem[2420] = 65'h1AE100339A8100E30; |
rommem[2421] = 65'h037EF80000E108030; |
rommem[2422] = 65'h0AE100446A8100A41; |
rommem[2423] = 65'h10A10800A0E108041; |
rommem[2424] = 65'h0A810056137EF8000; |
rommem[2425] = 65'h10E108061AE100466; |
rommem[2426] = 65'h137EF80000A10800A; |
rommem[2427] = 65'h137EF8000E07FFFFF; |
rommem[2428] = 65'h131FFF36ABE00006A; |
rommem[2429] = 65'h031FFF36AB21FFF0A; |
rommem[2430] = 65'h1B21FFC53B01F0E1A; |
rommem[2431] = 65'h0A01FFA3031FFF36A; |
rommem[2432] = 65'h004101009A61FF939; |
rommem[2433] = 65'h131FFF2E831FFF36A; |
rommem[2434] = 65'h031FFF36A04100809; |
rommem[2435] = 65'h10621080031FFF2E8; |
rommem[2436] = 65'h104208C0904208809; |
rommem[2437] = 65'h0B0401E31B04FEF30; |
rommem[2438] = 65'h1B0402033B0401F32; |
rommem[2439] = 65'h0B0402037B04FEB35; |
rommem[2440] = 65'h1B0402439B0402238; |
rommem[2441] = 65'h0143180FFBE007CEA; |
rommem[2442] = 65'h131FFF36A0E318001; |
rommem[2443] = 65'h10621080031FFF2E8; |
rommem[2444] = 65'h131FFF36A04208809; |
rommem[2445] = 65'h10621080031FFF2E8; |
rommem[2446] = 65'h16051000004208809; |
rommem[2447] = 65'h1BE01FECF0A528001; |
rommem[2448] = 65'h131FFF2E831FFF36A; |
rommem[2449] = 65'h10420880906210800; |
rommem[2450] = 65'h131FFF2E831FFF36A; |
rommem[2451] = 65'h10420880906210800; |
rommem[2452] = 65'h031FFF338BE007A2A; |
rommem[2453] = 65'h131FFF33EBE007D2A; |
rommem[2454] = 65'h131FFF344BE007CEA; |
rommem[2455] = 65'h031FFF344BE007CAA; |
rommem[2456] = 65'h0BE005B2A66028000; |
rommem[2457] = 65'h06602800031FFF33E; |
rommem[2458] = 65'h031FFF338BE005ACA; |
rommem[2459] = 65'h133FFF20A66028000; |
rommem[2460] = 65'h167EF80000FEF0008; |
rommem[2461] = 65'h131FFF2E831FFF36A; |
rommem[2462] = 65'h0BE00038A04100809; |
rommem[2463] = 65'h167EF80000FEF0008; |
rommem[2464] = 65'h131FFF2E831FFF36A; |
rommem[2465] = 65'h0BE0001CA04100809; |
rommem[2466] = 65'h167EF80000FEF0008; |
rommem[2467] = 65'h131FFF2E831FFF36A; |
rommem[2468] = 65'h031FFF36A04100809; |
rommem[2469] = 65'h10621080031FFF2E8; |
rommem[2470] = 65'h131FFF36A04110809; |
rommem[2471] = 65'h10621080031FFF2E8; |
rommem[2472] = 65'h131FFF36A04208809; |
rommem[2473] = 65'h10621080031FFF2E8; |
rommem[2474] = 65'h131FFF36A04208809; |
rommem[2475] = 65'h10621080031FFF2E8; |
rommem[2476] = 65'h131FFF36A04208809; |
rommem[2477] = 65'h10621080031FFF2E8; |
rommem[2478] = 65'h131FFF36A04208809; |
rommem[2479] = 65'h10621080031FFF2E8; |
rommem[2480] = 65'h131FFF36A04208809; |
rommem[2481] = 65'h10621080031FFF2E8; |
rommem[2482] = 65'h00442100A04208809; |
rommem[2483] = 65'h047EF800004201409; |
rommem[2484] = 65'h037EF80000BEF0008; |
rommem[2485] = 65'h167EF80000FEF0008; |
rommem[2486] = 65'h1BE103C0831FFEF1C; |
rommem[2487] = 65'h1B01E9B0031FFEF07; |
rommem[2488] = 65'h0BE107F6231FFFD9D; |
rommem[2489] = 65'h037EF800847EF8000; |
rommem[2490] = 65'h067E080000FEF0018; |
rommem[2491] = 65'h167EF801067E18008; |
rommem[2492] = 65'h100000050660020E8; |
rommem[2493] = 65'h0E69AE000020088A8; |
rommem[2494] = 65'h06A0D042AEE800003; |
rommem[2495] = 65'h0020088A800000050; |
rommem[2496] = 65'h00411841C16018554; |
rommem[2497] = 65'h0EE800003E69AE008; |
rommem[2498] = 65'h1000000506A0D042A; |
rommem[2499] = 65'h016018554020088A8; |
rommem[2500] = 65'h1E69AE0100411841C; |
rommem[2501] = 65'h06A0D042AEE800003; |
rommem[2502] = 65'h0020088A800000050; |
rommem[2503] = 65'h10411841C16018300; |
rommem[2504] = 65'h1EE800003E69AE00C; |
rommem[2505] = 65'h1000000506A0D042A; |
rommem[2506] = 65'h116018300020088A8; |
rommem[2507] = 65'h0E69AE0140411841C; |
rommem[2508] = 65'h06A0D042AEE800003; |
rommem[2509] = 65'h1E69AE03CE0400002; |
rommem[2510] = 65'h06A0D042AEE800003; |
rommem[2511] = 65'h0EE800003E69AE038; |
rommem[2512] = 65'h0BE107FA96A0D0421; |
rommem[2513] = 65'h147EF8010BE007AEA; |
rommem[2514] = 65'h047E0800047E18008; |
rommem[2515] = 65'h1E698000037EF8018; |
rommem[2516] = 65'h16A0D082DEE800003; |
rommem[2517] = 65'h100000050E10037FF; |
rommem[2518] = 65'h192208000020088A8; |
rommem[2519] = 65'h0BE027F8F0A210002; |
rommem[2520] = 65'h10FEF001037EF8000; |
rommem[2521] = 65'h167EF800867E08000; |
rommem[2522] = 65'h0EE800003E69C1026; |
rommem[2523] = 65'h131FFEF076A0D0029; |
rommem[2524] = 65'h1E69C1068B0100A03; |
rommem[2525] = 65'h16A0D0421EE800003; |
rommem[2526] = 65'h1E69C1026BE107F69; |
rommem[2527] = 65'h16A0D0421EE800003; |
rommem[2528] = 65'h1B21FF30F1410800F; |
rommem[2529] = 65'h0EE800003E69C1002; |
rommem[2530] = 65'h1E69C10046A0D0029; |
rommem[2531] = 65'h16A0D0029EE800003; |
rommem[2532] = 65'h1EE800003E69C1018; |
rommem[2533] = 65'h0E69C100A6A0D0029; |
rommem[2534] = 65'h16A0D0029EE800003; |
rommem[2535] = 65'h0E69C1020E07F8000; |
rommem[2536] = 65'h06A0D0429EE800003; |
rommem[2537] = 65'h1B010050331FFEF07; |
rommem[2538] = 65'h0EE800003E69C1068; |
rommem[2539] = 65'h0BE107F696A0D0421; |
rommem[2540] = 65'h147E0800047EF8008; |
rommem[2541] = 65'h00FEF001037EF8010; |
rommem[2542] = 65'h167EF800867E08000; |
rommem[2543] = 65'h0E69C0600E0400008; |
rommem[2544] = 65'h16A0D0428EE800003; |
rommem[2545] = 65'h0E69500801600800F; |
rommem[2546] = 65'h06A0D0429EE800003; |
rommem[2547] = 65'h1E69500001600B46E; |
rommem[2548] = 65'h06A0D0429EE800003; |
rommem[2549] = 65'h1E69C0600E0400009; |
rommem[2550] = 65'h16A0D0428EE800003; |
rommem[2551] = 65'h1E6950006E07FCA12; |
rommem[2552] = 65'h06A0D0429EE800003; |
rommem[2553] = 65'h1E695000416009104; |
rommem[2554] = 65'h06A0D0429EE800003; |
rommem[2555] = 65'h1EE800000E6A625A0; |
rommem[2556] = 65'h0BE00800F040D0409; |
rommem[2557] = 65'h0E69C0600E040000D; |
rommem[2558] = 65'h16A0D0428EE800003; |
rommem[2559] = 65'h0E695000416008104; |
rommem[2560] = 65'h06A0D0429EE800003; |
rommem[2561] = 65'h1EE800000E6A625A0; |
rommem[2562] = 65'h0BE00800F040D0409; |
rommem[2563] = 65'h0E69C0600E0400010; |
rommem[2564] = 65'h16A0D0428EE800003; |
rommem[2565] = 65'h0E695000416008000; |
rommem[2566] = 65'h06A0D0429EE800003; |
rommem[2567] = 65'h147E0800047EF8008; |
rommem[2568] = 65'h01600800F37EF8010; |
rommem[2569] = 65'h1EE800003E6950080; |
rommem[2570] = 65'h031FFEF076A0D0429; |
rommem[2571] = 65'h0B0100861B01DF403; |
rommem[2572] = 65'h1B0100C63B0100A62; |
rommem[2573] = 65'h1B0101065B0100E64; |
rommem[2574] = 65'h1B0101467B0101266; |
rommem[2575] = 65'h1E0401C31BE007EEA; |
rommem[2576] = 65'h0BE007E8A31FFF434; |
rommem[2577] = 65'h031FFF434E0401FA5; |
rommem[2578] = 65'h0E04010C3BE007E2A; |
rommem[2579] = 65'h1BE007DCA31FFF434; |
rommem[2580] = 65'h131FFF434E04012D1; |
rommem[2581] = 65'h0E040151FBE007D6A; |
rommem[2582] = 65'h1BE007D0A31FFF434; |
rommem[2583] = 65'h031FFF434E0401660; |
rommem[2584] = 65'h0E040191EBE007CAA; |
rommem[2585] = 65'h1BE007C4A31FFF434; |
rommem[2586] = 65'h167E080000FEF0010; |
rommem[2587] = 65'h1E695000067EF8008; |
rommem[2588] = 65'h06A0D0429EE800003; |
rommem[2589] = 65'h1E6950006E07FCA12; |
rommem[2590] = 65'h06A0D0429EE800003; |
rommem[2591] = 65'h1E695000416009104; |
rommem[2592] = 65'h06A0D0429EE800003; |
rommem[2593] = 65'h0040D0409E683D090; |
rommem[2594] = 65'h116008104BE00800F; |
rommem[2595] = 65'h1EE800003E6950004; |
rommem[2596] = 65'h0E683D0906A0D0429; |
rommem[2597] = 65'h0BE00800F040D0409; |
rommem[2598] = 65'h0E695000416008000; |
rommem[2599] = 65'h06A0D0429EE800003; |
rommem[2600] = 65'h147E0800047EF8008; |
rommem[2601] = 65'h00FEF000837EF8010; |
rommem[2602] = 65'h0E04000C867E08000; |
rommem[2603] = 65'h1EE800003E69A0100; |
rommem[2604] = 65'h1E04000F06A0D0429; |
rommem[2605] = 65'h0EE800003E69A0102; |
rommem[2606] = 65'h0E04001186A0D0429; |
rommem[2607] = 65'h0EE800003E69A0104; |
rommem[2608] = 65'h1E04001406A0D0429; |
rommem[2609] = 65'h1EE800003E69A0106; |
rommem[2610] = 65'h1E04001686A0D0429; |
rommem[2611] = 65'h0EE800003E69A0108; |
rommem[2612] = 65'h147E080006A0D0429; |
rommem[2613] = 65'h0E69A011E37EF8008; |
rommem[2614] = 65'h16A0D0421EE800003; |
rommem[2615] = 65'h1B0100802B0100901; |
rommem[2616] = 65'h0B0100604B0100703; |
rommem[2617] = 65'h1B0100406B0100505; |
rommem[2618] = 65'h1B0100208B0100307; |
rommem[2619] = 65'h01A10802837EF8000; |
rommem[2620] = 65'h1E69AD0020A1080CC; |
rommem[2621] = 65'h06A0D0429EE800003; |
rommem[2622] = 65'h1EE800003E69AD012; |
rommem[2623] = 65'h1E69AD0226A0D0429; |
rommem[2624] = 65'h06A0D0429EE800003; |
rommem[2625] = 65'h0EE800003E69AD032; |
rommem[2626] = 65'h1E69AD0426A0D0429; |
rommem[2627] = 65'h06A0D0429EE800003; |
rommem[2628] = 65'h0EE800003E69AD052; |
rommem[2629] = 65'h0E69AD0626A0D0429; |
rommem[2630] = 65'h06A0D0429EE800003; |
rommem[2631] = 65'h1EE800003E69AD072; |
rommem[2632] = 65'h037EF80006A0D0429; |
rommem[2633] = 65'h067E080000FEF0030; |
rommem[2634] = 65'h167E1801067E10008; |
rommem[2635] = 65'h067E2802067E20018; |
rommem[2636] = 65'h031FFEFF267EF8018; |
rommem[2637] = 65'h00181CD1716008003; |
rommem[2638] = 65'h10222800902120009; |
rommem[2639] = 65'h11601002E16008002; |
rommem[2640] = 65'h00181CD1716018040; |
rommem[2641] = 65'h10181D01716008001; |
rommem[2642] = 65'h11600800231FFF169; |
rommem[2643] = 65'h00251800902410009; |
rommem[2644] = 65'h131FFEFF70181CD17; |
rommem[2645] = 65'h047E1801047EF8018; |
rommem[2646] = 65'h147E0800047E10008; |
rommem[2647] = 65'h047E2802047E20018; |
rommem[2648] = 65'h10FEF001037EF8030; |
rommem[2649] = 65'h0E0C0037F40000004; |
rommem[2650] = 65'h16200150062019508; |
rommem[2651] = 65'h06200151260001510; |
rommem[2652] = 65'h04000000462001514; |
rommem[2653] = 65'h10FEF001837EF8010; |
rommem[2654] = 65'h0E0C0027F40000005; |
rommem[2655] = 65'h1E0C0002860019417; |
rommem[2656] = 65'h14000950060019418; |
rommem[2657] = 65'h04000950131FFF14B; |
rommem[2658] = 65'h14000000531FFF14B; |
rommem[2659] = 65'h10FEF001037EF8018; |
rommem[2660] = 65'h04200977F40000001; |
rommem[2661] = 65'h042009512AC101402; |
rommem[2662] = 65'h06000941806108601; |
rommem[2663] = 65'h16000941742009514; |
rommem[2664] = 65'h1620095140E108001; |
rommem[2665] = 65'h131FFF07FE040005E; |
rommem[2666] = 65'h00E10800140009418; |
rommem[2667] = 65'h14000941760009418; |
rommem[2668] = 65'h1600094170E108001; |
rommem[2669] = 65'h131FFF07FE0400020; |
rommem[2670] = 65'h037EF827740000001; |
rommem[2671] = 65'h04200951260001510; |
rommem[2672] = 65'h06000941806108601; |
rommem[2673] = 65'h16000941742009514; |
rommem[2674] = 65'h131FFF07FE0400020; |
rommem[2675] = 65'h037EF827740000001; |
rommem[2676] = 65'h0400000050FEF0018; |
rommem[2677] = 65'h160019417E0C0002E; |
rommem[2678] = 65'h10631860142019508; |
rommem[2679] = 65'h1E040002060019418; |
rommem[2680] = 65'h1E040002331FFF07F; |
rommem[2681] = 65'h0E040004131FFF07F; |
rommem[2682] = 65'h1E040002331FFF07F; |
rommem[2683] = 65'h1E040002031FFF07F; |
rommem[2684] = 65'h14000000531FFF07F; |
rommem[2685] = 65'h04601800037EF8018; |
rommem[2686] = 65'h162308000160080E9; |
rommem[2687] = 65'h062308001160080F2; |
rommem[2688] = 65'h062308002160080DF; |
rommem[2689] = 65'h00FEF002837EF8000; |
rommem[2690] = 65'h14200977F4000000F; |
rommem[2691] = 65'h01411000142021570; |
rommem[2692] = 65'h040019571BE2003A8; |
rommem[2693] = 65'h16002141860019417; |
rommem[2694] = 65'h131FFF14BE0400020; |
rommem[2695] = 65'h131FFF14BE0400023; |
rommem[2696] = 65'h131FFF14BE0400023; |
rommem[2697] = 65'h131FFF14BE0400023; |
rommem[2698] = 65'h131FFF14BE0400020; |
rommem[2699] = 65'h10A10800140009417; |
rommem[2700] = 65'h14000941860009417; |
rommem[2701] = 65'h0E04000200E108005; |
rommem[2702] = 65'h1E040005831FFF14B; |
rommem[2703] = 65'h1E040002031FFF14B; |
rommem[2704] = 65'h1E040005831FFF14B; |
rommem[2705] = 65'h1E040002031FFF14B; |
rommem[2706] = 65'h14000000F31FFF14B; |
rommem[2707] = 65'h037EF800037EF8028; |
rommem[2708] = 65'h0FFFFFFFFFFFF0000; |
rommem[2709] = 65'h031FFF4BB31FFF4B1; |
rommem[2710] = 65'h031FFF52731FFF503; |
rommem[2711] = 65'h131FFF4E831FFF4C7; |
rommem[2712] = 65'h1B010046B31FFEF07; |
rommem[2713] = 65'h0B0100D20B010096A; |
rommem[2714] = 65'h042011508BE0002AA; |
rommem[2715] = 65'h1BE2D0247E6800280; |
rommem[2716] = 65'h1620115080A210008; |
rommem[2717] = 65'h142011508BE0001EA; |
rommem[2718] = 65'h10E210008BE2001A2; |
rommem[2719] = 65'h0BE00014A62011508; |
rommem[2720] = 65'h0BE20010940011510; |
rommem[2721] = 65'h060011510E0800001; |
rommem[2722] = 65'h06201151242011508; |
rommem[2723] = 65'h162011514E080002E; |
rommem[2724] = 65'h0B0100203BE00002A; |
rommem[2725] = 65'h14000000FBE007C2A; |
rommem[2726] = 65'h0BE0017AA0BEF00F0; |
rommem[2727] = 65'h067EF80000FEF0018; |
rommem[2728] = 65'h167E1801067E10008; |
rommem[2729] = 65'h0EE800003E69C0500; |
rommem[2730] = 65'h0160080016A0D0C2D; |
rommem[2731] = 65'h11600800190308002; |
rommem[2732] = 65'h1DE00000090308003; |
rommem[2733] = 65'h00211000980308004; |
rommem[2734] = 65'h1B01FFD0102208009; |
rommem[2735] = 65'h12A10820480308005; |
rommem[2736] = 65'h19A00D946B2100500; |
rommem[2737] = 65'h00410840A31FFF122; |
rommem[2738] = 65'h031FFF14BBE0000AA; |
rommem[2739] = 65'h131FFF1229A00D960; |
rommem[2740] = 65'h147EF800016008001; |
rommem[2741] = 65'h147E1801047E10008; |
rommem[2742] = 65'h00FEF002837EF8018; |
rommem[2743] = 65'h067E2800867EF8000; |
rommem[2744] = 65'h067E1801867E10010; |
rommem[2745] = 65'h1E69C050067E20020; |
rommem[2746] = 65'h06A0D0C2DEE800003; |
rommem[2747] = 65'h09030800706109206; |
rommem[2748] = 65'h09030800806109001; |
rommem[2749] = 65'h19030800906109001; |
rommem[2750] = 65'h19030800A06109001; |
rommem[2751] = 65'h09030801416008001; |
rommem[2752] = 65'h19030800216008002; |
rommem[2753] = 65'h09030800316008001; |
rommem[2754] = 65'h180308004DE000000; |
rommem[2755] = 65'h00240800902120009; |
rommem[2756] = 65'h080308005B01FFD01; |
rommem[2757] = 65'h1B21008002A108614; |
rommem[2758] = 65'h08030801016020200; |
rommem[2759] = 65'h10A21000160208000; |
rommem[2760] = 65'h00410840ABE027FAF; |
rommem[2761] = 65'h031FFF14BBE0000AA; |
rommem[2762] = 65'h031FFF1229A00D99E; |
rommem[2763] = 65'h147EF800016008001; |
rommem[2764] = 65'h147E1001047E28008; |
rommem[2765] = 65'h047E2002047E18018; |
rommem[2766] = 65'h10FEF002037EF8028; |
rommem[2767] = 65'h167E1000867EF8000; |
rommem[2768] = 65'h167E2801867E18010; |
rommem[2769] = 65'h0160181F4660030F8; |
rommem[2770] = 65'h10250800916028000; |
rommem[2771] = 65'h16000141816010008; |
rommem[2772] = 65'h00250800931FFF13F; |
rommem[2773] = 65'h1EE800402E6800000; |
rommem[2774] = 65'h131FFF56D040D0809; |
rommem[2775] = 65'h1E68000000A528001; |
rommem[2776] = 65'h16A0D0405EE800402; |
rommem[2777] = 65'h1BE200088121100EB; |
rommem[2778] = 65'h016008001BE01FE2F; |
rommem[2779] = 65'h09A00D728BE0001EA; |
rommem[2780] = 65'h0E68001FE31FFF122; |
rommem[2781] = 65'h16A0D0405EE800402; |
rommem[2782] = 65'h1E68001FFB21FF855; |
rommem[2783] = 65'h16A0D0405EE800402; |
rommem[2784] = 65'h0BE1D7E69E68000AA; |
rommem[2785] = 65'h16600B0F80E508001; |
rommem[2786] = 65'h047EF80000410840A; |
rommem[2787] = 65'h147E1801047E10008; |
rommem[2788] = 65'h137EF802047E28018; |
rommem[2789] = 65'h0424520646E756F46; |
rommem[2790] = 65'h10A0D2E65646F6320; |
rommem[2791] = 65'h00FEF000800000000; |
rommem[2792] = 65'h0E680001667EF8000; |
rommem[2793] = 65'h06A0D0C06EE800402; |
rommem[2794] = 65'h0EE800402E6800010; |
rommem[2795] = 65'h004310C186A0D0805; |
rommem[2796] = 65'h0EE800402E6800200; |
rommem[2797] = 65'h1E680000E6A0D082D; |
rommem[2798] = 65'h06A0D1406EE800402; |
rommem[2799] = 65'h104531403460330F8; |
rommem[2800] = 65'h031FFF56D02508009; |
rommem[2801] = 65'h00A2102000A528001; |
rommem[2802] = 65'h047EF8000BE01FF8F; |
rommem[2803] = 65'h1E680001637EF8008; |
rommem[2804] = 65'h06A0D0C06EE800402; |
rommem[2805] = 65'h0EE800402E6800010; |
rommem[2806] = 65'h004320C186A0D1005; |
rommem[2807] = 65'h0EE800402E680000E; |
rommem[2808] = 65'h004320C036A0D1006; |
rommem[2809] = 65'h104331403460330F8; |
rommem[2810] = 65'h1EE800402E6800011; |
rommem[2811] = 65'h0E68000126A0D1C05; |
rommem[2812] = 65'h16A0D2005EE800402; |
rommem[2813] = 65'h104741C0906841006; |
rommem[2814] = 65'h106738A0602740009; |
rommem[2815] = 65'h10271800906739201; |
rommem[2816] = 65'h031FFF56D02508009; |
rommem[2817] = 65'h00A2102000A528001; |
rommem[2818] = 65'h1BE0004AABE01FF8F; |
rommem[2819] = 65'h0EE800402E6800016; |
rommem[2820] = 65'h0E68000106A0D0C06; |
rommem[2821] = 65'h16A0D0805EE800402; |
rommem[2822] = 65'h1E680000E04310C18; |
rommem[2823] = 65'h16A0D0806EE800402; |
rommem[2824] = 65'h0E680001104310C03; |
rommem[2825] = 65'h16A0D1C05EE800402; |
rommem[2826] = 65'h1EE800402E6800012; |
rommem[2827] = 65'h1068410066A0D2005; |
rommem[2828] = 65'h10274000904741C09; |
rommem[2829] = 65'h10673920106738A06; |
rommem[2830] = 65'h1E68F4F4246308000; |
rommem[2831] = 65'h0F68454C4EEA51951; |
rommem[2832] = 65'h1BE100068041D0407; |
rommem[2833] = 65'h0BE03FF2F0A318020; |
rommem[2834] = 65'h1E68000114C31001A; |
rommem[2835] = 65'h16A0D1C06EE800402; |
rommem[2836] = 65'h10673920106738A06; |
rommem[2837] = 65'h0EE800402E680000D; |
rommem[2838] = 65'h0E68002006A0D0C05; |
rommem[2839] = 65'h16A0D082DEE800402; |
rommem[2840] = 65'h10A5282004602B0F8; |
rommem[2841] = 65'h031FFF56D02508009; |
rommem[2842] = 65'h00A2102000A528001; |
rommem[2843] = 65'h1E6800200BE01FF8F; |
rommem[2844] = 65'h06A0D0407EE800402; |
rommem[2845] = 65'h0EE800151E68F4F42; |
rommem[2846] = 65'h116008016BE1D0129; |
rommem[2847] = 65'h031FFF1229A00D920; |
rommem[2848] = 65'h1EE800402E6800204; |
rommem[2849] = 65'h0341F8000040D0409; |
rommem[2850] = 65'h09A00D93033FFF20A; |
rommem[2851] = 65'h133FFF20A31FFF122; |
rommem[2852] = 65'h120676E69706D754A; |
rommem[2853] = 65'h000746F6F62206F74; |
rommem[2854] = 65'h02064726163204453; |
rommem[2855] = 65'h1746F6F6220746F6E; |
rommem[2856] = 65'h04453002E656C6261; |
rommem[2857] = 65'h16E69206472616320; |
rommem[2858] = 65'h0657A696C61697469; |
rommem[2859] = 65'h1002E79616B6F2064; |
rommem[2860] = 65'h020726F727265203A; |
rommem[2861] = 65'h0646572727563636F; |
rommem[2862] = 65'h16C616974696E6920; |
rommem[2863] = 65'h1687420676E697A69; |
rommem[2864] = 65'h17261632044532065; |
rommem[2865] = 65'h16163204453002E64; |
rommem[2866] = 65'h020746F6F62206472; |
rommem[2867] = 65'h0445300726F727265; |
rommem[2868] = 65'h06572206472616320; |
rommem[2869] = 65'h1726F727265206461; |
rommem[2870] = 65'h00000000000000000; |
rommem[2871] = 65'h0E69C200000000000; |
rommem[2872] = 65'h06A0D0C2DEE800003; |
rommem[2873] = 65'h16430802816008064; |
rommem[2874] = 65'h16430803016008007; |
rommem[2875] = 65'h0EEBFFFBBE6B0DA42; |
rommem[2876] = 65'h064308040040D0409; |
rommem[2877] = 65'h064308044160080FF; |
rommem[2878] = 65'h00FEF001837EF8000; |
rommem[2879] = 65'h067E1000867E18000; |
rommem[2880] = 65'h0E69C200067E20010; |
rommem[2881] = 65'h06A0D0C2DEE800003; |
rommem[2882] = 65'h06431000416010004; |
rommem[2883] = 65'h11601600064308604; |
rommem[2884] = 65'h0DE00000064310600; |
rommem[2885] = 65'h02A21041484310004; |
rommem[2886] = 65'h084310600BE207FA8; |
rommem[2887] = 65'h11601800006212001; |
rommem[2888] = 65'h0EE800003E6901D88; |
rommem[2889] = 65'h06A1188056A0D102D; |
rommem[2890] = 65'h00A3180016A418911; |
rommem[2891] = 65'h0BE207F8912310053; |
rommem[2892] = 65'h047E1000847E18000; |
rommem[2893] = 65'h037EF801847E20010; |
rommem[2894] = 65'h067E180000FEF0010; |
rommem[2895] = 65'h14A11000C67E10008; |
rommem[2896] = 65'h1B22006084A11800D; |
rommem[2897] = 65'h116008002B2300506; |
rommem[2898] = 65'h047E1000847E18000; |
rommem[2899] = 65'h0B2200C0837EF8010; |
rommem[2900] = 65'h04A110017B2300B00; |
rommem[2901] = 65'h116008001B2200301; |
rommem[2902] = 65'h0B2200311BE007F0A; |
rommem[2903] = 65'h0BE007EAA16008003; |
rommem[2904] = 65'h016008004B2200306; |
rommem[2905] = 65'h10410840ABE007E4A; |
rommem[2906] = 65'h047E1000847E18000; |
rommem[2907] = 65'h00FEF001037EF8010; |
rommem[2908] = 65'h067E2000867E18000; |
rommem[2909] = 65'h1EE800003E69C2000; |
rommem[2910] = 65'h1843204006A0D0C2D; |
rommem[2911] = 65'h0B04FFE012A421E7C; |
rommem[2912] = 65'h06432000416020001; |
rommem[2913] = 65'h10621200664308404; |
rommem[2914] = 65'h16431040016217000; |
rommem[2915] = 65'h047E1800047E20008; |
rommem[2916] = 65'h00FEF004037EF8010; |
rommem[2917] = 65'h067E2000867E18000; |
rommem[2918] = 65'h167E3001867E28010; |
rommem[2919] = 65'h167E4002867E38020; |
rommem[2920] = 65'h167E5003867E48030; |
rommem[2921] = 65'h04A1200074A118006; |
rommem[2922] = 65'h14A1300094A128008; |
rommem[2923] = 65'h14A14000B4A13800A; |
rommem[2924] = 65'h06012000160118000; |
rommem[2925] = 65'h16013000360128002; |
rommem[2926] = 65'h16014000560138004; |
rommem[2927] = 65'h06011800616018000; |
rommem[2928] = 65'h160118007160180FF; |
rommem[2929] = 65'h160118008160180EE; |
rommem[2930] = 65'h060118009160180F0; |
rommem[2931] = 65'h16011800A160180DA; |
rommem[2932] = 65'h16011800B16018042; |
rommem[2933] = 65'h14A11801AB2201101; |
rommem[2934] = 65'h04A12801C4A12001B; |
rommem[2935] = 65'h14A13801E4A13001D; |
rommem[2936] = 65'h14A1480204A14001F; |
rommem[2937] = 65'h16013801A4A150021; |
rommem[2938] = 65'h06014801C6014001B; |
rommem[2939] = 65'h06011801E6015001D; |
rommem[2940] = 65'h1601280206012001F; |
rommem[2941] = 65'h04601D9B460130021; |
rommem[2942] = 65'h16601D9B40A318001; |
rommem[2943] = 65'h00631900160118013; |
rommem[2944] = 65'h04A11800E60118012; |
rommem[2945] = 65'h1063184061431800F; |
rommem[2946] = 65'h147E180000A30800E; |
rommem[2947] = 65'h147E2801047E20008; |
rommem[2948] = 65'h047E3802047E30018; |
rommem[2949] = 65'h147E4803047E40028; |
rommem[2950] = 65'h037EF804047E50038; |
rommem[2951] = 65'h167E180000FEF0018; |
rommem[2952] = 65'h167E2801067E20008; |
rommem[2953] = 65'h16010001960100018; |
rommem[2954] = 65'h01602000E04318C0A; |
rommem[2955] = 65'h00E52800102228009; |
rommem[2956] = 65'h16A121405BE428101; |
rommem[2957] = 65'h0065290066A121845; |
rommem[2958] = 65'h004328C0304531409; |
rommem[2959] = 65'h0BE007EEA0A420002; |
rommem[2960] = 65'h01431FFFF02328009; |
rommem[2961] = 65'h104328C030652A001; |
rommem[2962] = 65'h06011801902318004; |
rommem[2963] = 65'h16011801806319001; |
rommem[2964] = 65'h067E2000867E18000; |
rommem[2965] = 65'h037EF801867E28010; |
rommem[2966] = 65'h167E100000FEF0020; |
rommem[2967] = 65'h167E2001067E18008; |
rommem[2968] = 65'h14A11001E67E28018; |
rommem[2969] = 65'h14A1200204A11801F; |
rommem[2970] = 65'h0E68000FF4A128021; |
rommem[2971] = 65'h1E68000FFBE2D01A9; |
rommem[2972] = 65'h0E68000FFBE3D0169; |
rommem[2973] = 65'h0E68000FFBE4D0129; |
rommem[2974] = 65'h116008001BE5D00E9; |
rommem[2975] = 65'h047E1800847E10000; |
rommem[2976] = 65'h047E2801847E20010; |
rommem[2977] = 65'h10220800937EF8020; |
rommem[2978] = 65'h00411840906109006; |
rommem[2979] = 65'h10412040906109006; |
rommem[2980] = 65'h00412840906109006; |
rommem[2981] = 65'h0EEBFFF02E6A8012A; |
rommem[2982] = 65'h00410840ABE1D7E28; |
rommem[2983] = 65'h131FFF66FBE007E0A; |
rommem[2984] = 65'h0E68000000410840A; |
rommem[2985] = 65'h1040D0409EE800400; |
rommem[2986] = 65'h031FFF69C31FFF67D; |
rommem[2987] = 65'h102110009B2102801; |
rommem[2988] = 65'h0EE800400E6800000; |
rommem[2989] = 65'h031FFF72C040D0409; |
rommem[2990] = 65'h10220800902118009; |
rommem[2991] = 65'h0E6800000B2302001; |
rommem[2992] = 65'h1040D0409EE800400; |
rommem[2993] = 65'h031FFF6C916010001; |
rommem[2994] = 65'h0E680000002118009; |
rommem[2995] = 65'h1040D0409EE800400; |
rommem[2996] = 65'h14A1100116A118010; |
rommem[2997] = 65'h1022300090A21000E; |
rommem[2998] = 65'h06A1194C56A119085; |
rommem[2999] = 65'h00442900906421006; |
rommem[3000] = 65'h00E42080002420004; |
rommem[3001] = 65'h16A1190D002420004; |
rommem[3002] = 65'h06A11909006421001; |
rommem[3003] = 65'h131FFF70E02310009; |
rommem[3004] = 65'h0EE800400E6800000; |
rommem[3005] = 65'h102610009040D0409; |
rommem[3006] = 65'h033FFF75031FFF6B7; |
rommem[3007] = 65'h0E6B5E100B21FD202; |
rommem[3008] = 65'h0040D0809EE800017; |
rommem[3009] = 65'h1B2DFCD014A268015; |
rommem[3010] = 65'h14A2500274A248026; |
rommem[3011] = 65'h04A2600294A258028; |
rommem[3012] = 65'h006F7900602978009; |
rommem[3013] = 65'h006F7900604F53C09; |
rommem[3014] = 65'h106F7900604F5BC09; |
rommem[3015] = 65'h1E6A8012A04F63C09; |
rommem[3016] = 65'h0BEFD77E9EEBFFF02; |
rommem[3017] = 65'h14A23001D4A22801C; |
rommem[3018] = 65'h14A24001F4A23801E; |
rommem[3019] = 65'h106E7100602570009; |
rommem[3020] = 65'h006E7100604E33809; |
rommem[3021] = 65'h106E7100604E3B809; |
rommem[3022] = 65'h04A28001604E43809; |
rommem[3023] = 65'h04A2900184A288017; |
rommem[3024] = 65'h14A2A001A4A298019; |
rommem[3025] = 65'h1602800004A2A801B; |
rommem[3026] = 65'h06029000260288001; |
rommem[3027] = 65'h0602A000460298003; |
rommem[3028] = 65'h160280020602A8005; |
rommem[3029] = 65'h06029002260288021; |
rommem[3030] = 65'h0602A002460298023; |
rommem[3031] = 65'h060200006602A8025; |
rommem[3032] = 65'h160208007160080FF; |
rommem[3033] = 65'h160208008160080EE; |
rommem[3034] = 65'h060208009160080F0; |
rommem[3035] = 65'h16020800A160080DA; |
rommem[3036] = 65'h16020800B16008042; |
rommem[3037] = 65'h0160080FF60200016; |
rommem[3038] = 65'h0160080EE60208017; |
rommem[3039] = 65'h0160080F060208018; |
rommem[3040] = 65'h0160080DA60208019; |
rommem[3041] = 65'h1160080426020801A; |
rommem[3042] = 65'h06024801C6020801B; |
rommem[3043] = 65'h16025801E6025001D; |
rommem[3044] = 65'h0602280266026001F; |
rommem[3045] = 65'h16023802860230027; |
rommem[3046] = 65'h01600800260240029; |
rommem[3047] = 65'h00220800960208015; |
rommem[3048] = 65'h031FFF6B71601002A; |
rommem[3049] = 65'h133FFF7E033FFF750; |
rommem[3050] = 65'h033FFFD9B33FFF801; |
rommem[3051] = 65'h033FFFDA333FFFD9C; |
rommem[3052] = 65'h133FFFE2833FFFD9D; |
rommem[3053] = 65'h10000000010060000; |
rommem[3054] = 65'h100000000107FFFF8; |
rommem[3055] = 65'h00000000000000000; |
rommem[3056] = 65'h167EF80000FEF0008; |
rommem[3057] = 65'h1460F5F70660F1088; |
rommem[3058] = 65'h167EF80000FEF0008; |
rommem[3059] = 65'h06000141860001417; |
rommem[3060] = 65'h06400104C6000141A; |
rommem[3061] = 65'h1EE800040E6800020; |
rommem[3062] = 65'h031FFF011040D0809; |
rommem[3063] = 65'h09A00F6B89A00F6B8; |
rommem[3064] = 65'h14600DF6831FFFD81; |
rommem[3065] = 65'h04600DF70660090D0; |
rommem[3066] = 65'h1660090F80E109000; |
rommem[3067] = 65'h1041D0405E6804000; |
rommem[3068] = 65'h131FFF905660090D8; |
rommem[3069] = 65'h0460190D0460090D8; |
rommem[3070] = 65'h1E080000004118405; |
rommem[3071] = 65'h09A00F76031FFFCCC; |
rommem[3072] = 65'h0660010A831FFFD81; |
rommem[3073] = 65'h16600109066001098; |
rommem[3074] = 65'h09A00F76E460F5F70; |
rommem[3075] = 65'h1E040003E31FFFD81; |
rommem[3076] = 65'h131FFFD5E31FFFC1A; |
rommem[3077] = 65'h19A04111B02860009; |
rommem[3078] = 65'h131FFFD5531FFFD3E; |
rommem[3079] = 65'h1AC1003FFBE101708; |
rommem[3080] = 65'h0BE007F2A9A00F78C; |
rommem[3081] = 65'h160817FFE02110009; |
rommem[3082] = 65'h160817FFF06211001; |
rommem[3083] = 65'h131FFFC4E0E840002; |
rommem[3084] = 65'h1BE1001C802968009; |
rommem[3085] = 65'h031FFFC62E0400000; |
rommem[3086] = 65'h0BE900108BE100049; |
rommem[3087] = 65'h102D1000902908009; |
rommem[3088] = 65'h131FFFC6B460190D0; |
rommem[3089] = 65'h102D48009660110D0; |
rommem[3090] = 65'h1660690D0BE00006A; |
rommem[3091] = 65'h002C0800902D48009; |
rommem[3092] = 65'h1A41FDE0304140404; |
rommem[3093] = 65'h002B50009460590D0; |
rommem[3094] = 65'h0460090D804B0AC02; |
rommem[3095] = 65'h19A00F867BEB08064; |
rommem[3096] = 65'h1660590D033FFFC0A; |
rommem[3097] = 65'h102B1000902A08009; |
rommem[3098] = 65'h031FFFC7102918009; |
rommem[3099] = 65'h002D1000902808009; |
rommem[3100] = 65'h131FFFC6B02C18009; |
rommem[3101] = 65'h1D453494CBE0079AA; |
rommem[3102] = 65'h152D7454EC4414F4C; |
rommem[3103] = 65'h0454EC5564153CE55; |
rommem[3104] = 65'h047C649D4454CD458; |
rommem[3105] = 65'h0C255534F47CF544F; |
rommem[3106] = 65'h14552CE5255544552; |
rommem[3107] = 65'h055504E49D24F46CD; |
rommem[3108] = 65'h14F50D44E495250D4; |
rommem[3109] = 65'h0C8454B4F50C3454B; |
rommem[3110] = 65'h14B4F50D7454B4F50; |
rommem[3111] = 65'h1C55942D04F5453C5; |
rommem[3112] = 65'h04C43D34C43D35953; |
rommem[3113] = 65'h1455000C6434452D2; |
rommem[3114] = 65'h0C84B454550C34B45; |
rommem[3115] = 65'h0454550D74B454550; |
rommem[3116] = 65'h053D34241C44E52CB; |
rommem[3117] = 65'h05400D25355C55A49; |
rommem[3118] = 65'h03E00D045545300CF; |
rommem[3119] = 65'h1BCBD3CBDBEBE3CBD; |
rommem[3120] = 65'h000D24F00C44E4100; |
rommem[3121] = 65'h1FFFFFFFFFFFFE440; |
rommem[3122] = 65'h0FFFFFFFFFFFFE784; |
rommem[3123] = 65'h0FFFFFFFFFFFFE38C; |
rommem[3124] = 65'h0FFFFFFFFFFFFE3A4; |
rommem[3125] = 65'h0FFFFFFFFFFFFE830; |
rommem[3126] = 65'h0FFFFFFFFFFFFE610; |
rommem[3127] = 65'h0FFFFFFFFFFFFE76C; |
rommem[3128] = 65'h0FFFFFFFFFFFFE680; |
rommem[3129] = 65'h0FFFFFFFFFFFFE3EC; |
rommem[3130] = 65'h0FFFFFFFFFFFFE520; |
rommem[3131] = 65'h1FFFFFFFFFFFFE55C; |
rommem[3132] = 65'h1FFFFFFFFFFFFE688; |
rommem[3133] = 65'h0FFFFFFFFFFFFE594; |
rommem[3134] = 65'h0FFFFFFFFFFFFE6B0; |
rommem[3135] = 65'h0FFFFFFFFFFFFE488; |
rommem[3136] = 65'h1FFFFFFFFFFFFE944; |
rommem[3137] = 65'h0FFFFFFFFFFFFE970; |
rommem[3138] = 65'h1FFFFFFFFFFFFE99C; |
rommem[3139] = 65'h0FFFFFFFFFFFFE910; |
rommem[3140] = 65'h1FFFFFFFFFFFFE39C; |
rommem[3141] = 65'h0FFFFFFFFFFFFDF64; |
rommem[3142] = 65'h0FFFFFFFFFFFFE9C8; |
rommem[3143] = 65'h0FFFFFFFFFFFFF690; |
rommem[3144] = 65'h0FFFFFFFFFFFFE40C; |
rommem[3145] = 65'h1FFFFFFFFFFFFF6A4; |
rommem[3146] = 65'h1FFFFFFFFFFFFE764; |
rommem[3147] = 65'h0FFFFFFFFFFFFEE44; |
rommem[3148] = 65'h1FFFFFFFFFFFFEE58; |
rommem[3149] = 65'h0FFFFFFFFFFFFEE6C; |
rommem[3150] = 65'h1FFFFFFFFFFFFEE34; |
rommem[3151] = 65'h0FFFFFFFFFFFFEE9C; |
rommem[3152] = 65'h0FFFFFFFFFFFFEF34; |
rommem[3153] = 65'h0FFFFFFFFFFFFEF54; |
rommem[3154] = 65'h1FFFFFFFFFFFFEE80; |
rommem[3155] = 65'h0FFFFFFFFFFFFEC58; |
rommem[3156] = 65'h1FFFFFFFFFFFFE5AC; |
rommem[3157] = 65'h0FFFFFFFFFFFFF024; |
rommem[3158] = 65'h1FFFFFFFFFFFFE5C0; |
rommem[3159] = 65'h0FFFFFFFFFFFFE5C8; |
rommem[3160] = 65'h1FFFFFFFFFFFFEAD8; |
rommem[3161] = 65'h1FFFFFFFFFFFFEAE8; |
rommem[3162] = 65'h0FFFFFFFFFFFFEAF8; |
rommem[3163] = 65'h0FFFFFFFFFFFFEB18; |
rommem[3164] = 65'h1FFFFFFFFFFFFEB08; |
rommem[3165] = 65'h0FFFFFFFFFFFFEB28; |
rommem[3166] = 65'h0FFFFFFFFFFFFEB50; |
rommem[3167] = 65'h1FFFFFFFFFFFFEA44; |
rommem[3168] = 65'h0FFFFFFFFFFFFEA54; |
rommem[3169] = 65'h1FFFFFFFFFFFFEA0C; |
rommem[3170] = 65'h0FFFFFFFFFFFFEA1C; |
rommem[3171] = 65'h09A0561889A04E0EC; |
rommem[3172] = 65'h131FFFD5503F58009; |
rommem[3173] = 65'h00285800902BF8009; |
rommem[3174] = 65'h04A808000E0C00000; |
rommem[3175] = 65'h14A9100000A840001; |
rommem[3176] = 65'h002B40009BE200069; |
rommem[3177] = 65'h1BE1181C8BE0001EA; |
rommem[3178] = 65'h1BE2081081421007F; |
rommem[3179] = 65'h002B400090AA50008; |
rommem[3180] = 65'h00A948001E0C00000; |
rommem[3181] = 65'h1BE107FC34090FFFF; |
rommem[3182] = 65'h0E0C0002EBE007E2A; |
rommem[3183] = 65'h04090FFFF0A948001; |
rommem[3184] = 65'h146A58000BE107DA3; |
rommem[3185] = 65'h131FFFBFB34B00000; |
rommem[3186] = 65'h0660090D04600DF68; |
rommem[3187] = 65'h031FFFBFB31FFF905; |
rommem[3188] = 65'h031FFFBFBBE00632A; |
rommem[3189] = 65'h16604109046045F68; |
rommem[3190] = 65'h04600909031FFF905; |
rommem[3191] = 65'h1E0400000BE106268; |
rommem[3192] = 65'h031FFFC5202848009; |
rommem[3193] = 65'h0BE900049BE100069; |
rommem[3194] = 65'h066049090BE0061AA; |
rommem[3195] = 65'h031FFFD779A940002; |
rommem[3196] = 65'h19A0561B09A04E0FE; |
rommem[3197] = 65'h131FFFA7CBE0079CA; |
rommem[3198] = 65'h131FFFBFB02128009; |
rommem[3199] = 65'h131FFFC4E02508009; |
rommem[3200] = 65'h09A00F833BE107EA9; |
rommem[3201] = 65'h031FFF905BE00610A; |
rommem[3202] = 65'h00FEF0010BE00084A; |
rommem[3203] = 65'h067EF800867E30000; |
rommem[3204] = 65'h1460090D8E1800800; |
rommem[3205] = 65'h10810800866100000; |
rommem[3206] = 65'h047EF8008BE037FCF; |
rommem[3207] = 65'h137EF801047E30000; |
rommem[3208] = 65'h10212800931FFFD3E; |
rommem[3209] = 65'h10250800931FFFBFB; |
rommem[3210] = 65'h1BE10004931FFFC4E; |
rommem[3211] = 65'h002908009BE905D68; |
rommem[3212] = 65'h00214800931FFFD1E; |
rommem[3213] = 65'h1BE10008831FFFD77; |
rommem[3214] = 65'h031FFFD77B2100313; |
rommem[3215] = 65'h0E0400000BE107FE8; |
rommem[3216] = 65'h1BE007E8A31FFFC52; |
rommem[3217] = 65'h1E0C0003A1602800B; |
rommem[3218] = 65'h031FFFD309A0264A0; |
rommem[3219] = 65'h1BE007A0A31FFF135; |
rommem[3220] = 65'h09A0264B4E0C0000D; |
rommem[3221] = 65'h031FFF13531FFFD30; |
rommem[3222] = 65'h1E0C00023BE00782A; |
rommem[3223] = 65'h031FFFD309A0264CC; |
rommem[3224] = 65'h00410140931FFFA7C; |
rommem[3225] = 65'h1E0C00024BE00012A; |
rommem[3226] = 65'h031FFFD309A0264E4; |
rommem[3227] = 65'h131FFF7D531FFFA7C; |
rommem[3228] = 65'h131FFFCA9BE00006A; |
rommem[3229] = 65'h1E0C0002CBE00010A; |
rommem[3230] = 65'h131FFFD309A026500; |
rommem[3231] = 65'h1BE007DCA31FFFBEC; |
rommem[3232] = 65'h0BE0000AA31FFF135; |
rommem[3233] = 65'h00450080931FFFA7C; |
rommem[3234] = 65'h1BE007ECA31FFFCCC; |
rommem[3235] = 65'h133FFFC0931FFFBEC; |
rommem[3236] = 65'h031FFFA7C31FFFC80; |
rommem[3237] = 65'h0BE10006931FFFC4E; |
rommem[3238] = 65'h0BE0057AA9A00F833; |
rommem[3239] = 65'h167E400000DEF0018; |
rommem[3240] = 65'h167E0800846009090; |
rommem[3241] = 65'h067E0801046009098; |
rommem[3242] = 65'h0660F1098660010A8; |
rommem[3243] = 65'h131FFFBFBBE0073EA; |
rommem[3244] = 65'h1BE10006946009098; |
rommem[3245] = 65'h0BE0055EA9A00F850; |
rommem[3246] = 65'h147E08010021F0009; |
rommem[3247] = 65'h047E0800866009098; |
rommem[3248] = 65'h047E4000066009090; |
rommem[3249] = 65'h131FFFC7309EF0018; |
rommem[3250] = 65'h031FFFC80BE007C4A; |
rommem[3251] = 65'h0660090A831FFFBDA; |
rommem[3252] = 65'h09A0562A09A04E16F; |
rommem[3253] = 65'h031FFFA7C33FFF8C8; |
rommem[3254] = 65'h19A04E172660090B8; |
rommem[3255] = 65'h033FFF8C89A0562B0; |
rommem[3256] = 65'h1BE00004A31FFFA7C; |
rommem[3257] = 65'h0660090B0E0400001; |
rommem[3258] = 65'h1660110C046011090; |
rommem[3259] = 65'h005E00C09660410C8; |
rommem[3260] = 65'h0BE00004A460310A8; |
rommem[3261] = 65'h0463100000A318028; |
rommem[3262] = 65'h1BE237FA9BE2000E8; |
rommem[3263] = 65'h10A31002804300409; |
rommem[3264] = 65'h031FFFC7105E00C09; |
rommem[3265] = 65'h1BE00786A09EF0028; |
rommem[3266] = 65'h031FFFB2EE0400000; |
rommem[3267] = 65'h09A00F80FBE100069; |
rommem[3268] = 65'h102148009BE00504A; |
rommem[3269] = 65'h1BE100069460090A8; |
rommem[3270] = 65'h0BE004FAA9A00F7FC; |
rommem[3271] = 65'h031FFFC73BE148068; |
rommem[3272] = 65'h046908000BE007F4A; |
rommem[3273] = 65'h004110403460110B0; |
rommem[3274] = 65'h1460190B866908000; |
rommem[3275] = 65'h1BE1180E0BE200063; |
rommem[3276] = 65'h0BE1180A3BE00004A; |
rommem[3277] = 65'h166041090460410C0; |
rommem[3278] = 65'h0BE00752A460410C8; |
rommem[3279] = 65'h1BE0074EA31FFFC73; |
rommem[3280] = 65'h1BE106AC931FFFA7C; |
rommem[3281] = 65'h0E040000002848009; |
rommem[3282] = 65'h1BE104B8331FFFC63; |
rommem[3283] = 65'h1460F10A0BE0069EA; |
rommem[3284] = 65'h16604109047E40010; |
rommem[3285] = 65'h10BEF002847E40008; |
rommem[3286] = 65'h067E280200FEF0028; |
rommem[3287] = 65'h031FFFCA967E40000; |
rommem[3288] = 65'h1E0400001BE0000CA; |
rommem[3289] = 65'h1BE1003E831FFFB2E; |
rommem[3290] = 65'h1BE0001AA02150009; |
rommem[3291] = 65'h1E040000167E40008; |
rommem[3292] = 65'h1BE10006931FFFB2E; |
rommem[3293] = 65'h0BE0049EA9A00F7DF; |
rommem[3294] = 65'h04082800002150009; |
rommem[3295] = 65'h047E0800860800000; |
rommem[3296] = 65'h06082800031FFFC93; |
rommem[3297] = 65'h14600909067E40008; |
rommem[3298] = 65'h0E07FFFFF67E08010; |
rommem[3299] = 65'h1660F10A066009090; |
rommem[3300] = 65'h0E040003A67E50018; |
rommem[3301] = 65'h19A04111B31FFFC1A; |
rommem[3302] = 65'h147E5001831FFFA7C; |
rommem[3303] = 65'h047E0801066A08000; |
rommem[3304] = 65'h147E4000866009090; |
rommem[3305] = 65'h19A026758E0C0002C; |
rommem[3306] = 65'h1BE007B2A31FFFD30; |
rommem[3307] = 65'h109EF002847E28020; |
rommem[3308] = 65'h04080800033FFF946; |
rommem[3309] = 65'h031FFFBDAB01F6C0D; |
rommem[3310] = 65'h19A026518E0C0002C; |
rommem[3311] = 65'h0BE007F8A31FFFD30; |
rommem[3312] = 65'h146045F68BE006CCA; |
rommem[3313] = 65'h131FFF7D7E040000D; |
rommem[3314] = 65'h0BE107FE231FFF7D8; |
rommem[3315] = 65'h0B0100D1AB0100E40; |
rommem[3316] = 65'h031FFF9F6B21FFC3A; |
rommem[3317] = 65'h00610900160808000; |
rommem[3318] = 65'h00A84000260808001; |
rommem[3319] = 65'h0BE107FE231FFF7D8; |
rommem[3320] = 65'h10A84000160808000; |
rommem[3321] = 65'h1BE007E2AB21FFC0D; |
rommem[3322] = 65'h0BE00418A660410D0; |
rommem[3323] = 65'h167E280000FEF0018; |
rommem[3324] = 65'h167EF801067E30008; |
rommem[3325] = 65'h0E1400000E1800003; |
rommem[3326] = 65'h0BE107FE231FFF7D8; |
rommem[3327] = 65'h10652880031FFFA07; |
rommem[3328] = 65'h1BE037F6F04509409; |
rommem[3329] = 65'h147EF801002508009; |
rommem[3330] = 65'h147E2800047E30008; |
rommem[3331] = 65'h0A410023937EF8018; |
rommem[3332] = 65'h10E1080300E108007; |
rommem[3333] = 65'h137EF80001410800F; |
rommem[3334] = 65'h0460490D046045F68; |
rommem[3335] = 65'h0BE8481C531FFFA23; |
rommem[3336] = 65'h031FFF7D7E040003A; |
rommem[3337] = 65'h14A8100014A808000; |
rommem[3338] = 65'h10411040906211000; |
rommem[3339] = 65'h031FFFA2B0A840002; |
rommem[3340] = 65'h00A84000140808000; |
rommem[3341] = 65'h031FFF7D7B01FF40D; |
rommem[3342] = 65'h1E0400040BE007F8A; |
rommem[3343] = 65'h031FFFA2331FFF7D7; |
rommem[3344] = 65'h131FFF7D7E040001A; |
rommem[3345] = 65'h00FEF0008BE003BEA; |
rommem[3346] = 65'h0E040000D67EF8000; |
rommem[3347] = 65'h0E040000A31FFF7D7; |
rommem[3348] = 65'h047EF800031FFF7D7; |
rommem[3349] = 65'h10DEF001037EF8008; |
rommem[3350] = 65'h067E2800867EF8000; |
rommem[3351] = 65'h1021200099A02910F; |
rommem[3352] = 65'h10642080102408009; |
rommem[3353] = 65'h06050800031FFFA3F; |
rommem[3354] = 65'h1125091000E528001; |
rommem[3355] = 65'h10A528001BE107F41; |
rommem[3356] = 65'h031FFF7D740508000; |
rommem[3357] = 65'h0BE107F801250910F; |
rommem[3358] = 65'h047EF800047E28008; |
rommem[3359] = 65'h01410800F37EF8010; |
rommem[3360] = 65'h008108007A010020A; |
rommem[3361] = 65'h137EF80000A108030; |
rommem[3362] = 65'h031FFFA7C0FEF0008; |
rommem[3363] = 65'h19A02693CE0C0002C; |
rommem[3364] = 65'h167E0800031FFFD30; |
rommem[3365] = 65'h047E1000031FFFA7C; |
rommem[3366] = 65'h10BEF000860208000; |
rommem[3367] = 65'h19A00F778BE005F0A; |
rommem[3368] = 65'h00FEF0008BE00374A; |
rommem[3369] = 65'h0E0C0002C31FFFA7C; |
rommem[3370] = 65'h131FFFD309A02693C; |
rommem[3371] = 65'h131FFFA7C67E08000; |
rommem[3372] = 65'h16220800047E10000; |
rommem[3373] = 65'h033FFF9460BEF0008; |
rommem[3374] = 65'h031FFFA7C0FEF0008; |
rommem[3375] = 65'h19A02693CE0C0002C; |
rommem[3376] = 65'h167E0800031FFFD30; |
rommem[3377] = 65'h047E1000031FFFA7C; |
rommem[3378] = 65'h00BEF000864208000; |
rommem[3379] = 65'h10FEF000833FFF946; |
rommem[3380] = 65'h0E0C0002C31FFFA7C; |
rommem[3381] = 65'h131FFFD309A02693C; |
rommem[3382] = 65'h131FFFA7C67E08000; |
rommem[3383] = 65'h06620800047E10000; |
rommem[3384] = 65'h033FFF9460BEF0008; |
rommem[3385] = 65'h031FFFA7C0FEF0008; |
rommem[3386] = 65'h19A00F7CDBE100069; |
rommem[3387] = 65'h167E40000BE00328A; |
rommem[3388] = 65'h147E40000341F8000; |
rommem[3389] = 65'h1BE00596A0BEF0008; |
rommem[3390] = 65'h167EF80000FEF0010; |
rommem[3391] = 65'h067E0800431FFFA8A; |
rommem[3392] = 65'h19A0563089A04E185; |
rommem[3393] = 65'h031FFFA8A33FFF8C8; |
rommem[3394] = 65'h10411040947E10008; |
rommem[3395] = 65'h147E08008BE007F2A; |
rommem[3396] = 65'h037EF801047EF8000; |
rommem[3397] = 65'h167EF80000FEF0010; |
rommem[3398] = 65'h167E0800831FFFAAF; |
rommem[3399] = 65'h19A0562F89A04E181; |
rommem[3400] = 65'h131FFFAAF33FFF8C8; |
rommem[3401] = 65'h00411040847E10008; |
rommem[3402] = 65'h147E08008BE007F2A; |
rommem[3403] = 65'h037EF801047EF8000; |
rommem[3404] = 65'h1A6100339A0100430; |
rommem[3405] = 65'h037EF8000E0400001; |
rommem[3406] = 65'h137EF8000E0400000; |
rommem[3407] = 65'h1A410035AA0100641; |
rommem[3408] = 65'h1A610037AA0100461; |
rommem[3409] = 65'h037EF8000E0400001; |
rommem[3410] = 65'h137EF8000E0400000; |
rommem[3411] = 65'h167EF80000FEF0008; |
rommem[3412] = 65'h131FFFA9804100809; |
rommem[3413] = 65'h004200409BE100069; |
rommem[3414] = 65'h047EF800031FFFA9E; |
rommem[3415] = 65'h00FEF001037EF8008; |
rommem[3416] = 65'h031FFFADE67EF8000; |
rommem[3417] = 65'h19A04E17767E08008; |
rommem[3418] = 65'h133FFF8C89A0562C0; |
rommem[3419] = 65'h031FFFAD747E08008; |
rommem[3420] = 65'h1BE0002AABE208321; |
rommem[3421] = 65'h031FFFAD747E08008; |
rommem[3422] = 65'h1BE00022ABE2082A9; |
rommem[3423] = 65'h031FFFAD747E08008; |
rommem[3424] = 65'h1BE0001AABE208223; |
rommem[3425] = 65'h031FFFAD747E08008; |
rommem[3426] = 65'h0BE00012ABE2081A2; |
rommem[3427] = 65'h031FFFAD747E08008; |
rommem[3428] = 65'h1BE0000AABE208128; |
rommem[3429] = 65'h031FFFAD747E08008; |
rommem[3430] = 65'h1BE00002ABE2080A0; |
rommem[3431] = 65'h0E040000047EF8000; |
rommem[3432] = 65'h047EF800037EF8010; |
rommem[3433] = 65'h137EF8010E0400001; |
rommem[3434] = 65'h147EF800047E08008; |
rommem[3435] = 65'h00FEF001037EF8010; |
rommem[3436] = 65'h167E0800867EF8000; |
rommem[3437] = 65'h047E1000831FFFADE; |
rommem[3438] = 65'h037EF801047EF8000; |
rommem[3439] = 65'h167EF80000FEF0010; |
rommem[3440] = 65'h09A026B98E0C0002D; |
rommem[3441] = 65'h0E040000031FFFD30; |
rommem[3442] = 65'h0BE00020A67E00008; |
rommem[3443] = 65'h09A026BA4E0C0002B; |
rommem[3444] = 65'h031FFFAFB31FFFD30; |
rommem[3445] = 65'h1E0C0002B67E08008; |
rommem[3446] = 65'h131FFFD309A026BC8; |
rommem[3447] = 65'h147E1000831FFFAFB; |
rommem[3448] = 65'h1BE007F2A04110402; |
rommem[3449] = 65'h09A026BE0E0C0002D; |
rommem[3450] = 65'h031FFFAFB31FFFD30; |
rommem[3451] = 65'h0BE007F0A02108006; |
rommem[3452] = 65'h147EF800047E08008; |
rommem[3453] = 65'h00FEF001037EF8010; |
rommem[3454] = 65'h131FFFB1167EF8000; |
rommem[3455] = 65'h0E0C0002A67E08008; |
rommem[3456] = 65'h131FFFD309A026C18; |
rommem[3457] = 65'h147E1000831FFFB11; |
rommem[3458] = 65'h1BE007F2A04110419; |
rommem[3459] = 65'h09A026C38E0C0002F; |
rommem[3460] = 65'h031FFFB1131FFFD30; |
rommem[3461] = 65'h047E0800804100809; |
rommem[3462] = 65'h1BE007E2A0411041B; |
rommem[3463] = 65'h147EF800047E08008; |
rommem[3464] = 65'h10FEF001837EF8010; |
rommem[3465] = 65'h09A04E14E67EF8000; |
rommem[3466] = 65'h033FFF8C89A056258; |
rommem[3467] = 65'h031FFFB2EE0400000; |
rommem[3468] = 65'h046108000BE100088; |
rommem[3469] = 65'h137EF801847EF8000; |
rommem[3470] = 65'h1BE20004931FFFD3E; |
rommem[3471] = 65'h047EF800031FFFB21; |
rommem[3472] = 65'h10FEF000837EF8018; |
rommem[3473] = 65'h0E0C0002867EF8000; |
rommem[3474] = 65'h031FFFD309A026CB0; |
rommem[3475] = 65'h0E0C0002931FFFA7C; |
rommem[3476] = 65'h031FFFD309A026CB0; |
rommem[3477] = 65'h037EF800847EF8000; |
rommem[3478] = 65'h0BE001BAA9A00F6F5; |
rommem[3479] = 65'h067EF80000FEF0018; |
rommem[3480] = 65'h10410140967E28008; |
rommem[3481] = 65'h14A80800031FFFD55; |
rommem[3482] = 65'h0B2100F40A0101740; |
rommem[3483] = 65'h131FFFB210A840001; |
rommem[3484] = 65'h10FEF001806108600; |
rommem[3485] = 65'h167EF800067E08008; |
rommem[3486] = 65'h147EF800031FFFBD5; |
rommem[3487] = 65'h1BE20804447E10008; |
rommem[3488] = 65'h19A0090D833FFFC07; |
rommem[3489] = 65'h0BE0000AA04110405; |
rommem[3490] = 65'h1BE10006831FFFB4F; |
rommem[3491] = 65'h131FFFB7502510009; |
rommem[3492] = 65'h047EF800047E28008; |
rommem[3493] = 65'h147E2800837EF8018; |
rommem[3494] = 65'h0E040000047EF8000; |
rommem[3495] = 65'h00FEF001837EF8018; |
rommem[3496] = 65'h067E2801067EF8000; |
rommem[3497] = 65'h167E0800840808000; |
rommem[3498] = 65'h1BE10038831FFFA9E; |
rommem[3499] = 65'h00A840001E1400005; |
rommem[3500] = 65'h031FFFAA640808000; |
rommem[3501] = 65'h047E08008BE100168; |
rommem[3502] = 65'h04081000006109000; |
rommem[3503] = 65'h067E0800804110409; |
rommem[3504] = 65'h00A840001BE02FEEF; |
rommem[3505] = 65'h031FFFAA640808000; |
rommem[3506] = 65'h140808000BE107FA9; |
rommem[3507] = 65'h0B0100324B0100425; |
rommem[3508] = 65'h00E840001E0400000; |
rommem[3509] = 65'h047E100080A840001; |
rommem[3510] = 65'h10411040906211000; |
rommem[3511] = 65'h047E2801047EF8000; |
rommem[3512] = 65'h147EF800037EF8018; |
rommem[3513] = 65'h0E040000047E28010; |
rommem[3514] = 65'h10FEF001037EF8018; |
rommem[3515] = 65'h167E3800867EF8000; |
rommem[3516] = 65'h046338000460190D8; |
rommem[3517] = 65'h0BE138128BE700108; |
rommem[3518] = 65'h0460390F808318008; |
rommem[3519] = 65'h1E07FF748BE33FF60; |
rommem[3520] = 65'h0BE00112AF04FFFFF; |
rommem[3521] = 65'h166308000BE2000C8; |
rommem[3522] = 65'h047EF80000A308008; |
rommem[3523] = 65'h137EF801047E38008; |
rommem[3524] = 65'h147E3800847EF8000; |
rommem[3525] = 65'h1E04000000BEF0010; |
rommem[3526] = 65'h131FFFB2137EF8000; |
rommem[3527] = 65'h147EF80004A108000; |
rommem[3528] = 65'h131FFFB2137EF8018; |
rommem[3529] = 65'h14C1080001410FFFE; |
rommem[3530] = 65'h137EF801847EF8000; |
rommem[3531] = 65'h11410FFFC31FFFB21; |
rommem[3532] = 65'h047EF80004E108000; |
rommem[3533] = 65'h131FFFB2137EF8018; |
rommem[3534] = 65'h1461080001410FFF8; |
rommem[3535] = 65'h137EF801847EF8000; |
rommem[3536] = 65'h067E4000831FFFB21; |
rommem[3537] = 65'h0342F800046011028; |
rommem[3538] = 65'h147EF800047E40008; |
rommem[3539] = 65'h131FFFB2137EF8018; |
rommem[3540] = 65'h1BE100100BE100168; |
rommem[3541] = 65'h10000005004100809; |
rommem[3542] = 65'h031FFFBB7020088A8; |
rommem[3543] = 65'h147EF80000A108001; |
rommem[3544] = 65'h19A00F7B937EF8018; |
rommem[3545] = 65'h100000050BE000B0A; |
rommem[3546] = 65'h047EF8000020088A8; |
rommem[3547] = 65'h10FEF002037EF8018; |
rommem[3548] = 65'h167E2800867E18000; |
rommem[3549] = 65'h067E3801867E30010; |
rommem[3550] = 65'h10452940A1603803F; |
rommem[3551] = 65'h1061082020463180A; |
rommem[3552] = 65'h10663020014118001; |
rommem[3553] = 65'h11410FFFE04619809; |
rommem[3554] = 65'h104611805BE230047; |
rommem[3555] = 65'h102608009BE03FF2F; |
rommem[3556] = 65'h147E2800847E18000; |
rommem[3557] = 65'h047E3801847E30010; |
rommem[3558] = 65'h031FFFB2137EF8020; |
rommem[3559] = 65'h047EF800002108007; |
rommem[3560] = 65'h131FFFB2137EF8018; |
rommem[3561] = 65'h047EF800002108008; |
rommem[3562] = 65'h0460090D837EF8018; |
rommem[3563] = 65'h004110405460110D0; |
rommem[3564] = 65'h137EF801847EF8000; |
rommem[3565] = 65'h167EF80000FEF0010; |
rommem[3566] = 65'h131FFFB2EE0400001; |
rommem[3567] = 65'h19A00F7A2BE100069; |
rommem[3568] = 65'h167E08008BE00054A; |
rommem[3569] = 65'h19A026FACE0C0003D; |
rommem[3570] = 65'h031FFFA7C31FFFD30; |
rommem[3571] = 65'h16620800047E10008; |
rommem[3572] = 65'h147EF800004200409; |
rommem[3573] = 65'h0BE0003CA37EF8010; |
rommem[3574] = 65'h167EF80000FEF0008; |
rommem[3575] = 65'h09A026FCCE0C0003A; |
rommem[3576] = 65'h10BEF000831FFFD30; |
rommem[3577] = 65'h1E0C0000DBE0020AA; |
rommem[3578] = 65'h131FFFD309A026FE4; |
rommem[3579] = 65'h10BEF000847EF8000; |
rommem[3580] = 65'h047EF8000BE001EAA; |
rommem[3581] = 65'h00FEF000837EF8008; |
rommem[3582] = 65'h131FFFD5567EF8000; |
rommem[3583] = 65'h1B010040D40808000; |
rommem[3584] = 65'h1F04FFFFFE07FF87C; |
rommem[3585] = 65'h047EF800033FFFC0A; |
rommem[3586] = 65'h09A00F86737EF8008; |
rommem[3587] = 65'h09A00F6FDBE00008A; |
rommem[3588] = 65'h19A00F6F5BE00004A; |
rommem[3589] = 65'h14600909031FFFD81; |
rommem[3590] = 65'h1B01D9AFFBE107EA8; |
rommem[3591] = 65'h16080000040828000; |
rommem[3592] = 65'h131FFFD1E46009090; |
rommem[3593] = 65'h16082800004101809; |
rommem[3594] = 65'h131FFF7D5E040003F; |
rommem[3595] = 65'h10E608001E0800000; |
rommem[3596] = 65'h133FFF80131FFFC93; |
rommem[3597] = 65'h167EF80000FEF0010; |
rommem[3598] = 65'h031FFF7D567E28008; |
rommem[3599] = 65'h060009052E0400001; |
rommem[3600] = 65'h031FFF7D5E0400020; |
rommem[3601] = 65'h1F2000000E200111B; |
rommem[3602] = 65'h0BE107FE831FFFD77; |
rommem[3603] = 65'h0B0101418B0100B08; |
rommem[3604] = 65'h0A81FFB20B010020D; |
rommem[3605] = 65'h00884000160808000; |
rommem[3606] = 65'h14080FFFF31FFF7D5; |
rommem[3607] = 65'h01280916AB010190D; |
rommem[3608] = 65'h1E0400008BE107E80; |
rommem[3609] = 65'h0E040002031FFF7D5; |
rommem[3610] = 65'h11280911B31FFF7D5; |
rommem[3611] = 65'h1E0400008BE107DC2; |
rommem[3612] = 65'h00C84000131FFF7D5; |
rommem[3613] = 65'h004800409BE007D4A; |
rommem[3614] = 65'h0BE5001080E12911B; |
rommem[3615] = 65'h031FFF7D5E0400008; |
rommem[3616] = 65'h031FFF7D5E0400020; |
rommem[3617] = 65'h031FFF7D5E0400008; |
rommem[3618] = 65'h19A04111BBE02FF4F; |
rommem[3619] = 65'h0E0400000BE007BCA; |
rommem[3620] = 65'h1E040000A60009052; |
rommem[3621] = 65'h147EF800031FFF7D5; |
rommem[3622] = 65'h037EF801047E28008; |
rommem[3623] = 65'h19A00F78CAC1003FF; |
rommem[3624] = 65'h14604DF68BE00774A; |
rommem[3625] = 65'h10EA50001460510D0; |
rommem[3626] = 65'h04A918000BE950127; |
rommem[3627] = 65'h0062110004A910001; |
rommem[3628] = 65'h0BE11012704218809; |
rommem[3629] = 65'h10410840ABE1100C8; |
rommem[3630] = 65'h00494A40A37EF8000; |
rommem[3631] = 65'h137EF80000410840A; |
rommem[3632] = 65'h037EF8000E0400001; |
rommem[3633] = 65'h14A9100000A948002; |
rommem[3634] = 65'h0B22FFE0D0A948001; |
rommem[3635] = 65'h040120000BE007D8A; |
rommem[3636] = 65'h00810800160220000; |
rommem[3637] = 65'h1BE11FF8908210001; |
rommem[3638] = 65'h00C10800137EF8000; |
rommem[3639] = 65'h0401200000C210001; |
rommem[3640] = 65'h1BE11FF8960220000; |
rommem[3641] = 65'h147E0800037EF8000; |
rommem[3642] = 65'h1BE100148660090A8; |
rommem[3643] = 65'h0660090C847E08020; |
rommem[3644] = 65'h0660090C047E08018; |
rommem[3645] = 65'h1660090B847E08010; |
rommem[3646] = 65'h0660090B047E08008; |
rommem[3647] = 65'h137EF800837EF8028; |
rommem[3648] = 65'h00A108028460090F8; |
rommem[3649] = 65'h1460090A8BFE0F0A4; |
rommem[3650] = 65'h10FEF0028BE100188; |
rommem[3651] = 65'h1460090C867E08000; |
rommem[3652] = 65'h1460090C067E08020; |
rommem[3653] = 65'h0460090B867E08018; |
rommem[3654] = 65'h0460090B067E08010; |
rommem[3655] = 65'h137EF800067E08008; |
rommem[3656] = 65'h167E080000FEF0008; |
rommem[3657] = 65'h10FEF002037EF8000; |
rommem[3658] = 65'h167E2800867E28000; |
rommem[3659] = 65'h167EF801867E38010; |
rommem[3660] = 65'h00223000902128009; |
rommem[3661] = 65'h10A5280014A538000; |
rommem[3662] = 65'h102708009BE7300C8; |
rommem[3663] = 65'h0B27FFB0D31FFF7D5; |
rommem[3664] = 65'h131FFF7D5E040000A; |
rommem[3665] = 65'h10250800902710009; |
rommem[3666] = 65'h147E3801047EF8018; |
rommem[3667] = 65'h147E2800047E28008; |
rommem[3668] = 65'h00FEF000837EF8020; |
rommem[3669] = 65'h0E0C0002267EF8000; |
rommem[3670] = 65'h131FFFD309A0272D4; |
rommem[3671] = 65'h104800409E0800022; |
rommem[3672] = 65'h00410200931FFFC93; |
rommem[3673] = 65'h10BEF0008B2200D0A; |
rommem[3674] = 65'h1E0C00027BE00072A; |
rommem[3675] = 65'h131FFFD309A0272E8; |
rommem[3676] = 65'h0BE007ECAE0800027; |
rommem[3677] = 65'h09A027308E0C0005F; |
rommem[3678] = 65'h1E040000D31FFFD30; |
rommem[3679] = 65'h147EF800031FFF7D5; |
rommem[3680] = 65'h035F000040BEF0008; |
rommem[3681] = 65'h037EF800847EF8000; |
rommem[3682] = 65'h167EF80000FEF0008; |
rommem[3683] = 65'h031FFF7D5E040000D; |
rommem[3684] = 65'h131FFF7D5E040000A; |
rommem[3685] = 65'h037EF800847EF8000; |
rommem[3686] = 65'h167E180000FEF0028; |
rommem[3687] = 65'h067E3001067E28008; |
rommem[3688] = 65'h167EF802067E38018; |
rommem[3689] = 65'h1021300099A039100; |
rommem[3690] = 65'h1BE10006302228009; |
rommem[3691] = 65'h10E52800102108006; |
rommem[3692] = 65'h10411881C1601800A; |
rommem[3693] = 65'h00A2100301E10800A; |
rommem[3694] = 65'h10A73800160710000; |
rommem[3695] = 65'h1BE107F490E528001; |
rommem[3696] = 65'h1E0400020BE500082; |
rommem[3697] = 65'h0BE02FFCF31FFF7D5; |
rommem[3698] = 65'h1E040002DBE600061; |
rommem[3699] = 65'h10E73800131FFF7D5; |
rommem[3700] = 65'h031FFF7D540708000; |
rommem[3701] = 65'h0BE107F8712709100; |
rommem[3702] = 65'h147E3801847EF8020; |
rommem[3703] = 65'h047E2800847E30010; |
rommem[3704] = 65'h037EF802847E18000; |
rommem[3705] = 65'h167E280000FEF0028; |
rommem[3706] = 65'h167E3801067E30008; |
rommem[3707] = 65'h167EF802067E40018; |
rommem[3708] = 65'h1041018099A039100; |
rommem[3709] = 65'h002120009E1400014; |
rommem[3710] = 65'h102420006BE400083; |
rommem[3711] = 65'h0E20000140E528001; |
rommem[3712] = 65'h11410800F02408009; |
rommem[3713] = 65'h00A108037A010030A; |
rommem[3714] = 65'h008108030BE00004A; |
rommem[3715] = 65'h10A73800160708000; |
rommem[3716] = 65'h0064208010E528001; |
rommem[3717] = 65'h0BE047EAFBE400048; |
rommem[3718] = 65'h1E0400020BE500082; |
rommem[3719] = 65'h0BE02FFCF31FFF7D5; |
rommem[3720] = 65'h0E040002DBE600063; |
rommem[3721] = 65'h10E73800131FFF7D5; |
rommem[3722] = 65'h031FFF7D540708000; |
rommem[3723] = 65'h1BE107F8312709100; |
rommem[3724] = 65'h147E4001847EF8020; |
rommem[3725] = 65'h147E3000847E38010; |
rommem[3726] = 65'h037EF802847E28000; |
rommem[3727] = 65'h067E280000FEF0010; |
rommem[3728] = 65'h10812800267EF8008; |
rommem[3729] = 65'h14A517FFF4A50FFFE; |
rommem[3730] = 65'h10411040906211000; |
rommem[3731] = 65'h131FFFCCCE0800000; |
rommem[3732] = 65'h031FFF7D5E0400020; |
rommem[3733] = 65'h004500409E0800000; |
rommem[3734] = 65'h047EF800831FFFC93; |
rommem[3735] = 65'h137EF801047E28000; |
rommem[3736] = 65'h167EF80000FEF0010; |
rommem[3737] = 65'h031FFFD5567E08008; |
rommem[3738] = 65'h1BE3080A840808000; |
rommem[3739] = 65'h147EF800047E08008; |
rommem[3740] = 65'h1344000000BEF0010; |
rommem[3741] = 65'h047E080080A840001; |
rommem[3742] = 65'h037EF801047EF8000; |
rommem[3743] = 65'h167EF80000FEF0008; |
rommem[3744] = 65'h0E040000031FFFD55; |
rommem[3745] = 65'h040818000E0800000; |
rommem[3746] = 65'h1AE300E39A8300F30; |
rommem[3747] = 65'h1EEBFFFFFE6BFFFFF; |
rommem[3748] = 65'h1040D1009F6807FFF; |
rommem[3749] = 65'h19A00F721BE120066; |
rommem[3750] = 65'h01A10800ABE0057CA; |
rommem[3751] = 65'h11431800F0A840001; |
rommem[3752] = 65'h00A21000104118403; |
rommem[3753] = 65'h147EF8000BE007E2A; |
rommem[3754] = 65'h00FEF000837EF8008; |
rommem[3755] = 65'h04080800067E08000; |
rommem[3756] = 65'h1B2100300B0100220; |
rommem[3757] = 65'h1BE007F8A0A840001; |
rommem[3758] = 65'h037EF800847E08000; |
rommem[3759] = 65'h167EF80000FEF0008; |
rommem[3760] = 65'h0E0C000009A04111B; |
rommem[3761] = 65'h00A84000140808000; |
rommem[3762] = 65'h0B0100622B0100D0D; |
rommem[3763] = 65'h1BE307F69B0100527; |
rommem[3764] = 65'h06080FFFF31FFFD73; |
rommem[3765] = 65'h1BE300069BE007F0A; |
rommem[3766] = 65'h0BE007EAA02118009; |
rommem[3767] = 65'h1E0C00000BE30FE89; |
rommem[3768] = 65'h147EF8000BE007E4A; |
rommem[3769] = 65'h0A010036137EF8008; |
rommem[3770] = 65'h10E108020A610027A; |
rommem[3771] = 65'h10FEF000837EF8000; |
rommem[3772] = 65'h031FFF7D667EF8000; |
rommem[3773] = 65'h1B2100303B01003FF; |
rommem[3774] = 65'h00410840A33FFF801; |
rommem[3775] = 65'h037EF800847EF8000; |
rommem[3776] = 65'h10FEF0010E07FF703; |
rommem[3777] = 65'h067EF800867E28000; |
rommem[3778] = 65'h10A52800102128009; |
rommem[3779] = 65'h1BE1000684A50FFFF; |
rommem[3780] = 65'h1BE007F8A31FFF7D5; |
rommem[3781] = 65'h147EF800802508009; |
rommem[3782] = 65'h137EF801047E28000; |
rommem[3783] = 65'h067E280000FEF0010; |
rommem[3784] = 65'h00212800967EF8008; |
rommem[3785] = 65'h04050FFFF0A528001; |
rommem[3786] = 65'h031FFF7D7BE100068; |
rommem[3787] = 65'h002508009BE007F8A; |
rommem[3788] = 65'h047E2800047EF8008; |
rommem[3789] = 65'h133FFF07F37EF8010; |
rommem[3790] = 65'h031FFEDA433FFEF07; |
rommem[3791] = 65'h11410807FB01003FF; |
rommem[3792] = 65'h10410840A37EF8000; |
rommem[3793] = 65'h133FFED5C37EF8000; |
rommem[3794] = 65'h0BE00742A31FFF011; |
rommem[3795] = 65'h037EF800037EF8000; |
rommem[3796] = 65'h0BE0073AA37EF8000; |
rommem[3797] = 65'h1460F1088BE004C0A; |
rommem[3798] = 65'h037EF800847EF8000; |
rommem[3799] = 65'h0726F747061520A0D; |
rommem[3800] = 65'h020796E6954203436; |
rommem[3801] = 65'h13176204349534142; |
rommem[3802] = 65'h0202943280A0D302E; |
rommem[3803] = 65'h16F52202033313032; |
rommem[3804] = 65'h06E69462074726562; |
rommem[3805] = 65'h10A0D000A0A0D6863; |
rommem[3806] = 65'h1616857000A0D4B4F; |
rommem[3807] = 65'h1726F53000A0D3F74; |
rommem[3808] = 65'h16F43000A0D2E7972; |
rommem[3809] = 65'h04C4620746361706D; |
rommem[3810] = 65'h16461657220485341; |
rommem[3811] = 65'h00A0D726F72726520; |
rommem[3812] = 65'h0207265626D754E00; |
rommem[3813] = 65'h062206F6F74207369; |
rommem[3814] = 65'h1766944000A0D6769; |
rommem[3815] = 65'h17962206E6F697369; |
rommem[3816] = 65'h1000A0D6F72657A20; |
rommem[3817] = 65'h17620666F2074754F; |
rommem[3818] = 65'h020656C6261697261; |
rommem[3819] = 65'h0000A0D6563617073; |
rommem[3820] = 65'h16620736574796220; |
rommem[3821] = 65'h00A0D000A0D656572; |
rommem[3822] = 65'h1000A0D7964616552; |
rommem[3823] = 65'h16E69746365707845; |
rommem[3824] = 65'h06D6D6F6320612067; |
rommem[3825] = 65'h0656E694C000A0D61; |
rommem[3826] = 65'h0207265626D756E20; |
rommem[3827] = 65'h00D676962206F6F74; |
rommem[3828] = 65'h0746365707845000A; |
rommem[3829] = 65'h16176206120676E69; |
rommem[3830] = 65'h10A0D656C62616972; |
rommem[3831] = 65'h164616220444E5200; |
rommem[3832] = 65'h174656D6172617020; |
rommem[3833] = 65'h1535953000A0D7265; |
rommem[3834] = 65'h06464612064616220; |
rommem[3835] = 65'h049000A0D73736572; |
rommem[3836] = 65'h1707865205455504E; |
rommem[3837] = 65'h06120676E69746365; |
rommem[3838] = 65'h16C62616972617620; |
rommem[3839] = 65'h05458454E000A0D65; |
rommem[3840] = 65'h174756F6874697720; |
rommem[3841] = 65'h14E000A0D524F4620; |
rommem[3842] = 65'h16570786520545845; |
rommem[3843] = 65'h1206120676E697463; |
rommem[3844] = 65'h02064656E69666564; |
rommem[3845] = 65'h0656C626169726176; |
rommem[3846] = 65'h12F4F544F47000A0D; |
rommem[3847] = 65'h06162204255534F47; |
rommem[3848] = 65'h16E20656E696C2064; |
rommem[3849] = 65'h0000A0D7265626D75; |
rommem[3850] = 65'h177204E5255544552; |
rommem[3851] = 65'h1472074756F687469; |
rommem[3852] = 65'h050000A0D4255534F; |
rommem[3853] = 65'h069206D6172676F72; |
rommem[3854] = 65'h06962206F6F742073; |
rommem[3855] = 65'h172747845000A0D67; |
rommem[3856] = 65'h16361726168632061; |
rommem[3857] = 65'h0206E6F2073726574; |
rommem[3858] = 65'h06E676920656E696C; |
rommem[3859] = 65'h000000A0D6465726F; |
rommem[3860] = 65'h10000000033FFF20A; |
rommem[3861] = 65'h00000000000000000; |
rommem[3862] = 65'h1E6AA555504002009; |
rommem[3863] = 65'h1F68AAAA5EE9556AA; |
rommem[3864] = 65'h166808000040D0409; |
rommem[3865] = 65'h004110C0646810000; |
rommem[3866] = 65'h10A840008BE3000C9; |
rommem[3867] = 65'h0EE800010E6800000; |
rommem[3868] = 65'h0BE307F00048D0C06; |
rommem[3869] = 65'h00400200904802809; |
rommem[3870] = 65'h0E6AA555546810000; |
rommem[3871] = 65'h1F68AAAA5EE9556AA; |
rommem[3872] = 65'h1BE3000C9042D0C06; |
rommem[3873] = 65'h0E680000008840008; |
rommem[3874] = 65'h1048D0C06EE800004; |
rommem[3875] = 65'h0BE850389BE307EC0; |
rommem[3876] = 65'h1E695AAAA04002009; |
rommem[3877] = 65'h1F685555AEEAAA955; |
rommem[3878] = 65'h166808000040D0409; |
rommem[3879] = 65'h004110C0646810000; |
rommem[3880] = 65'h008840008BE3000C9; |
rommem[3881] = 65'h0EE800004E6800000; |
rommem[3882] = 65'h0BE307F00048D0C06; |
rommem[3883] = 65'h10400200904802C09; |
rommem[3884] = 65'h0E695AAAA46810000; |
rommem[3885] = 65'h1F685555AEEAAA955; |
rommem[3886] = 65'h1BE3000C9042D0C06; |
rommem[3887] = 65'h0E680000008840008; |
rommem[3888] = 65'h1048D0C06EE800004; |
rommem[3889] = 65'h0BE858048BE307EC0; |
rommem[3890] = 65'h1BE8500480485A014; |
rommem[3891] = 65'h16604040004852014; |
rommem[3892] = 65'h09A00FA3B37EF8000; |
rommem[3893] = 65'h0020085E831FFF122; |
rommem[3894] = 65'h00000002831FFF169; |
rommem[3895] = 65'h0E6A0010033FFEC0B; |
rommem[3896] = 65'h0040D7809EE800400; |
rommem[3897] = 65'h131FFF1229A00FA20; |
rommem[3898] = 65'h031FFF16902008628; |
rommem[3899] = 65'h131FFF1229A00FA34; |
rommem[3900] = 65'h031FFF169020085E8; |
rommem[3901] = 65'h01601001F31FFFD80; |
rommem[3902] = 65'h0DE00000002200FA9; |
rommem[3903] = 65'h0DE000000DE000000; |
rommem[3904] = 65'h031FFF16902008FE8; |
rommem[3905] = 65'h0BE017F2F31FFFD80; |
rommem[3906] = 65'h033FFEC0B00000028; |
rommem[3907] = 65'h00000000000000000; |
rommem[3908] = 65'h07375622061746144; |
rommem[3909] = 65'h16120726F72726520; |
rommem[3910] = 65'h04350452000203A74; |
rommem[3911] = 65'h1662072724500203A; |
rommem[3912] = 65'h020676E6968637465; |
rommem[3913] = 65'h17463757274736E69; |
rommem[3914] = 65'h0203A7461206E6F69; |
rommem[3915] = 65'h0660F146000000000; |
rommem[3916] = 65'h0660D1480660F9468; |
rommem[3917] = 65'h16601147866009470; |
rommem[3918] = 65'h1EE800400E6801000; |
rommem[3919] = 65'h1E69C0FF0040D7809; |
rommem[3920] = 65'h16A0D0421EE800003; |
rommem[3921] = 65'h1B0101903B0100D02; |
rommem[3922] = 65'h1B010220DB0102008; |
rommem[3923] = 65'h0B0102601B010240F; |
rommem[3924] = 65'h0460F9468460F1460; |
rommem[3925] = 65'h046009470460D1480; |
rommem[3926] = 65'h00000000F46011478; |
rommem[3927] = 65'h0E69CFFFD01900020; |
rommem[3928] = 65'h06A0D0028EE800003; |
rommem[3929] = 65'h10A10800146009400; |
rommem[3930] = 65'h0460F146066009400; |
rommem[3931] = 65'h0460D1480460F9468; |
rommem[3932] = 65'h14601147846009470; |
rommem[3933] = 65'h0019000200000000F; |
rommem[3934] = 65'h131FFEF734600B000; |
rommem[3935] = 65'h0460F9468460F1460; |
rommem[3936] = 65'h046009470460D1480; |
rommem[3937] = 65'h00190002046011478; |
rommem[3938] = 65'h0341F80004600B010; |
rommem[3939] = 65'h14600B018BE007F0A; |
rommem[3940] = 65'h1BE007EAA31FFF46B; |
rommem[3941] = 65'h031FFEEF04600B008; |
rommem[3942] = 65'h133FFEC0BBE007E4A; |
rommem[3943] = 65'h066009470660F1460; |
rommem[3944] = 65'h1E6801000660D1480; |
rommem[3945] = 65'h0040D7809EE800400; |
rommem[3946] = 65'h1EE800003E69CFFFE; |
rommem[3947] = 65'h19A00FB806A0D0028; |
rommem[3948] = 65'h00200886831FFF122; |
rommem[3949] = 65'h131FFFD8031FFF169; |
rommem[3950] = 65'h046009470460F1460; |
rommem[3951] = 65'h101900020460D1480; |
rommem[3952] = 65'h16520797469726150; |
rommem[3953] = 65'h03A746120726F7272; |
rommem[3954] = 65'h10FEF000800000020; |
rommem[3955] = 65'h09A00FBC067E08000; |
rommem[3956] = 65'h00200886831FFF122; |
rommem[3957] = 65'h131FFFD8031FFF169; |
rommem[3958] = 65'h10BEF000847E08000; |
rommem[3959] = 65'h001900020BE00000A; |
rommem[3960] = 65'h06D656C706D696E55; |
rommem[3961] = 65'h06E69206465746E65; |
rommem[3962] = 65'h06F69746375727473; |
rommem[3963] = 65'h00000203A7461206E; |
rommem[3964] = 65'h16A0D0413E6BF0000; |
rommem[3965] = 65'h06A0D0813E6BF0008; |
rommem[3966] = 65'h0BE107FE902008034; |
rommem[3967] = 65'h00201022802008128; |
rommem[3968] = 65'h006211A01022002E9; |
rommem[3969] = 65'h14611000004110403; |
rommem[3970] = 65'h1022002A914210000; |
rommem[3971] = 65'h01421000046110008; |
rommem[3972] = 65'h002000034022002E9; |
rommem[3973] = 65'h1E6BF000002000035; |
rommem[3974] = 65'h1E6BF00086A0D0403; |
rommem[3975] = 65'h0019000206A0D0803; |
rommem[4086] = 65'h0DE00000033FFFEF8; |
rommem[4088] = 65'h0DE00000033FFFEF8; |
rommem[4092] = 65'h00000000000000000; |
rommem[4093] = 65'h00000000000000000; |
rommem[4095] = 65'h00000000000000000; |
rommem[0] = 65'h00000000000000000; |
/trunk/software/sample code/sieve.c
0,0 → 1,175
/*#include <stdio.h>*/ |
|
#define LIMIT 1500000 /*size of integers array*/ |
#define PRIMES 100000 /*size of primes array*/ |
|
nocall my_org() { |
asm { |
org 0x100800200 |
db "BOOT" |
jmp crt_start |
.align 8 |
sp_save: |
dw 0 |
} |
} |
|
int main(){ |
int i,j,numbers[LIMIT]; |
int primes[PRIMES]; |
int limit; |
int start_tick,end_tick; |
|
asm { |
lw r1,#0xAB |
outb r1,0xdc0600 |
} |
start_tick = get_tick(); |
asm { |
lw r1,#0xAC |
outb r1,0xdc0600 |
} |
printf("Start tick %d\r\n", start_tick); |
asm { |
lw r1,#0xAD |
outb r1,0xdc0600 |
} |
|
limit=LIMIT; |
|
/*fill the array with natural numbers*/ |
for (i=0;i<limit;i++){ |
numbers[i]=i+2; |
} |
|
/*sieve the non-primes*/ |
for (i=0;i<limit;i++){ |
if (numbers[i]!=-1){ |
for (j=2*numbers[i]-2;j<limit;j+=numbers[i]) |
numbers[j]=-1; |
} |
} |
|
/*transfer the primes to their own array*/ |
j = 0; |
for (i=0;i<limit&&j<PRIMES;i++) |
if (numbers[i]!=-1) |
primes[j++] = numbers[i]; |
|
end_tick = get_tick(); |
printf("Clock ticks %d\r\n", end_tick-start_tick); |
|
/*print*/ |
for (i=0;i<PRIMES;i++) |
printf("%d\n",primes[i]); |
|
return 0; |
} |
|
int printf(char *p) |
{ |
int *q; |
asm { |
lw r1,#0xAE |
outb r1,0xdc0600 |
} |
q = &p; |
|
for (; *p; p++) { |
if (*p=='%') { |
p++; |
switch(*p) { |
case '%': |
putch('%'); |
break; |
case 'c': |
q++; |
putch(*q); |
break; |
case 'd': |
q++; |
putnum(*q); |
break; |
case 's': |
q++; |
putstr(*q); |
break; |
} |
} |
else |
putch(*p); |
} |
} |
|
void putch(char ch) |
{ |
asm { |
lw r1,#0xAF |
outb r1,0xdc0600 |
} |
asm { |
lw r1,#0x0a |
lw r2,24[bp] |
lw r3,#1 |
syscall #410 |
} |
asm { |
lw r1,#0xB0 |
outb r1,0xdc0600 |
} |
} |
|
void putnum(int num) |
{ |
asm { |
lw r1,#0xB1 |
outb r1,0xdc0600 |
} |
asm { |
lw r1,#0x15 |
lw r2,24[bp] |
lw r3,#5 |
syscall #410 |
} |
asm { |
lw r1,#0xB2 |
outb r1,0xdc0600 |
} |
} |
|
void putstr(char *p) |
{ |
asm { |
lw r1,#0x14 |
lw r2,24[bp] |
syscall #410 |
} |
} |
|
int get_tick() |
{ |
asm { |
lw r1,#0 |
syscall #416 |
} |
} |
|
void crt_start() |
{ |
asm { |
lw r1,#0xAA |
outb r1,0xdc0600 |
sw sp,sp_save |
lw sp,#0x1_07FFFFF8 |
lea xlr,prog_abort |
call main |
lw sp,sp_save |
bra retcode |
prog_abort: |
} |
putstr("Program aborted abnormally."); |
asm { |
lw sp,sp_save |
retcode: |
} |
} |
/trunk/software/sample code/sieve.lst
0,0 → 1,648
0000000000000000 code |
0000000000000000 align 16 |
0000000000000000 my_org: |
0000000100800200 org 0x100800200 |
0000000100800204 32200285 jmp crt_start |
0000000100800208 .align 8 |
0000000100800208 sp_save: |
0000000100800208 0000000000000000 dw 0 |
100800210 FFFFFFFFFFFFFFFF fill.b 0x0200,0xff |
100800218 FFFFFFFFFFFFFFFF |
100800220 FFFFFFFFFFFFFFFF |
100800228 FFFFFFFFFFFFFFFF |
100800230 FFFFFFFFFFFFFFFF |
100800238 FFFFFFFFFFFFFFFF |
100800240 FFFFFFFFFFFFFFFF |
100800248 FFFFFFFFFFFFFFFF |
100800250 FFFFFFFFFFFFFFFF |
100800258 FFFFFFFFFFFFFFFF |
100800260 FFFFFFFFFFFFFFFF |
100800268 FFFFFFFFFFFFFFFF |
100800270 FFFFFFFFFFFFFFFF |
100800278 FFFFFFFFFFFFFFFF |
100800280 FFFFFFFFFFFFFFFF |
100800288 FFFFFFFFFFFFFFFF |
100800290 FFFFFFFFFFFFFFFF |
100800298 FFFFFFFFFFFFFFFF |
1008002A0 FFFFFFFFFFFFFFFF |
1008002A8 FFFFFFFFFFFFFFFF |
1008002B0 FFFFFFFFFFFFFFFF |
1008002B8 FFFFFFFFFFFFFFFF |
1008002C0 FFFFFFFFFFFFFFFF |
1008002C8 FFFFFFFFFFFFFFFF |
1008002D0 FFFFFFFFFFFFFFFF |
1008002D8 FFFFFFFFFFFFFFFF |
1008002E0 FFFFFFFFFFFFFFFF |
1008002E8 FFFFFFFFFFFFFFFF |
1008002F0 FFFFFFFFFFFFFFFF |
1008002F8 FFFFFFFFFFFFFFFF |
100800300 FFFFFFFFFFFFFFFF |
100800308 FFFFFFFFFFFFFFFF |
100800310 FFFFFFFFFFFFFFFF |
100800318 FFFFFFFFFFFFFFFF |
100800320 FFFFFFFFFFFFFFFF |
100800328 FFFFFFFFFFFFFFFF |
100800330 FFFFFFFFFFFFFFFF |
100800338 FFFFFFFFFFFFFFFF |
100800340 FFFFFFFFFFFFFFFF |
100800348 FFFFFFFFFFFFFFFF |
100800350 FFFFFFFFFFFFFFFF |
100800358 FFFFFFFFFFFFFFFF |
100800360 FFFFFFFFFFFFFFFF |
100800368 FFFFFFFFFFFFFFFF |
100800370 FFFFFFFFFFFFFFFF |
100800378 FFFFFFFFFFFFFFFF |
100800380 FFFFFFFFFFFFFFFF |
100800388 FFFFFFFFFFFFFFFF |
100800390 FFFFFFFFFFFFFFFF |
100800398 FFFFFFFFFFFFFFFF |
1008003A0 FFFFFFFFFFFFFFFF |
1008003A8 FFFFFFFFFFFFFFFF |
1008003B0 FFFFFFFFFFFFFFFF |
1008003B8 FFFFFFFFFFFFFFFF |
1008003C0 FFFFFFFFFFFFFFFF |
1008003C8 FFFFFFFFFFFFFFFF |
1008003D0 FFFFFFFFFFFFFFFF |
1008003D8 FFFFFFFFFFFFFFFF |
1008003E0 FFFFFFFFFFFFFFFF |
1008003E8 FFFFFFFFFFFFFFFF |
1008003F0 FFFFFFFFFFFFFFFF |
1008003F8 FFFFFFFFFFFFFFFF |
100800400 FFFFFFFFFFFFFFFF |
100800408 FFFFFFFFFFFFFFFF |
0000000100800412 L_1: |
0000000100800412 L_0: |
0000000100800412 main: |
0000000100800413 0FEF0018 subui sp,sp,#24 |
0000000100800417 67ED8000 sw bp,[sp] |
000000010080041B 67EE0008 sw xlr,8[sp] |
000000010080041F 67EF8010 sw lr,16[sp] |
0000000100800423 E6800747 ; SETLO |
0000000100800427 EE800402 ; SETMID |
000000010080042B 6A0D702D lea xlr,L_5 |
000000010080042F 03ED8009 mov bp,sp |
0000000100800433 E6835028 ; SETLO |
0000000100800437 EE800003 ; SETMID |
000000010080043B 05ED7805 subui sp,sp,#12800040 |
000000010080043F 0FEF0038 subui sp,sp,#56 |
0000000100800443 67E58000 sw r11,[sp] |
0000000100800447 67E60008 sw r12,8[sp] |
000000010080044B 67E68010 sw r13,16[sp] |
000000010080044F 67E70018 sw r14,24[sp] |
0000000100800453 67E78020 sw r15,32[sp] |
0000000100800457 67E80028 sw r16,40[sp] |
000000010080045B 67E88030 sw r17,48[sp] |
000000010080045F 1607FFFF ori r15,r0,#-1 |
0000000100800463 E688E4F0 ; SETLO |
0000000100800467 EEBFFFFD ; SETMID |
000000010080046B 6BBD0C2D lea r3,-12000016[bp] |
000000010080046F 02380009 mov r16,r3 |
; lw r1,#0x17 |
; mov r2,sp |
; syscall #410 |
0000000100800473 160080AB lw r1,#0xAB |
0000000100800477 E69C0600 ; SETLO |
000000010080047B EE800003 ; SETMID |
000000010080047F 6A0D0428 outb r1,0xdc0600 |
|
0000000100800483 3020027D call get_tick |
0000000100800487 02118009 mov r3,r1 |
000000010080048B 02388009 mov r17,r3 |
000000010080048F 160080AC lw r1,#0xAC |
0000000100800493 E69C0600 ; SETLO |
0000000100800497 EE800003 ; SETMID |
000000010080049B 6A0D0428 outb r1,0xdc0600 |
000000010080049F 16008017 lw r1,#0x17 |
00000001008004A3 03E10009 mov r2,sp |
00000001008004A7 0181CD17 syscall #410 |
00000001008004AB 0FEF0008 subui sp,sp,#8 |
00000001008004AF 00000014 fip |
00000001008004B3 DE000000 nop |
00000001008004B7 DE000000 nop |
00000001008004BB DE000000 nop |
00000001008004BF DE000000 nop |
00000001008004C3 67E20000 sw r4,[sp] |
; fip |
00000001008004C7 160080AE lw r1,#0xAE |
00000001008004CB E69C0600 ; SETLO |
00000001008004CF EE800003 ; SETMID |
00000001008004D3 6A0D0428 outb r1,0xdc0600 |
00000001008004D7 DE000000 nop |
00000001008004DB DE000000 nop |
00000001008004DF DE000000 nop |
00000001008004E3 DE000000 nop |
00000001008004E7 DE000000 nop |
00000001008004EB 0FEF0010 subui sp,sp,#16 |
00000001008004EF 00000014 fip |
00000001008004F3 DE000000 nop |
00000001008004F7 DE000000 nop |
00000001008004FB DE000000 nop |
00000001008004FF DE000000 nop |
0000000100800503 DE000000 nop |
0000000100800507 67E88008 sw r17,8[sp] |
000000010080050B 00000014 fip |
000000010080050F DE000000 nop |
0000000100800513 DE000000 nop |
0000000100800517 DE000000 nop |
000000010080051B DE000000 nop |
000000010080051F DE000000 nop |
0000000100800523 E6800412 ; SETLO |
0000000100800527 EE800402 ; SETMID |
000000010080052B 040D0C09 ori r3,r0,#L_0 |
000000010080052F 00000014 fip |
0000000100800533 DE000000 nop |
0000000100800537 DE000000 nop |
000000010080053B DE000000 nop |
000000010080053F DE000000 nop |
0000000100800543 DE000000 nop |
0000000100800547 67E18000 sw r3,[sp] |
000000010080054B DE000000 nop |
000000010080054F DE000000 nop |
0000000100800553 DE000000 nop |
0000000100800557 DE000000 nop |
000000010080055B DE000000 nop |
000000010080055F 160080AE lw r1,#0xAE |
0000000100800563 E69C0600 ; SETLO |
0000000100800567 EE800003 ; SETMID |
000000010080056B 6A0D0428 outb r1,0xdc0600 |
000000010080056F 00000028 wait |
0000000100800573 302001D4 call printf |
0000000100800577 0BEF0010 addui sp,sp,#16 |
000000010080057B 47E20000 lw r4,[sp] |
000000010080057F 0BEF0008 addui sp,sp,#8 |
0000000100800583 02118009 mov r3,r1 |
0000000100800587 160080AD lw r1,#0xAD |
000000010080058B E69C0600 ; SETLO |
000000010080058F EE800003 ; SETMID |
0000000100800593 6A0D0428 outb r1,0xdc0600 |
0000000100800597 00000040 cli |
|
000000010080059B E696E360 ; SETLO |
000000010080059F 040D0C09 ori r3,r0,#1500000 |
00000001008005A3 02370009 mov r14,r3 |
00000001008005A7 16018000 ori r3,r0,#0 |
00000001008005AB 02358009 mov r11,r3 |
00000001008005AF L_6: |
00000001008005AF BEB700A1 bge r11,r14,L_7 |
00000001008005B3 08B18002 add r3,r11,#2 |
00000001008005B7 6B058F13 sw r3,[r16+r11*8] |
00000001008005BB 0AB58001 addui r11,r11,#1 |
00000001008005BF BE007F8A bra L_6 |
00000001008005C3 L_7: |
00000001008005C3 16018000 ori r3,r0,#0 |
00000001008005C7 02358009 mov r11,r3 |
00000001008005CB L_8: |
00000001008005CB BEB701C1 bge r11,r14,L_9 |
00000001008005CF 6B058F03 lw r3,[r16+r11*8] |
00000001008005D3 BE378148 beq r3,r15,L_10 |
00000001008005D7 6B058F03 lw r3,[r16+r11*8] |
00000001008005DB 06320200 shli r4,r3,#1 |
00000001008005DF 0C418002 sub r3,r4,#2 |
00000001008005E3 02360009 mov r12,r3 |
00000001008005E7 L_12: |
00000001008005E7 BEC700A1 bge r12,r14,L_13 |
00000001008005EB 6B063F13 sw r15,[r16+r12*8] |
00000001008005EF 6B058F03 lw r3,[r16+r11*8] |
00000001008005F3 04C1B002 add r12,r12,r3 |
00000001008005F7 BE007F8A bra L_12 |
00000001008005FB L_13: |
00000001008005FB L_10: |
00000001008005FB 0AB58001 addui r11,r11,#1 |
00000001008005FF BE007E6A bra L_8 |
0000000100800603 L_9: |
0000000100800603 16018000 ori r3,r0,#0 |
0000000100800607 02360009 mov r12,r3 |
000000010080060B 16018000 ori r3,r0,#0 |
000000010080060F 02358009 mov r11,r3 |
0000000100800613 L_14: |
0000000100800613 BEB701A1 bge r11,r14,L_15 |
0000000100800617 E68186A0 ; SETLO |
000000010080061B BECD0161 bge r12,#100000,L_15 |
000000010080061F 6B058F03 lw r3,[r16+r11*8] |
0000000100800623 BE3780E8 beq r3,r15,L_16 |
0000000100800627 6B058F03 lw r3,[r16+r11*8] |
000000010080062B 08C60001 add r12,r12,#1 |
000000010080062F E6BCAFF0 ; SETLO |
0000000100800633 EEBFFFFC ; SETMID |
0000000100800637 6BBD102D lea r4,-12800016[bp] |
000000010080063B 6A460F13 sw r3,[r4+r12*8] |
000000010080063F L_16: |
000000010080063F 0AB58001 addui r11,r11,#1 |
0000000100800643 BE007E8A bra L_14 |
0000000100800647 L_15: |
0000000100800647 0FEF0010 subui sp,sp,#16 |
000000010080064B 67E20008 sw r4,8[sp] |
000000010080064F 67E28000 sw r5,[sp] |
0000000100800653 3020027D call get_tick |
0000000100800657 47E20008 lw r4,8[sp] |
000000010080065B 47E28000 lw r5,[sp] |
000000010080065F 0BEF0010 addui sp,sp,#16 |
0000000100800663 02118009 mov r3,r1 |
0000000100800667 02368009 mov r13,r3 |
000000010080066B 0FEF0010 subui sp,sp,#16 |
000000010080066F 67E20008 sw r4,8[sp] |
0000000100800673 67E28000 sw r5,[sp] |
0000000100800677 0FEF0010 subui sp,sp,#16 |
000000010080067B 04D88C04 sub r3,r13,r17 |
000000010080067F 67E18008 sw r3,8[sp] |
0000000100800683 E6800412 ; SETLO |
0000000100800687 EE800402 ; SETMID |
000000010080068B 040D0C09 ori r3,r0,#L_0 |
000000010080068F 67E18000 sw r3,[sp] |
0000000100800693 302001D4 call printf |
0000000100800697 0BEF0010 addui sp,sp,#16 |
000000010080069B 47E20008 lw r4,8[sp] |
000000010080069F 47E28000 lw r5,[sp] |
00000001008006A3 0BEF0010 addui sp,sp,#16 |
00000001008006A7 02118009 mov r3,r1 |
00000001008006AB 16018000 ori r3,r0,#0 |
00000001008006AF 02358009 mov r11,r3 |
00000001008006B3 L_18: |
00000001008006B3 E68186A0 ; SETLO |
00000001008006B7 BEBD02C1 bge r11,#100000,L_19 |
00000001008006BB 0FEF0010 subui sp,sp,#16 |
00000001008006BF 67E20008 sw r4,8[sp] |
00000001008006C3 67E28000 sw r5,[sp] |
00000001008006C7 0FEF0010 subui sp,sp,#16 |
00000001008006CB E6BCAFF0 ; SETLO |
00000001008006CF EEBFFFFC ; SETMID |
00000001008006D3 6BBD0C2D lea r3,-12800016[bp] |
00000001008006D7 6A359303 lw r4,[r3+r11*8] |
00000001008006DB 67E20008 sw r4,8[sp] |
00000001008006DF E6800412 ; SETLO |
00000001008006E3 EE800402 ; SETMID |
00000001008006E7 040D1009 ori r4,r0,#L_0 |
00000001008006EB 67E20000 sw r4,[sp] |
00000001008006EF 302001D4 call printf |
00000001008006F3 0BEF0010 addui sp,sp,#16 |
00000001008006F7 47E20008 lw r4,8[sp] |
00000001008006FB 47E28000 lw r5,[sp] |
00000001008006FF 0BEF0010 addui sp,sp,#16 |
0000000100800703 02120009 mov r4,r1 |
0000000100800707 0AB58001 addui r11,r11,#1 |
000000010080070B BE007D4A bra L_18 |
000000010080070F L_19: |
000000010080070F 16008000 ori r1,r0,#0 |
0000000100800713 L_20: |
0000000100800713 47E88030 lw r17,48[sp] |
0000000100800717 47E80028 lw r16,40[sp] |
000000010080071B 47E78020 lw r15,32[sp] |
000000010080071F 47E70018 lw r14,24[sp] |
0000000100800723 47E68010 lw r13,16[sp] |
0000000100800727 47E60008 lw r12,8[sp] |
000000010080072B 47E58000 lw r11,[sp] |
000000010080072F 0BEF0038 addui sp,sp,#56 |
0000000100800733 03BF0009 mov sp,bp |
0000000100800737 47ED8000 lw bp,[sp] |
000000010080073B 47EE0008 lw xlr,8[sp] |
000000010080073F 47EF8010 lw lr,16[sp] |
0000000100800743 37EF8018 ret #24 |
0000000100800747 L_5: |
0000000100800747 47BF8008 lw lr,8[bp] |
000000010080074B 67BF8010 sw lr,16[bp] |
000000010080074F BE007E2A bra L_20 |
0000000100800753 printf: |
0000000100800753 160080B0 lw r1,#0xB0 |
0000000100800757 E69C0600 ; SETLO |
000000010080075B EE800003 ; SETMID |
000000010080075F 6A0D0428 outb r1,0xdc0600 |
0000000100800763 0FEF0018 subui sp,sp,#24 |
0000000100800767 67ED8000 sw bp,[sp] |
000000010080076B 67EE0008 sw xlr,8[sp] |
000000010080076F 67EF8010 sw lr,16[sp] |
0000000100800773 E6800937 ; SETLO |
0000000100800777 EE800402 ; SETMID |
000000010080077B 6A0D702D lea xlr,L_21 |
000000010080077F 03ED8009 mov bp,sp |
0000000100800783 0FEF0008 subui sp,sp,#8 |
0000000100800787 0FEF0018 subui sp,sp,#24 |
000000010080078B 67E58000 sw r11,[sp] |
000000010080078F 67E60008 sw r12,8[sp] |
0000000100800793 67E68010 sw r13,16[sp] |
0000000100800797 47B18018 lw r3,24[bp] |
000000010080079B 02360009 mov r12,r3 |
000000010080079F E6800943 ; SETLO |
00000001008007A3 EE800402 ; SETMID |
00000001008007A7 040D3409 ori r13,r0,#putch |
00000001008007AB 160080AE lw r1,#0xAE |
00000001008007AF E69C0600 ; SETLO |
00000001008007B3 EE800003 ; SETMID |
00000001008007B7 6A0D0428 outb r1,0xdc0600 |
|
00000001008007BB 9BB18018 lea r3,24[bp] |
00000001008007BF 02358009 mov r11,r3 |
00000001008007C3 L_22: |
00000001008007C3 42C18000 lc r3,[r12] |
00000001008007C7 BE300A68 beq r3,r0,L_23 |
00000001008007CB 42C18000 lc r3,[r12] |
00000001008007CF B2304225 bne r3,#37,L_24 |
00000001008007D3 0AC60002 addui r12,r12,#2 |
00000001008007D7 42C18000 lc r3,[r12] |
00000001008007DB 02318015 sext16 r3,r3 |
00000001008007DF 04300409 or r1,r3,r0 |
00000001008007E3 B0100525 beq r1,#37,L_27 |
00000001008007E7 B0101163 beq r1,#99,L_28 |
00000001008007EB B0101E64 beq r1,#100,L_29 |
00000001008007EF B0102B73 beq r1,#115,L_30 |
00000001008007F3 BE00070A bra L_26 |
00000001008007F7 L_27: |
00000001008007F7 0FEF0010 subui sp,sp,#16 |
00000001008007FB 67E20008 sw r4,8[sp] |
00000001008007FF 67E28000 sw r5,[sp] |
0000000100800803 0FEF0008 subui sp,sp,#8 |
0000000100800807 16018025 ori r3,r0,#37 |
000000010080080B 67E18000 sw r3,[sp] |
000000010080080F 34DF8000 jal lr,[r13] |
0000000100800813 0BEF0008 addui sp,sp,#8 |
0000000100800817 47E20008 lw r4,8[sp] |
000000010080081B 47E28000 lw r5,[sp] |
000000010080081F 0BEF0010 addui sp,sp,#16 |
0000000100800823 02118009 mov r3,r1 |
0000000100800827 BE00056A bra L_26 |
000000010080082B L_28: |
000000010080082B 0AB58008 addui r11,r11,#8 |
000000010080082F 0FEF0010 subui sp,sp,#16 |
0000000100800833 67E20008 sw r4,8[sp] |
0000000100800837 67E28000 sw r5,[sp] |
000000010080083B 0FEF0008 subui sp,sp,#8 |
000000010080083F 46B18000 lw r3,[r11] |
0000000100800843 67E18000 sw r3,[sp] |
0000000100800847 34DF8000 jal lr,[r13] |
000000010080084B 0BEF0008 addui sp,sp,#8 |
000000010080084F 47E20008 lw r4,8[sp] |
0000000100800853 47E28000 lw r5,[sp] |
0000000100800857 0BEF0010 addui sp,sp,#16 |
000000010080085B 02118009 mov r3,r1 |
000000010080085F BE0003AA bra L_26 |
0000000100800863 L_29: |
0000000100800863 0AB58008 addui r11,r11,#8 |
0000000100800867 0FEF0010 subui sp,sp,#16 |
000000010080086B 67E20008 sw r4,8[sp] |
000000010080086F 67E28000 sw r5,[sp] |
0000000100800873 0FEF0008 subui sp,sp,#8 |
0000000100800877 46B18000 lw r3,[r11] |
000000010080087B 67E18000 sw r3,[sp] |
000000010080087F 30200262 call putnum |
0000000100800883 0BEF0008 addui sp,sp,#8 |
0000000100800887 47E20008 lw r4,8[sp] |
000000010080088B 47E28000 lw r5,[sp] |
000000010080088F 0BEF0010 addui sp,sp,#16 |
0000000100800893 02118009 mov r3,r1 |
0000000100800897 BE0001EA bra L_26 |
000000010080089B L_30: |
000000010080089B 0AB58008 addui r11,r11,#8 |
000000010080089F 0FEF0010 subui sp,sp,#16 |
00000001008008A3 67E20008 sw r4,8[sp] |
00000001008008A7 67E28000 sw r5,[sp] |
00000001008008AB 0FEF0008 subui sp,sp,#8 |
00000001008008AF 46B18000 lw r3,[r11] |
00000001008008B3 67E18000 sw r3,[sp] |
00000001008008B7 30200274 call putstr |
00000001008008BB 0BEF0008 addui sp,sp,#8 |
00000001008008BF 47E20008 lw r4,8[sp] |
00000001008008C3 47E28000 lw r5,[sp] |
00000001008008C7 0BEF0010 addui sp,sp,#16 |
00000001008008CB 02118009 mov r3,r1 |
00000001008008CF BE00002A bra L_26 |
00000001008008D3 L_26: |
00000001008008D3 BE0001CA bra L_25 |
00000001008008D7 L_24: |
00000001008008D7 0FEF0010 subui sp,sp,#16 |
00000001008008DB 67E20008 sw r4,8[sp] |
00000001008008DF 67E28000 sw r5,[sp] |
00000001008008E3 0FEF0008 subui sp,sp,#8 |
00000001008008E7 42C18000 lc r3,[r12] |
00000001008008EB 02318015 sext16 r3,r3 |
00000001008008EF 67E18000 sw r3,[sp] |
00000001008008F3 34DF8000 jal lr,[r13] |
00000001008008F7 0BEF0008 addui sp,sp,#8 |
00000001008008FB 47E20008 lw r4,8[sp] |
00000001008008FF 47E28000 lw r5,[sp] |
0000000100800903 0BEF0010 addui sp,sp,#16 |
0000000100800907 02118009 mov r3,r1 |
000000010080090B L_25: |
000000010080090B 0AC60002 addui r12,r12,#2 |
000000010080090F BE0075AA bra L_22 |
0000000100800913 L_23: |
0000000100800913 L_31: |
0000000100800913 47E68010 lw r13,16[sp] |
0000000100800917 47E60008 lw r12,8[sp] |
000000010080091B 47E58000 lw r11,[sp] |
000000010080091F 0BEF0018 addui sp,sp,#24 |
0000000100800923 03BF0009 mov sp,bp |
0000000100800927 47ED8000 lw bp,[sp] |
000000010080092B 47EE0008 lw xlr,8[sp] |
000000010080092F 47EF8010 lw lr,16[sp] |
0000000100800933 37EF8018 ret #24 |
0000000100800937 L_21: |
0000000100800937 47BF8008 lw lr,8[bp] |
000000010080093B 67BF8010 sw lr,16[bp] |
000000010080093F BE007EAA bra L_31 |
0000000100800943 putch: |
0000000100800943 0FEF0018 subui sp,sp,#24 |
0000000100800947 67ED8000 sw bp,[sp] |
000000010080094B 03ED8009 mov bp,sp |
000000010080094F 160080AF lw r1,#0xAF |
0000000100800953 E69C0600 ; SETLO |
0000000100800957 EE800003 ; SETMID |
000000010080095B 6A0D0428 outb r1,0xdc0600 |
|
000000010080095F 1600800A lw r1,#0x0a |
0000000100800963 47B10018 lw r2,24[bp] |
0000000100800967 16018001 lw r3,#1 |
000000010080096B 0181CD17 syscall #410 |
|
000000010080096F 160080B0 lw r1,#0xB0 |
0000000100800973 E69C0600 ; SETLO |
0000000100800977 EE800003 ; SETMID |
000000010080097B 6A0D0428 outb r1,0xdc0600 |
|
000000010080097F L_33: |
000000010080097F 03BF0009 mov sp,bp |
0000000100800983 47ED8000 lw bp,[sp] |
0000000100800987 37EF8018 ret #24 |
000000010080098B L_32: |
000000010080098B putnum: |
000000010080098B 0FEF0018 subui sp,sp,#24 |
000000010080098F 67ED8000 sw bp,[sp] |
0000000100800993 03ED8009 mov bp,sp |
0000000100800997 160080B1 lw r1,#0xB1 |
000000010080099B E69C0600 ; SETLO |
000000010080099F EE800003 ; SETMID |
00000001008009A3 6A0D0428 outb r1,0xdc0600 |
|
00000001008009A7 16008015 lw r1,#0x15 |
00000001008009AB 47B10018 lw r2,24[bp] |
00000001008009AF 16018005 lw r3,#5 |
00000001008009B3 0181CD17 syscall #410 |
|
00000001008009B7 160080B2 lw r1,#0xB2 |
00000001008009BB E69C0600 ; SETLO |
00000001008009BF EE800003 ; SETMID |
00000001008009C3 6A0D0428 outb r1,0xdc0600 |
|
00000001008009C7 L_35: |
00000001008009C7 03BF0009 mov sp,bp |
00000001008009CB 47ED8000 lw bp,[sp] |
00000001008009CF 37EF8018 ret #24 |
00000001008009D3 L_34: |
00000001008009D3 putstr: |
00000001008009D3 0FEF0018 subui sp,sp,#24 |
00000001008009D7 67ED8000 sw bp,[sp] |
00000001008009DB 03ED8009 mov bp,sp |
00000001008009DF 16008014 lw r1,#0x14 |
00000001008009E3 47B10018 lw r2,24[bp] |
00000001008009E7 0181CD17 syscall #410 |
|
00000001008009EB L_37: |
00000001008009EB 03BF0009 mov sp,bp |
00000001008009EF 47ED8000 lw bp,[sp] |
00000001008009F3 37EF8018 ret #24 |
00000001008009F7 L_36: |
00000001008009F7 get_tick: |
00000001008009F7 0FEF0018 subui sp,sp,#24 |
00000001008009FB 67ED8000 sw bp,[sp] |
00000001008009FF 03ED8009 mov bp,sp |
0000000100800A03 16008000 lw r1,#0 |
0000000100800A07 0181D017 syscall #416 |
|
0000000100800A0B L_39: |
0000000100800A0B 03BF0009 mov sp,bp |
0000000100800A0F 47ED8000 lw bp,[sp] |
0000000100800A13 37EF8018 ret #24 |
0000000100800A17 L_38: |
0000000100800A17 crt_start: |
0000000100800A17 0FEF0018 subui sp,sp,#24 |
0000000100800A1B 67ED8000 sw bp,[sp] |
0000000100800A1F 67EE0008 sw xlr,8[sp] |
0000000100800A23 67EF8010 sw lr,16[sp] |
0000000100800A27 E6800ADF ; SETLO |
0000000100800A2B EE800402 ; SETMID |
0000000100800A2F 6A0D702D lea xlr,L_41 |
0000000100800A33 03ED8009 mov bp,sp |
0000000100800A37 160080AA lw r1,#0xAA |
0000000100800A3B E69C0600 ; SETLO |
0000000100800A3F EE800003 ; SETMID |
0000000100800A43 6A0D0428 outb r1,0xdc0600 |
0000000100800A47 E6800208 ; SETLO |
0000000100800A4B EE800402 ; SETMID |
0000000100800A4F 6A0D7813 sw sp,sp_save |
0000000100800A53 E6BFFFF8 ; SETLO |
0000000100800A57 EE80041F ; SETMID |
0000000100800A5B 040D7809 lw sp,#0x1_07FFFFF8 |
0000000100800A5F 16008017 lw r1,#0x17 |
0000000100800A63 03E10009 mov r2,sp |
0000000100800A67 0181CD17 syscall #410 |
0000000100800A6B E6800A8B ; SETLO |
0000000100800A6F EE800402 ; SETMID |
0000000100800A73 6A0D702D lea xlr,prog_abort |
0000000100800A77 30200104 call main |
0000000100800A7B E6800208 ; SETLO |
0000000100800A7F EE800402 ; SETMID |
0000000100800A83 6A0D7803 lw sp,sp_save |
0000000100800A87 BE00022A bra retcode |
0000000100800A8B prog_abort: |
|
0000000100800A8B 0FEF0010 subui sp,sp,#16 |
0000000100800A8F 67E20008 sw r4,8[sp] |
0000000100800A93 67E28000 sw r5,[sp] |
0000000100800A97 0FEF0008 subui sp,sp,#8 |
0000000100800A9B E6800412 ; SETLO |
0000000100800A9F EE800402 ; SETMID |
0000000100800AA3 040D0C09 ori r3,r0,#L_0 |
0000000100800AA7 67E18000 sw r3,[sp] |
0000000100800AAB 30200274 call putstr |
0000000100800AAF 0BEF0008 addui sp,sp,#8 |
0000000100800AB3 47E20008 lw r4,8[sp] |
0000000100800AB7 47E28000 lw r5,[sp] |
0000000100800ABB 0BEF0010 addui sp,sp,#16 |
0000000100800ABF E6800208 ; SETLO |
0000000100800AC3 EE800402 ; SETMID |
0000000100800AC7 6A0D7803 lw sp,sp_save |
0000000100800ACB retcode: |
|
0000000100800ACB L_42: |
0000000100800ACB 03BF0009 mov sp,bp |
0000000100800ACF 47ED8000 lw bp,[sp] |
0000000100800AD3 47EE0008 lw xlr,8[sp] |
0000000100800AD7 47EF8010 lw lr,16[sp] |
0000000100800ADB 37EF8018 ret #24 |
0000000100800ADF L_41: |
0000000100800ADF 47BF8008 lw lr,8[bp] |
0000000100800AE3 67BF8010 sw lr,16[bp] |
0000000100800AE7 BE007F2A bra L_42 |
100800AE8 0000000000000000 align 8 |
0000000100800AF0 align 8 |
0000000100800AF0 L_40: |
0000000100800B26 L_4: |
0000000100800B2C L_3: |
0000000100800B4C L_2: |
; global putch |
; global get_tick |
; global my_org |
; global printf |
; global main |
; global putnum |
; global putstr |
; global crt_start |
|
0000000100800B6A 00000000 |
0000000100800B6E 00000000 |
|
|
Symbol Table: |
========================================================== |
Name Typ Segment Address/Value |
---------------------------------------------------------- |
my_org L code 0000000000000000 |
sp_save L code 0000000100800208 |
L_1 L code 0000000100800412 |
L_0 L code 0000000100800412 |
main L code 0000000100800412 |
L_6 L code 00000001008005AF |
L_7 L code 00000001008005C3 |
L_8 L code 00000001008005CB |
L_9 L code 0000000100800603 |
L_10 L code 00000001008005FB |
L_12 L code 00000001008005E7 |
L_13 L code 00000001008005FB |
L_14 L code 0000000100800613 |
L_15 L code 0000000100800647 |
L_16 L code 000000010080063F |
L_18 L code 00000001008006B3 |
L_19 L code 000000010080070F |
L_20 L code 0000000100800713 |
L_5 L code 0000000100800747 |
printf L code 0000000100800753 |
L_22 L code 00000001008007C3 |
L_23 L code 0000000100800913 |
L_24 L code 00000001008008D7 |
L_27 L code 00000001008007F7 |
L_28 L code 000000010080082B |
L_29 L code 0000000100800863 |
L_30 L code 000000010080089B |
L_26 L code 00000001008008D3 |
L_25 L code 000000010080090B |
L_31 L code 0000000100800913 |
L_21 L code 0000000100800937 |
putch L code 0000000100800943 |
L_33 L code 000000010080097F |
L_32 L code 000000010080098B |
putnum L code 000000010080098B |
L_35 L code 00000001008009C7 |
L_34 L code 00000001008009D3 |
putstr L code 00000001008009D3 |
L_37 L code 00000001008009EB |
L_36 L code 00000001008009F7 |
get_tick L code 00000001008009F7 |
L_39 L code 0000000100800A0B |
L_38 L code 0000000100800A17 |
crt_start L code 0000000100800A17 |
retcode L code 0000000100800ACB |
prog_abort L code 0000000100800A8B |
L_42 L code 0000000100800ACB |
L_41 L code 0000000100800ADF |
L_40 L code 0000000100800AF0 |
L_4 L code 0000000100800B26 |
L_3 L code 0000000100800B2C |
L_2 L code 0000000100800B4C |
/trunk/software/sample code/sieve.s
0,0 → 1,473
code |
align 16 |
my_org: |
org 0x100800200 |
db "BOOT" |
jmp crt_start |
.align 8 |
sp_save: |
dw 0 |
fill.b 0x0200,0xff |
L_1: |
L_0: |
main: |
subui sp,sp,#24 |
sw bp,[sp] |
sw xlr,8[sp] |
sw lr,16[sp] |
lea xlr,L_5 |
mov bp,sp |
subui sp,sp,#12800040 |
subui sp,sp,#56 |
sw r11,[sp] |
sw r12,8[sp] |
sw r13,16[sp] |
sw r14,24[sp] |
sw r15,32[sp] |
sw r16,40[sp] |
sw r17,48[sp] |
ori r15,r0,#-1 |
lea r3,-12000016[bp] |
mov r16,r3 |
; lw r1,#0x17 |
; mov r2,sp |
; syscall #410 |
lw r1,#0xAB |
outb r1,0xdc0600 |
|
call get_tick |
mov r3,r1 |
mov r17,r3 |
lw r1,#0xAC |
outb r1,0xdc0600 |
lw r1,#0x17 |
mov r2,sp |
syscall #410 |
subui sp,sp,#8 |
fip |
nop |
nop |
nop |
nop |
sw r4,[sp] |
; fip |
lw r1,#0xAE |
outb r1,0xdc0600 |
nop |
nop |
nop |
nop |
nop |
subui sp,sp,#16 |
fip |
nop |
nop |
nop |
nop |
nop |
sw r17,8[sp] |
fip |
nop |
nop |
nop |
nop |
nop |
ori r3,r0,#L_0 |
fip |
nop |
nop |
nop |
nop |
nop |
sw r3,[sp] |
nop |
nop |
nop |
nop |
nop |
lw r1,#0xAE |
outb r1,0xdc0600 |
wait |
call printf |
addui sp,sp,#16 |
lw r4,[sp] |
addui sp,sp,#8 |
mov r3,r1 |
lw r1,#0xAD |
outb r1,0xdc0600 |
cli |
|
ori r3,r0,#1500000 |
mov r14,r3 |
ori r3,r0,#0 |
mov r11,r3 |
L_6: |
bge r11,r14,L_7 |
add r3,r11,#2 |
sw r3,[r16+r11*8] |
addui r11,r11,#1 |
bra L_6 |
L_7: |
ori r3,r0,#0 |
mov r11,r3 |
L_8: |
bge r11,r14,L_9 |
lw r3,[r16+r11*8] |
beq r3,r15,L_10 |
lw r3,[r16+r11*8] |
shli r4,r3,#1 |
sub r3,r4,#2 |
mov r12,r3 |
L_12: |
bge r12,r14,L_13 |
sw r15,[r16+r12*8] |
lw r3,[r16+r11*8] |
add r12,r12,r3 |
bra L_12 |
L_13: |
L_10: |
addui r11,r11,#1 |
bra L_8 |
L_9: |
ori r3,r0,#0 |
mov r12,r3 |
ori r3,r0,#0 |
mov r11,r3 |
L_14: |
bge r11,r14,L_15 |
bge r12,#100000,L_15 |
lw r3,[r16+r11*8] |
beq r3,r15,L_16 |
lw r3,[r16+r11*8] |
add r12,r12,#1 |
lea r4,-12800016[bp] |
sw r3,[r4+r12*8] |
L_16: |
addui r11,r11,#1 |
bra L_14 |
L_15: |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
call get_tick |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
mov r13,r3 |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#16 |
sub r3,r13,r17 |
sw r3,8[sp] |
ori r3,r0,#L_0 |
sw r3,[sp] |
call printf |
addui sp,sp,#16 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
ori r3,r0,#0 |
mov r11,r3 |
L_18: |
bge r11,#100000,L_19 |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#16 |
lea r3,-12800016[bp] |
lw r4,[r3+r11*8] |
sw r4,8[sp] |
ori r4,r0,#L_0 |
sw r4,[sp] |
call printf |
addui sp,sp,#16 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r4,r1 |
addui r11,r11,#1 |
bra L_18 |
L_19: |
ori r1,r0,#0 |
L_20: |
lw r17,48[sp] |
lw r16,40[sp] |
lw r15,32[sp] |
lw r14,24[sp] |
lw r13,16[sp] |
lw r12,8[sp] |
lw r11,[sp] |
addui sp,sp,#56 |
mov sp,bp |
lw bp,[sp] |
lw xlr,8[sp] |
lw lr,16[sp] |
ret #24 |
L_5: |
lw lr,8[bp] |
sw lr,16[bp] |
bra L_20 |
printf: |
lw r1,#0xB0 |
outb r1,0xdc0600 |
subui sp,sp,#24 |
sw bp,[sp] |
sw xlr,8[sp] |
sw lr,16[sp] |
lea xlr,L_21 |
mov bp,sp |
subui sp,sp,#8 |
subui sp,sp,#24 |
sw r11,[sp] |
sw r12,8[sp] |
sw r13,16[sp] |
lw r3,24[bp] |
mov r12,r3 |
ori r13,r0,#putch |
lw r1,#0xAE |
outb r1,0xdc0600 |
|
lea r3,24[bp] |
mov r11,r3 |
L_22: |
lc r3,[r12] |
beq r3,r0,L_23 |
lc r3,[r12] |
bne r3,#37,L_24 |
addui r12,r12,#2 |
lc r3,[r12] |
sext16 r3,r3 |
or r1,r3,r0 |
beq r1,#37,L_27 |
beq r1,#99,L_28 |
beq r1,#100,L_29 |
beq r1,#115,L_30 |
bra L_26 |
L_27: |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#8 |
ori r3,r0,#37 |
sw r3,[sp] |
jal lr,[r13] |
addui sp,sp,#8 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
bra L_26 |
L_28: |
addui r11,r11,#8 |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#8 |
lw r3,[r11] |
sw r3,[sp] |
jal lr,[r13] |
addui sp,sp,#8 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
bra L_26 |
L_29: |
addui r11,r11,#8 |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#8 |
lw r3,[r11] |
sw r3,[sp] |
call putnum |
addui sp,sp,#8 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
bra L_26 |
L_30: |
addui r11,r11,#8 |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#8 |
lw r3,[r11] |
sw r3,[sp] |
call putstr |
addui sp,sp,#8 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
bra L_26 |
L_26: |
bra L_25 |
L_24: |
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#8 |
lc r3,[r12] |
sext16 r3,r3 |
sw r3,[sp] |
jal lr,[r13] |
addui sp,sp,#8 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
mov r3,r1 |
L_25: |
addui r12,r12,#2 |
bra L_22 |
L_23: |
L_31: |
lw r13,16[sp] |
lw r12,8[sp] |
lw r11,[sp] |
addui sp,sp,#24 |
mov sp,bp |
lw bp,[sp] |
lw xlr,8[sp] |
lw lr,16[sp] |
ret #24 |
L_21: |
lw lr,8[bp] |
sw lr,16[bp] |
bra L_31 |
putch: |
subui sp,sp,#24 |
sw bp,[sp] |
mov bp,sp |
lw r1,#0xAF |
outb r1,0xdc0600 |
|
lw r1,#0x0a |
lw r2,24[bp] |
lw r3,#1 |
syscall #410 |
|
lw r1,#0xB0 |
outb r1,0xdc0600 |
|
L_33: |
mov sp,bp |
lw bp,[sp] |
ret #24 |
L_32: |
putnum: |
subui sp,sp,#24 |
sw bp,[sp] |
mov bp,sp |
lw r1,#0xB1 |
outb r1,0xdc0600 |
|
lw r1,#0x15 |
lw r2,24[bp] |
lw r3,#5 |
syscall #410 |
|
lw r1,#0xB2 |
outb r1,0xdc0600 |
|
L_35: |
mov sp,bp |
lw bp,[sp] |
ret #24 |
L_34: |
putstr: |
subui sp,sp,#24 |
sw bp,[sp] |
mov bp,sp |
lw r1,#0x14 |
lw r2,24[bp] |
syscall #410 |
|
L_37: |
mov sp,bp |
lw bp,[sp] |
ret #24 |
L_36: |
get_tick: |
subui sp,sp,#24 |
sw bp,[sp] |
mov bp,sp |
lw r1,#0 |
syscall #416 |
|
L_39: |
mov sp,bp |
lw bp,[sp] |
ret #24 |
L_38: |
crt_start: |
subui sp,sp,#24 |
sw bp,[sp] |
sw xlr,8[sp] |
sw lr,16[sp] |
lea xlr,L_41 |
mov bp,sp |
lw r1,#0xAA |
outb r1,0xdc0600 |
sw sp,sp_save |
lw sp,#0x1_07FFFFF8 |
lw r1,#0x17 |
mov r2,sp |
syscall #410 |
lea xlr,prog_abort |
call main |
lw sp,sp_save |
bra retcode |
prog_abort: |
|
subui sp,sp,#16 |
sw r4,8[sp] |
sw r5,[sp] |
subui sp,sp,#8 |
ori r3,r0,#L_0 |
sw r3,[sp] |
call putstr |
addui sp,sp,#8 |
lw r4,8[sp] |
lw r5,[sp] |
addui sp,sp,#16 |
lw sp,sp_save |
retcode: |
|
L_42: |
mov sp,bp |
lw bp,[sp] |
lw xlr,8[sp] |
lw lr,16[sp] |
ret #24 |
L_41: |
lw lr,8[bp] |
sw lr,16[bp] |
bra L_42 |
align 8 |
L_40: |
dc 80,114,111,103,114,97,109,32 |
dc 97,98,111,114,116,101,100,32 |
dc 97,98,110,111,114,109,97,108 |
dc 108,121,46,0 |
L_4: |
dc 37,100,10,0 |
L_3: |
dc 67,108,111,99,107,32,116,105 |
dc 99,107,115,32,37,100,13,10 |
dc 0 |
L_2: |
dc 83,116,97,114,116,32,116,105 |
dc 99,107,32,37,100,13,10,0 |
; global putch |
; global get_tick |
; global my_org |
; global printf |
; global main |
; global putnum |
; global putstr |
; global crt_start |