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