A big progress. I think I’m one step ahead from a breakthrough. Much lesser data segments than assumed and clever coding.
I found how the error codes are calculated and displayed, how the baud setting works (table, involving key input) and I did a full loop of simulated input of 2 instructions/keys with a (new) error output.
Error codes are simply based on E0 (360) and incremented by jumping to 542-545. Jumping to top 542 adding all 4=E4. 4 is also stored to 142 and later added. I found all the codes and branches. Errors E5-E7 are PLC errors and probably handled by that. Code is at 7014. Maybe same code for F instead of E. 37 turns from 47 to 37 in case of an error, probably for blinking.
359 00535 1271 L00535, TAD D00471 /371= E9
360 00536 6410 6410
361 00537 1010 TAD P00010
362 00540 6411 6411 /display address to A2?
363 00541 5341 L00541, JMP L00541 /infinite loop RAM error E9.
364 00542 7001 L00542, IAC /+1 , in total +4 =E4
365 00543 7001 L00543, IAC /E3
366 00544 7001 L00544, IAC /E2
367 00545 7001 L00545, IAC /E1
368 00546 3142 DCA P00142 /sum of increments
369 00547 1036 TAD P00036 /default 10 360+10=370=F0 ?
370 00550 3141 DCA L00141
371 00551 3151 DCA P00151
372 00552 3076 DCA P00076
373 00553 4017 JMS P00017 /fetch next address to JMP
I previously found a table of 5 pointers (+0-4) , code is just earlier. The first one (2450) also reading the unit table with their allowed operations.
1322 02420 7002 L02420, BSW /byteswap
1323 02421 0234 AND D02434 /AND 17, take digit 2 of left byte
1324 02422 1226 TAD D02426 /table start
1325 02423 3134 DCA P00134 /room for pointer on page 0
1326 02424 1104 TAD D00104 /adding increment
1327 02425 5534 JMP I P00134 /final JMP
1328 02426 2427 D02426, 2427
1329 02427 5250 JMP L02450 /pointer 1 if AC=0. Read table of units
1330 02430 5315 JMP L02515 /AC1
1331 02431 5325 JMP L02525 /AC2 -tried 0251
1332 02432 5335 JMP L02535 /AC3
1333 02433 5310 JMP L02510 /AC4
1334 02434 0017 D02434, 0017
I explained some time ago how the table of units is read. To test another pointer than the first, I took unit 51 what is LCD location 1. The only allowed operation is LOAD (load LCD with reg/val) what is instruction 4. Multiple instructions are BCD encoded. Here it’s 02. With unit 0251. Only the 2nd digit is taken, added to 0 and the 3rd pointer is used. On the unit check, the unit is stored to 106. Here it’s 300, unknown why. Other pointers have 100 or 7400.
[2420] IRQ,DLY,IE=0,1,0 L/AC:0/0251 MQ:0000 IR:7002 BSW ;Byte Swap AC
[2421] IRQ,DLY,IE=0,1,0 L/AC:0/5102 MQ:0000 IR:0234 AND @@34 ;AND operand with AC, Current page @@34
[2422] IRQ,DLY,IE=0,1,0 L/AC:0/0002 MQ:0000 IR:1226 TAD @@26 ;Add operand to AC, Current page @@26
[2423] IRQ,DLY,IE=0,1,0 L/AC:0/2431 MQ:0000 IR:3134 DCA 0134 ;Deposit AC to memory then clear AC, ZP 0134
[2424] IRQ,DLY,IE=0,1,0 L/AC:0/0000 MQ:0000 IR:1104 TAD 0104 ;Add operand to AC, ZP 0104
[2425] IRQ,DLY,IE=0,1,0 L/AC:0/0000 MQ:0000 IR:5534 JMP I 0134 ;Jump Indexed ZP 0134
[2431] IRQ,DLY,IE=0,0,0 L/AC:0/0000 MQ:0000 IR:5325 JMP @@25 ;Jump Current page @@25
[2525] IRQ,DLY,IE=0,0,0 L/AC:0/0000 MQ:0000 IR:0235 AND @@35 ;AND operand with AC, Current page @@35
[2526] IRQ,DLY,IE=0,0,0 L/AC:0/0000 MQ:0000 IR:7640 SZA CLA ;Skip on AC = 0, Clear AC
[2530] IRQ,DLY,IE=0,0,0 L/AC:0/0000 MQ:0000 IR:1351 TAD @@51 ;Add operand to AC, Current page @@51
[2531] IRQ,DLY,IE=0,0,0 L/AC:0/0300 MQ:0000 IR:5266 JMP @@66 ;Jump Current page @@66
[2466] IRQ,DLY,IE=0,0,0 L/AC:0/0300 MQ:0000 IR:3106 DCA 0106 ;Deposit AC to memory then clear AC, ZP 0106
I had to do 5 manual skips to prevent a restart. None had an IOT. I ended up here. Reading 8 words starting with 7744. These aren’t written to RAM, just checked. Every 3rd word is checked and I think this is the baud table.
[2710] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:5320 JMP @@20 ;Jump Current page @@20
[2720] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:4017 JMS 0017 ;Jump to subroutine ZP 0017
[0020] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:1417 TAD I 0017 ;Add operand to AC, Indexed ZP 0017 [Auto pre-inc]
[0021] IRQ,DLY,IE=0,0,0 L/AC:1/6534 MQ:3527 IR:3131 DCA 0131 ;Deposit AC to memory then clear AC, ZP 0131
[0022] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:5531 JMP I 0131 ;Jump Indexed ZP 0131
[6534] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:1417 TAD I 0017 ;Add operand to AC, Indexed ZP 0017 [Auto pre-inc]
[6535] IRQ,DLY,IE=0,0,0 L/AC:1/6545 MQ:3527 IR:3010 DCA 0010 ;Deposit AC to memory then clear AC, ZP 0010
[6536] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:2010 ISZ 0010 ;Increment operand and skip if zero, ZP 0010
[6537] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:1104 TAD 0104 ;Add operand to AC, ZP 0104
[6540] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:0410 AND I 0010 ;AND operand with AC, Indexed ZP 0010 [Auto pre-inc]
[6541] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:1410 TAD I 0010 ;Add operand to AC, Indexed ZP 0010 [Auto pre-inc]
[6542] IRQ,DLY,IE=0,0,0 L/AC:1/7744 MQ:3527 IR:7640 SZA CLA ;Skip on AC = 0, Clear AC
[6543] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:5336 JMP @@36 ;Jump Current page @@36
[6536] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:2010 ISZ 0010 ;Increment operand and skip if zero, ZP 0010
[6537] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:1104 TAD 0104 ;Add operand to AC, ZP 0104
[6540] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:0410 AND I 0010 ;AND operand with AC, Indexed ZP 0010 [Auto pre-inc]
[6541] IRQ,DLY,IE=0,0,0 L/AC:1/0000 MQ:3527 IR:1410 TAD I 0010 ;Add operand to AC, Indexed ZP 0010 [Auto pre-inc]
[6542] IRQ,DLY,IE=0,0,0 L/AC:1/7750 MQ:3527 IR:7640 SZA CLA ;Skip on AC = 0, Clear AC
7744 0010 7770 -110 baud TTY? (start at 6550)
7750 0004 7777 -300
7740 0200 7777 -600
7701 1000 7700 -1200
7700 0040 7700 -110 baud audio?
7600 0100 7000
5000 0020 7700
7400 0400 0000 -1200 bauds ?
0000 (on new page) 9th word to end reading table
I’ve chosen to branch with 5000. Then the LCD is refreshed. After some few skips, I ended up at 100 (and 115) what are still empty.
One branch earlier I reached again 2407, 2410 and 2420 where I started from.
Now I also have all the needed values on page 0 and know where it really starts. It runs then the unit check. I once entered 10 at a skip and soon the LCD values are 0362 0000 (E2) what is a syntax error for unallowed value or instruction. After that an infinite 60x loop indexed at 30-34 and 45. Values aren’t changed yet and/or waiting for a key. I sometimes had 7332 at 30 branching there.
[0022] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:5531 JMP I 0131 ;Jump Indexed ZP 0131
[2407] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:1103 TAD 0103 ;Add operand to AC, ZP 0103
[2410] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:1342 TAD @@42 ;Add operand to AC, Current page @@42
[2411] IRQ,DLY,IE=0,0,1 L/AC:0/7772 MQ:0000 IR:7700 SMA CLA ;Skip on AC < 0, Clear AC
[2413] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:1104 TAD 0104 ;Add operand to AC, ZP 0104
[2414] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:7510 SPA ;Skip on AC >= 0
[2416] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:7130 STL RAR ;Set L, Rotate AC & L right
[2417] IRQ,DLY,IE=0,0,1 L/AC:0/4000 MQ:0000 IR:7012 RTR ;Rotate AC & L right twice
[2420] IRQ,DLY,IE=0,0,1 L/AC:0/1000 MQ:0000 IR:7002 BSW ;Byte Swap AC
[2421] IRQ,DLY,IE=0,0,1 L/AC:0/0010 MQ:0000 IR:0234 AND @@34 ;AND operand with AC, Current page @@34
[2422] IRQ,DLY,IE=0,0,1 L/AC:0/0010 MQ:0000 IR:1226 TAD @@26 ;Add operand to AC, Current page @@26
[2423] IRQ,DLY,IE=0,0,1 L/AC:0/2437 MQ:0000 IR:3134 DCA 0134 ;Deposit AC to memory then clear AC, ZP 0134
[2424] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:1104 TAD 0104 ;Add operand to AC, ZP 0104
[2425] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:5534 JMP I 0134 ;Jump Indexed ZP 0134
[2437] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:5220 JMP @@20 ;Jump Current page @@20
[2420] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:7002 BSW ;Byte Swap AC
[2421] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:0234 AND @@34 ;AND operand with AC, Current page @@34
[2422] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:1226 TAD @@26 ;Add operand to AC, Current page @@26
[2423] IRQ,DLY,IE=0,0,1 L/AC:0/2427 MQ:0000 IR:3134 DCA 0134 ;Deposit AC to memory then clear AC, ZP 0134
[2424] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:1104 TAD 0104 ;Add operand to AC, ZP 0104
[2425] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:5534 JMP I 0134 ;Jump Indexed ZP 0134
[2427] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:5250 JMP @@50 ;Jump Current page @@50
[2450] IRQ,DLY,IE=0,0,1 L/AC:0/0000 MQ:0000 IR:7041 CIA ;2s Complement AC