Download Disk Basic Unravelled II

Transcript
APPENDIX C
DISASSEMBLY OF DISK BASIC 1.0
DISK BASIC UNRAVELLED II
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
D473 39
ORIGIN:SPECTRAL ASSOC
REVISED:12/26/1999 WALTER K ZYDHEK
RTS
D474
D476
D478
D47A
D47C
D47E
D480
D483
D485
D486
D489
D48B
D48C
D48E
D490
D493
D495
D497
D49A
D49D
D49F
D4A1
D4A4
D4A6
D4A8
8D
8D
8D
9E
34
8D
BD
34
5F
8E
6F
5A
26
35
CE
8D
35
BD
CE
8D
C6
8E
9F
D7
7E
C3
E7
BC
52
10
DF
B6 54
14
D4AB
D4AF
D4B2
D4B4
D4B6
D4B8
D4BB
D4BD
D4C1
D4C4
D4C6
D4C9
D4CB
D4CD
D4CE
D4D0
D4D1
10
BD
C6
9D
27
BD
C1
10
BD
34
8E
C6
6F
5A
26
4F
20
27
D1
04
A5
0C
B7
11
24
A5
04
07
12
82
D4D3
D4D5
D4D6
D4D8
D4DA
D4DC
D4DE
D4E0
D4E1
D4E3
D4E5
D4E7
D4E9
D4EC
D4EE
D4F2
D4F5
D4F8
D4FC
D4FF
D501
D503
D506
D509
D50B
D50E
D511
D515
D517
D519
D51B
D51D
D520
D522
D525
D527
D52A
D52C
D52E
D531
D533
D536
D538
D53C
D53E
D541
D544
EB
5C
C0
24
CB
6D
26
4C
A7
81
25
32
8E
9C
10
BD
73
10
BD
86
97
BD
7F
86
B7
BD
10
0F
20
81
25
B6
8A
B7
86
B7
1E
1E
BD
26
BD
8D
10
1A
8E
BF
8E
E4
06 00
80
FB
14
06
96
10
B6
06
8C
03
06
EE
EA
D5
80
59
00
00
FF
D1 70
69
38
DF 89
C7
12
FB
0D
12
FC
12
85
F5
85
12
EC
61
22
27
22
CA
09
CE
95
00
EA
D5
09
C0
FF
D6
26
EC
1A
16
08
09
10
FF
53
FF
88
88
D6
68
D6
6C
8E
50
D5
09
09
0F
D7 52
3B
5C
08 00
AC
FF
85
48
DE
00 86
86
40
48
DE
FD
FF 4B
62
83
89
* DSKO$ COMMAND
DSKO
BSR LD439
BSR LD45F
BSR LD436
LDX FPA0+2
PSHS X
BSR LD45F
JSR LB654
PSHS X,B
CLRB
LDX #DBUF0
LD489
CLR ,X+
DECB
BNE LD489
PULS B,X
LDU #DBUF0+128
BSR LD42B
PULS X
JSR LB659
LDU #DBUF0
BSR LD42B
LDB #$03
LD4A1
LDX #DBUF0
STX DCBPT
STB DCOPC
JMP LD5FF
GET THE DRIVE, TRACK AND SECTOR NUMBERS
GET THE DESCRIPTOR OF STRING 1
'TM' ERROR IF NUMERIC EXPRESSION
* GET STRING 1 DESCRIPTOR ADDRESS
* AND SAVE IT ON THE STACK
GET THE DESCRIPTOR OF STRING 2
*GET LENGTH AND ADDRESS OF STRING 2 AND
*SAVE THEM ON THE STACK
SET CLEAR COUNTER TO 256 (FULL SECTOR BUFFER)
USE DBUF0 AS THE DSKO$ I/O BUFFER
CLEAR A BYTE IN I/O BUFFER
DECREMENT CLEAR COUNTER
BRANCH IF ALL 256 BYTES NOT CLEARED
GET THE LENGTH AND ADDRESS OF STRING 2
POINT X TO STRING 2 DESTINATION
MOVE STRING 2 DATA INTO DBUF0
POINT X TO STRING 1 DESCRIPTOR
GET THE LENGTH AND ADDRESS OF STRING 1
POINT U TO STRING 1 DESTINATION
MOVE STRING 1 DATA INTO DBUF0
DSKCON WRITE OP CODE
POINT X TO I/O BUFFER (DBUF0)
*
* SAVE NEW DSKCON BUFFER POINTER AND OP CODE VARIABLES
GO WRITE OUT A SECTOR
* DSKINI COMMAND
DSKINI
LBEQ LA61F
JSR LD169
LDB #$04
JSR GETCCH
BEQ LD4C4
JSR LB738
CMPB #17
LBHS LB44A
JSR LA5C7
LD4C4
PSHS B
LDX #DBUF1+SECMAX
LDB #SECMAX
LD4CB
CLR ,-X
DECB
BNE LD4CB
CLRA
BRA LD4E0
BRANCH TO 'DN' ERROR IF NO DRIVE NUMBER SPECIFIED
CALCULATE DRIVE NUMBER
SKIP FACTOR DEFAULT VALUE
GET CURRENT INPUT CHAR FROM BASiC
BRANCH IF END OF LINE
SYNTAX CHECK FOR COMMA AND EVALUATE EXPRESSION
MAX VALUE OF SKIP FACTOR = 16
'ILLEGAL FUNCTION CALL' IF BAD SKIP FACTOR
SYNTAX ERROR IF MORE CHARACTERS ON THE LINE
SAVE SKIP FACTOR ON THE STACK
POINT TO END OF LOGICAL SECTOR NUMBER STORAGE AREA
18 SECTORS PER TRACK
CLEAR A BYTE IN THE BUFFER
CLEARED ALL 18?
KEEP GOING IF NOT
RESET PHYSICAL SECTOR COUNTER
START WITH FIRST PHYSICAL SECTOR = 1
* CALCULATE LOGICAL SECTOR NUMBERS
LD4D3
ADDB ,S
LD4D5
INCB
LD4D6
SUBB #SECMAX
BHS LD4D6
ADDB #SECMAX
TST B,X
BNE LD4D5
LD4E0
INCA
STA B,X
CMPA #SECMAX
BLO LD4D3
LEAS $01,S
LDX #DFLBUF+$1888-2
CMPX MEMSIZ
LBHI LAC44
JSR DVEC7
COM DRESFL
LDS #DBUF1+SECLEN
JSR L95AC
LDA #$00
STA DCOPC
JSR LD5FF
CLR RDYTMR
LDA #$C0
STA FDCREG
JSR LD6DE
LBNE LD59B
CLR DCTRK
BRA LD533
LD519
CMPA #22
BLO LD525
LDA DRGRAM
ORA #$10
STA DSKREG
LD525
LDA #$53
STA FDCREG
EXG A,A
EXG A,A
JSR LD6DE
BNE LD59B
LD533
JSR LD6FD
BSR $D5A4
LDY #FDCREG+3
ORCC #$50
LDX #LD562
STX DNMISV
LDX #DFLBUF
ADD SKIP FACTOR TO LOGICAL SECTOR COUNTER
ADD ONE TO LOGICAL SECTOR COUNTER
SUBTRACT MAX NUMBER OF SECTORS
BRANCH UNTIL 0 > ACCB >= -18
ADD 18, NOW ACCB IS 0-17
IS ANYTHING STORED HERE ALREADY?
YES - GET ANOTHER SECTOR
* INCREMENT PHYSICAL SECTOR NUMBER AND
* SAVE IT IN THE RAM BUFFER
FINISHED WITH ALL SECTORS?
NO - KEEP GOING
REMOVE SKIP FACTOR FROM STACK
GET TOP OF RAM USED BY DSKINI
IS IT > CLEARED AREA?
'OUT OF MEMORY' ERROR IF > CLEARED AREA
CLOSE ALL FILES
SET RESET FLAG TO $FF - THIS WILL CAUSE A DOS RESET
SET STACK TO TOP OF DBUF1
RESET SAM TO DISPLAY PAGE ZERO AND ALPHA GRAPHICS
YOU COULD DELETE THIS INSTRUCTION AND CHANGE FOLLOWING STA TO CLR
RESTORE HEAD TO TRACK ZERO DSKCON OP CODE
RESTORE HEAD TO TRACK ZERO
RESET THE READY TIMER
* FOC READ ADDRESS CODE
*
CHECK DRIVE READY - WAIT UNTIL READY
BRANCH IF NOT READY - ISSUE AN ERROR
RESET TRACK NUMBER
START THE FORMATTING PROCESS
= CHECK FOR TRACK 22 (PRECOMPENSATION)
= AND BRANCH IF < TRACK 22 - NO PRECOMP
* GET THE RAM IMAGE OF DSKREG, 'OR'
* IN THE PRECOMPENSATION FLAG AND
* SEND IT TO DSKREG
= GET STEP IN COMMAND
= AND SEND IT TO THE 1793
* DELAY AFTER ISSUING COMMAND TO 1793
*
CHECK DRIVE READY
BRANCH IF NOT READY - ISSUE AN ERROR
WAIT A WHILE
BUILD A FORMATTED TRACK IN RAM
Y POINTS TO 1793 DATA REGISTER
DISABLE INTERRUPTS
* GET RETURN ADDRESS AND STORE
* IT IN THE NON MASKABLE INTERRUPT VECTOR
POINT X TO THE FORMATTED TRACK RAM IMAGE
C30