Download Disk Basic Unravelled II
Transcript
APPENDIX C DISASSEMBLY OF DISK BASIC 1.0 DISK BASIC UNRAVELLED II 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 C99A C99C C9A0 C9A1 C9A2 C9A5 C9A8 C9AA C9AC C9AE C9B1 C9B3 C9B6 C9B9 C9BB C9BE C9C0 C9C3 C9C5 C9C8 C9CA C9CD 81 10 4F 5F B7 F7 8D 9D 27 BD C6 BD BD 86 B7 8D B6 27 7D 26 BD 7E 4D 27 05 45 09 09 DB A5 10 B2 52 B2 A5 03 09 99 09 0B 09 03 AD AC 59 5E C9D0 C9D3 C9D6 C9DA C9DD B6 BA 10 BD 73 09 09 26 AD 09 57 5E DC 3C 19 5D C9E0 C9E3 C9E6 C9E8 C9EB C9ED C9EF C9F1 C9F4 C9F6 C9F9 C9FB C9FD C9FF BD BD 34 BD 1F 35 D3 BD 9E BD D6 26 A7 20 CC CC 02 CC 89 02 19 AC 19 C5 70 04 80 F5 E2 E2 6D 6F C7 59 58 5E 19 7C E2 37 97 CA01 7F 09 5D CA04 9F 1B CA06 CA08 CA0A CA0C CA0D CA0F CA11 CA13 CA15 CA16 CA18 CA1B CA1E CA21 CA24 CA27 CA29 CA2C CA2F CA33 C6 A6 26 5A 26 9E 9F 6F 5A 2A BD BD BD BD 77 25 BD 77 10 7E 03 82 03 F9 1B 1B 80 F9 A4 AD 82 AC 09 03 A4 09 25 AC 2D 21 9C EF 59 26 59 E3 6B 73 CA36 0D 6F CA38 2E DE CA3A 39 CA3B CA3E CA3F CA41 CA43 CA45 CA47 CA48 CA4A F6 5C 34 D7 8D 35 5A 26 39 09 5B CA4B CA4D CA51 CA53 CA56 CA58 CA5A CA5C CA5E CA60 0D 10 32 BD 0F 9F A6 27 34 6F 6F 2F B8 35 62 C7 14 6F F1 00 EC 02 00 04 6F 0E 04 F5 ORIGIN:SPECTRAL ASSOC REVISED:12/26/1999 WALTER K ZYDHEK * LOAD COMMAND LOAD CMPA #'M' LBEQ LCEE5 CLRA LC9A1 CLRB LC9A2 STA DRUNFL STB DMRGFL BSR LC985 JSR GETCCH BEQ LC9BE JSR SYNCOMMA LDB #'R' JSR LB26F JSR LA5C7 LDA #$03 STA DRUNFL LC9BE BSR LC959 LDA DASCFL BEQ LC9D0 TST DMRGFL BNE LC9CD JSR LAD19 LC9CD JMP LAC7C * *BRANCH IF LOADM RUN FLAG = ZERO (DON'T RUN) CLEAR MERGE FLAG RUN FLAG (0 = DON'T RUN, 2 = RUN) MERGE FLAG (0 = NO MERGE, $FF = MERGE) GO GET FILENAME, ETC. FROM BASIC GET CURRENT INPUT CHAR BRANCH IF END OF LINE SYNTAX CHECK FOR COMMA * *IS NEXT CHAR 'R'? RUN AFTER LOAD SYNTAX ERROR IF ANY MORE CHARS ON LINE *SET FLAGS TO RUN AND CLOSE ALL FILES *BEFORE THE FILE IS RUN GRAB FCB FOR INPUT FILE *CHECK ASCII FLAG AND BRANCH *IF CRUNCHED BASIC FILE IS THIS A MERGE? BRANCH IF MERGE DO A 'NEW' - ERASE VARIABLES, RESET VARIABLES GO TO BASIC'S MAIN LOOP, IT WILL LOAD PROGRAM * LOAD IN A CRUNCHED BASIC FILE LC9D0 LDA DFLTYP ORA DMRGFL LBNE LA616 JSR LAD19 COM DLODFL * JSR LCCE2 JSR LCCE2 PSHS A JSR LCCE2 TFR A,B PULS A ADDD TXTTAB JSR LAC37 LDX TXTTAB LC9F6 JSR LC597 LDB CINBFL BNE LCA01 STA ,X+ BRA LC9F6 *CHECK FILE TYPE (MUST BE BASIC:0) & CHECK *MERGE FLAG (MUST BE NO MERGE: 0) 'BAD FILE MODE' ERROR IF MERGE OR NON-BASIC DO A 'NEW' - RESET POINTERS, ERASE VARIABLES * SET THE LOAD FLAG TO $FF - THIS WILL CAUSE A NEW TO * OCCUR IF AN ERROR OCCURS WHILE THE PROGRAM IS BEING LOADED GET CHAR FROM BUFFER - SHOULD BE $FF GET ANOTHER - MS BYTE OF LENGTH SAVE MS BYTE ON STACK LS BYTE OF LENGTH OF PROGRAM PUT LS BYTE INTO ACCB NOW ACCD CONTAINS LENGTH OF PROGRAM ADD BEGINNING OF BASIC SEE OF ENOUGH ROOM IN RAM FOR THIS FILE GET START OF BASIC READ A CHAR FROM CONSOLE IN BUFFER EMPTY? BRANCH IF SO STORE CHAR GET ANOTHER CHARACTER LCA01 CLR DLODFL STX VARTAB * MAKE SURE LAST THREE BYTES LOADED WERE ZERO LDB #$03 LCA08 LDA ,-X BNE LCA0F DECB BNE LCA08 LCA0F LDX VARTAB LCA11 STX VARTAB CLR ,X+ DECB BPL LCA11 LCA18 JSR LA42D JSR LAD21 JSR XVEC18 JSR LACEF ASR DRUNFL BLO LCA2C JSR LA426 LCA2C ASR DRUNFL LBCS LAD9E JMP LAC73 CLEAR LOAD FLAG - LOAD WAS ERROR FREE SAVE NEW START OF VARIABLES DVEC13 DEVNUM LCA18 * CHECK DEVICE NUMBER AND * TRY TO RUN FILE IF IT IS A DISK FILE * CLOSE ALL FILE BUFFERS RAM VECTOR DVEC7 LDB FCBACT INCB LCA3F PSHS B STB DEVNUM BSR LCA53 PULS B DECB BNE LCA3F LCA4A RTS GET THE NUMBER OF RESERVED FILE BUFFERS ADD ONE SAVE IT STORE IT IN DEVICE NUMBER CLOSE FILE GET BACK NUMBER OF FILE BUFFERS DECREMENT FILE BUFFER COUNTER BRANCH IF ALL FILES NOT CLOSED TST BGT RTS * CLOSE FILE RAM HOOK DVEC8 TST DEVNUM LBLE XVEC8 LEAS $02,S LCA53 JSR LC714 CLR DEVNUM LCA58 STX FCBTMP LDA FCBTYP,X BEQ LCA4A PSHS A CLR FCBTYP,X CHECK THREE BYTES CHECK A BYTE BRANCH IF NON-ZERO DECREMENT COUNTER KEEP CHECKING IF NOT DONE GET START OF VARIABLES SAVE START OF VARIABLES CLEAR A BYTE DECREMRNT COUNTER KEEP CLEARING BYTES IF NOT DONE CLOSE SELECTED FILE DO PART OF NEW - ERASE VARIABLES, RESET INPUT PTR INITIALIZE EXBAS GRAPHICS VARIABLES RELOCATE ALL THE BASIC NEXT LINE POINTERS CHECK LSB OF RUN FLAG BRANCH IF DON'T CLOSE ALL FILES CLOSE ALL FILES TEST BIT 1 OF RUN FLAG BRANCH TO COMM INTERPRETATION LOOP IF BIT 1 SET RETURN TO DIRECT MODE * CHECK DEVICE NUMBER AND RETURN * IF NOT A DISK FILE PURGE RETURN ADDRESS OFF OF THE STACK POINT X TO CORRECT FCB SET DEVICE NUMBER TO SCREEN SAVE FILE BUFFER POINTER GET THE TYPE OF THIS FILE RETURN IF FILE NOT OPEN SAVE FILE TYPE CLOSE THE FILE - ZERO OUT THE FILE TYPE C15