Skip to content

Commit 346fa8f

Browse files
authored
Merge pull request #32 from danwerner21/main
Test code for Z80 print and a few fixes for DOS65 utilities
2 parents 7519f3d + 715fd76 commit 346fa8f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+38824
-10860
lines changed

6502PROC/DOS65/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ run.out: run205.asm
5555
ld65 run205.o -m run.map -C dos65.cfg -o run.out
5656

5757
sedit.out: sedit.asm
58-
ca65 --cpu 65sc02 sedit.asm -l sedit.lst
58+
ca65 --cpu 65sc02 sedit.asm -lsedit.lst
5959
ld65 sedit.o -m sedit.map -C dos65.cfg -o sedit.out
6060

6161

6502PROC/DOS65/alloc.co6

444 Bytes
Binary file not shown.

6502PROC/DOS65/alloc.lst

+269
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
ca65 V2.18 - Ubuntu 2.19-1
2+
Main file : alloc203.asm
3+
Current file: alloc203.asm
4+
5+
000000r 1 ;ALLOC
6+
000000r 1 ;VERSION 2.03-A
7+
000000r 1 ;RELEASED: 10 OCTOBER 1982
8+
000000r 1 ;LAST REVISION:
9+
000000r 1 ; 28 DECEMBER 1985
10+
000000r 1 ; ADDED PARAM FOR WIDTH
11+
000000r 1 ; 30 MARCH 2008
12+
000000r 1 ; REFORMATTED FOR TASM & ASM210
13+
000000r 1 ; ELIMINATED PAGE ZERO 0 & 1
14+
000000r 1 ; ADDED TOTAL BLOCK COUNT TO END MSG
15+
000000r 1 ; 3 APRIL 2008
16+
000000r 1 ; CORRECTED ERRORS
17+
000000r 1 ;SYNTAX IS ALLOC X WHERE X IS THE DRIVE (A TO H)
18+
000000r 1 ;IF X IS BLANK THEN THE DEFAULT DRIVE IS USED.
19+
000000r 1 ;USERS MAY WANT TO CHANGE THE VALUE OF WIDTH
20+
000000r 1 ;TO A SMALLER VALUE IF THEIR CONSOLE IS LESS THAN 80
21+
000000r 1 ;CHARACTERS WIDE.
22+
000000r 1 ;EXTERNAL REFERENCES
23+
000000r 1 PEM = $103 ;PEM ENTRY
24+
000000r 1 DFLFCB = $107 ;DEFAULT FCB
25+
000000r 1 TEA = $800 ;TEA START
26+
000000r 1 ;FIXED PARAMETERS
27+
000000r 1 CR = $D ;RETURN
28+
000000r 1 LF = $A ;LINEFEED
29+
000000r 1 ;WIDTH IS A SOMEWHAT OBSCURE WAY OF CONTROLLING DIPLAY WIDTH
30+
000000r 1 ;IT CAN BE SET TO 1, 3, 7, ETC. - AND WHEN SO SET THE NUMBER OF
31+
000000r 1 ;8 BLOCK WIDE BIT MAPS BECOMES 2, 4, 8, ETC.
32+
000000r 1 ;WIDTH CAN ONLY BE SET TO (2 TO THE N POWER) - 1
33+
000000r 1 WIDTH = 3 ;(WIDTH+1)*8-->CHARS PER LINE
34+
000000r 1 ;PAGE ZERO VARIABLES
35+
000000r 1
36+
000000r 1 DCBPNT = $02 ;DCB POINTER
37+
000000r 1 BITCNT = $04 ;COUNT OF TOTAL BLOCKS
38+
000000r 1 VECPNT = $06 ;VECTOR POINTER
39+
000000r 1 DFLDRV = $08 ;DEFAULT DRIVE
40+
000000r 1 TMPDRV = $09 ;TEMPORARY DRIVE
41+
000000r 1 FREE = $0A ;FREE BLOCKS
42+
000000r 1 BITNUM = $0C ;BIT (0 TO 7)
43+
000000r 1 BYTNUM = $0D ;BYTE (0 TO 255)
44+
000000r 1 LEADZ = $0E ;LEADING ZERO FLAG
45+
000000r 1 BLKSCD = $0F ;BLOCK SIZE CODE
46+
000000r 1 TOTAL = $10 ;TOTAL NUMBER OF BLOCK
47+
000000r 1
48+
000000r 1 ;MAIN PROGRAM
49+
000000r 1 .segment "TEA"
50+
000000r 1 .ORG $0800
51+
000800 1 A2 19 LDX #25 ;GET AND
52+
000802 1 20 03 01 JSR PEM ;SAVE
53+
000805 1 85 08 STA DFLDRV ;DEFAULT DRIVE
54+
000807 1 AD 08 01 LDA DFLFCB+1 ;GET OBJECT
55+
00080A 1 85 09 STA TMPDRV ;AND SAVE
56+
00080C 1 A2 0D LDX #13 ;INITIALIZE
57+
00080E 1 20 03 01 JSR PEM ;SYSTEM
58+
000811 1 A5 09 LDA TMPDRV ;GET TEMP
59+
000813 1 C9 20 CMP #' ' ;IF NOT A SPACE
60+
000815 1 D0 04 BNE HAVDRV ;USE DEFAULT
61+
000817 1 A5 08 LDA DFLDRV ;GET DEFAULT
62+
000819 1 10 05 BPL SETDRV ;AND GO
63+
00081B 1 38 HAVDRV: SEC ;DROP TEMP
64+
00081C 1 E9 01 SBC #1 ;BY ONE
65+
00081E 1 29 07 AND #%111 ;LOOK AT THREE LSBS
66+
000820 1 A2 0E SETDRV: LDX #14 ;THEN
67+
000822 1 85 09 STA TMPDRV ;SAVE DRIVE FOR DCB VECTOR
68+
000824 1 20 03 01 JSR PEM ;SELECT
69+
000827 1 A2 22 LDX #34 ;FIND DCB ADDRESS
70+
000829 1 20 03 01 JSR PEM
71+
00082C 1 85 02 STA DCBPNT ;SAVE POINTER
72+
00082E 1 84 03 STY DCBPNT+1
73+
000830 1 A0 00 LDY #0 ;GET MAX BLOCK NUMBER
74+
000832 1 B1 02 LDA (DCBPNT),Y
75+
000834 1 18 CLC ;BUMP TO GET NUMBER
76+
000835 1 69 01 ADC #1
77+
000837 1 85 0A STA FREE ;SET FREE COUNT
78+
000839 1 85 10 STA TOTAL ;AND TOTAL
79+
00083B 1 85 04 STA BITCNT ;AND BIT COUNTER
80+
00083D 1 C8 INY ;NOW GET HIGH
81+
00083E 1 B1 02 LDA (DCBPNT),Y ;AND ADD WITH CARRY
82+
000840 1 69 00 ADC #0
83+
000842 1 85 0B STA FREE+1
84+
000844 1 85 11 STA TOTAL+1
85+
000846 1 85 05 STA BITCNT+1
86+
000848 1 A0 06 LDY #6 ;GET SIZE CODE
87+
00084A 1 B1 02 LDA (DCBPNT),Y
88+
00084C 1 85 0F STA BLKSCD ;AND SAVE
89+
00084E 1 A2 1B LDX #27 ;GET VECTOR
90+
000850 1 20 03 01 JSR PEM ;TO MAP
91+
000853 1 85 06 STA VECPNT ;SAVE
92+
000855 1 84 07 STY VECPNT+1 ;IN MEMORY
93+
000857 1 A9 00 LDA #0 ;THEN CLEAR
94+
000859 1 85 0C STA BITNUM ;BIT
95+
00085B 1 85 0D STA BYTNUM ;BYTE
96+
00085D 1 85 0E STA LEADZ ;AND LEADING ZERO FLAG
97+
00085F 1 20 7A 09 JSR CRLF ;LEAVE BLANK LINE
98+
000862 1 A4 0D OUTLPE: LDY BYTNUM ;GET BYTE NUMBER
99+
000864 1 A6 0C LDX BITNUM ;AND BIT NUMBER
100+
000866 1 B1 06 LDA (VECPNT),Y ;GET MAP BYTE
101+
000868 1 3D 86 09 AND BITMSK,X ;OVERLAY MASK
102+
00086B 1 D0 04 BNE ISFULL ;BRANCH IF ALLOCATED
103+
00086D 1 A9 30 LDA #'0' ;ELSE SEND
104+
00086F 1 D0 0A BNE NEXT ;A ZERO
105+
000871 1 A5 0A ISFULL: LDA FREE ;GET LOW OF FREE COUNT
106+
000873 1 D0 02 BNE FRENZ ;JUMP IF NOT ZERO
107+
000875 1 C6 0B DEC FREE+1 ;ELSE DROP HIGH THEN DO LOW
108+
000877 1 C6 0A FRENZ: DEC FREE
109+
000879 1 A9 31 LDA #'1' ;SEND A
110+
00087B 1 20 81 09 NEXT: JSR CHROUT ;ONE
111+
00087E 1 A5 04 LDA BITCNT ;GET LOW OF COUNTER
112+
000880 1 D0 02 BNE BITNZ ;JUMP IF NOT ZERO
113+
000882 1 C6 05 DEC BITCNT+1 ;ELSE DROP HIGH THEN DO LOW
114+
000884 1 C6 04 BITNZ: DEC BITCNT
115+
000886 1 A5 04 LDA BITCNT ;TEST FOR ZERO
116+
000888 1 05 05 ORA BITCNT+1
117+
00088A 1 F0 1E BEQ DONE ;DONE IF ZERO
118+
00088C 1 E6 0C INC BITNUM ;BUMP BIT NUMBER
119+
00088E 1 A5 0C LDA BITNUM ;GET IT
120+
000890 1 C9 08 CMP #8 ;SEE IF DONE WITH BYTE
121+
000892 1 D0 CE BNE OUTLPE ;THEN LOOP
122+
000894 1 A9 00 LDA #0
123+
000896 1 85 0C STA BITNUM ;ELSE CLEAR BIT NUMBER
124+
000898 1 E6 0D INC BYTNUM ;BUMP BYTE NUMBER
125+
00089A 1 D0 02 BNE *+4 ;SKIP IF NOT ZERO
126+
00089C 1 E6 07 INC VECPNT+1 ;ELSE BUMP HIGH POINTER
127+
00089E 1 A5 0D LDA BYTNUM ;GET IT
128+
0008A0 1 29 03 AND #WIDTH ;IF NOT MOD-(WIDTH+1)
129+
0008A2 1 D0 BE BNE OUTLPE ;THEN LOOP
130+
0008A4 1 20 7A 09 JSR CRLF ;ELSE DO CR AND LF
131+
0008A7 1 4C 62 08 JMP OUTLPE ;AND LOOP
132+
0008AA 1 20 7A 09 DONE: JSR CRLF ;SEND TWO
133+
0008AD 1 20 7A 09 JSR CRLF ;CR AND LF PAIRS
134+
0008B0 1 ;NOW SEND FREE COUNT TO SCREEN
135+
0008B0 1 20 EF 08 JSR SNDFRE
136+
0008B3 1 A9 20 LDA #' ' ;SEND A SPACE
137+
0008B5 1 20 81 09 JSR CHROUT
138+
0008B8 1 ;NOW DISPLAY BLOCK SIZE
139+
0008B8 1 A5 0F LDA BLKSCD ;GET CODE
140+
0008BA 1 0A ASL A ;MULT BY TWO
141+
0008BB 1 AA TAX ;MAKE INDEX
142+
0008BC 1 BD 99 09 LDA BLKTBL,X ;GET ADDRESS
143+
0008BF 1 BC 9A 09 LDY BLKTBL+1,X
144+
0008C2 1 A2 09 LDX #9 ;SEND MESSAGE
145+
0008C4 1 20 03 01 JSR PEM
146+
0008C7 1 A9 A3 LDA #(CLSMSG & $ff) ;SEND
147+
0008C9 1 A0 09 LDY #((CLSMSG / $100)& $FF) ;SIZE
148+
0008CB 1 A2 09 LDX #9 ;MESSAGE
149+
0008CD 1 20 03 01 JSR PEM
150+
0008D0 1 ;NOW SHOW TOTAL BLOCK COUNT
151+
0008D0 1 A9 00 LDA #0 ;FIRST CLEAR LEADING ZERO FLAG
152+
0008D2 1 85 0E STA LEADZ
153+
0008D4 1 A5 10 LDA TOTAL
154+
0008D6 1 A4 11 LDY TOTAL+1
155+
0008D8 1 85 0A STA FREE
156+
0008DA 1 84 0B STY FREE+1
157+
0008DC 1 20 EF 08 JSR SNDFRE
158+
0008DF 1 A9 B5 LDA #(TTLMSG & $ff)
159+
0008E1 1 A0 09 LDY #((TTLMSG / $100)& $FF)
160+
0008E3 1 A2 09 LDX #9
161+
0008E5 1 20 03 01 JSR PEM
162+
0008E8 1 ;NOW EXIT
163+
0008E8 1 A5 08 LDA DFLDRV ;SELECT
164+
0008EA 1 A2 0E LDX #14 ;DEFAULT
165+
0008EC 1 4C 03 01 JMP PEM ;AND RETURN
166+
0008EF 1 ;SEND 16 BIT VALUE IN FREE TO SCREEN
167+
0008EF 1 A2 00 SNDFRE: LDX #0 ;CLEAR 10000'S
168+
0008F1 1 38 SEC
169+
0008F2 1 A5 0A F10000: LDA FREE ;DROP BY 10000
170+
0008F4 1 E9 10 SBC #(10000 & $ff)
171+
0008F6 1 85 0A STA FREE
172+
0008F8 1 A5 0B LDA FREE+1
173+
0008FA 1 E9 27 SBC #((10000 / $100)& $FF)
174+
0008FC 1 85 0B STA FREE+1
175+
0008FE 1 E8 INX ;BUMP DIGIT
176+
0008FF 1 B0 F1 BCS F10000 ;LOOP IF NO BORROW
177+
000901 1 A5 0A LDA FREE ;ELSE ADD 10000 BACK IN
178+
000903 1 69 10 ADC #(10000 & $ff)
179+
000905 1 85 0A STA FREE
180+
000907 1 A5 0B LDA FREE+1
181+
000909 1 69 27 ADC #((10000 / $100)& $FF)
182+
00090B 1 85 0B STA FREE+1
183+
00090D 1 CA DEX ;DROP DIGIT
184+
00090E 1 F0 06 BEQ N10000 ;SKIP IF ZERO
185+
000910 1 8A TXA ;ELSE SET FLAG
186+
000911 1 85 0E STA LEADZ
187+
000913 1 20 74 09 JSR SNDDIG ;SEND
188+
000916 1 A2 00 N10000: LDX #0 ;CLEAR 1000'S
189+
000918 1 38 SEC
190+
000919 1 A5 0A F1000: LDA FREE ;DROP BY 1000
191+
00091B 1 E9 E8 SBC #(1000 & $ff)
192+
00091D 1 85 0A STA FREE
193+
00091F 1 A5 0B LDA FREE+1
194+
000921 1 E9 03 SBC #((1000 / $100)& $FF)
195+
000923 1 85 0B STA FREE+1
196+
000925 1 E8 INX ;BUMP DIGIT
197+
000926 1 B0 F1 BCS F1000 ;LOOP IF NO BORROW
198+
000928 1 A5 0A LDA FREE ;ELSE ADD BACK IN
199+
00092A 1 69 E8 ADC #(1000 & $ff)
200+
00092C 1 85 0A STA FREE
201+
00092E 1 A5 0B LDA FREE+1
202+
000930 1 69 03 ADC #((1000 / $100)& $FF)
203+
000932 1 85 0B STA FREE+1
204+
000934 1 20 68 09 JSR DIGOUT ;SEND DIGIT
205+
000937 1 A2 00 LDX #0 ;CLEAR 100'S COUNT
206+
000939 1 38 SEC ;NOW
207+
00093A 1 A5 0A F100: LDA FREE ;NOW DO 100'S
208+
00093C 1 E9 64 SBC #100
209+
00093E 1 85 0A STA FREE
210+
000940 1 A5 0B LDA FREE+1
211+
000942 1 E9 00 SBC #0
212+
000944 1 85 0B STA FREE+1
213+
000946 1 E8 INX ;BUMP COUNT
214+
000947 1 B0 F1 BCS F100 ;UNTIL A BORROW
215+
000949 1 A5 0A LDA FREE
216+
00094B 1 69 64 ADC #100 ;THEN ADD
217+
00094D 1 85 0A STA FREE ;100 BACK AND SAVE
218+
00094F 1 20 68 09 JSR DIGOUT ;SEND DIGIT
219+
000952 1 A2 00 LDX #0 ;CLEAR 10'S
220+
000954 1 38 SEC ;NOW
221+
000955 1 A5 0A LDA FREE ;DROP
222+
000957 1 E9 0A F10: SBC #10 ;FREE BY 10
223+
000959 1 E8 INX ;AND BUMP COUNT
224+
00095A 1 B0 FB BCS F10 ;UNTIL A BORROW
225+
00095C 1 69 0A ADC #10 ;ADD 10 BACK IN
226+
00095E 1 85 0A STA FREE ;AND SAVE
227+
000960 1 20 68 09 JSR DIGOUT ;SEND DIGIT
228+
000963 1 A5 0A NO10: LDA FREE ;ALWAYS
229+
000965 1 4C 74 09 JMP SNDDIG ;DO 1'S
230+
000968 1 ;OUTPUT DIGIT
231+
000968 1 CA DIGOUT: DEX ;DROP COUNT
232+
000969 1 F0 04 BEQ CHKLDZ ;IF ZERO CHECK FLAG
233+
00096B 1 86 0E STX LEADZ ;ELSE SET
234+
00096D 1 D0 04 BNE MKEDIG ;THEN MAKE AND SEND
235+
00096F 1 A5 0E CHKLDZ: LDA LEADZ ;GET FLAG
236+
000971 1 F0 06 BEQ EXTDIG ;DONE IF ZERO
237+
000973 1 8A MKEDIG: TXA ;MOVE TO A
238+
000974 1 09 30 SNDDIG: ORA #'0'
239+
000976 1 20 81 09 JSR CHROUT ;SEND
240+
000979 1 60 EXTDIG: RTS ;QUIT
241+
00097A 1 ;OUTPUT A CR AND LF
242+
00097A 1 A9 0D CRLF: LDA #CR ;SEND
243+
00097C 1 20 81 09 JSR CHROUT ;A CR
244+
00097F 1 A9 0A LDA #LF ;THEN A LF
245+
000981 1 ;CHARACTER OUTPUT
246+
000981 1 conwrt:
247+
000981 1 A2 02 CHROUT: LDX #2 ;SEND CHAR
248+
000983 1 4C 03 01 JMP PEM ;TO CONSOLE
249+
000986 1 ;BIT MASK TABLE
250+
000986 1 80 40 20 10 BITMSK: .BYTE 128,64,32,16,8,4,2,1
251+
00098A 1 08 04 02 01
252+
00098E 1 ;BLOCK SIZE MESSAGES
253+
00098E 1 31 24 BLKMS0: .BYTE "1$"
254+
000990 1 32 24 BLKMS1: .BYTE "2$"
255+
000992 1 34 24 BLKMS2: .BYTE "4$"
256+
000994 1 38 24 BLKMS3: .BYTE "8$"
257+
000996 1 31 36 24 BLKMS4: .BYTE "16$"
258+
000999 1 ;BLOCK SIZE MESSAGE POINTERS
259+
000999 1 8E 09 90 09 BLKTBL: .WORD BLKMS0,BLKMS1,BLKMS2,BLKMS3,BLKMS4
260+
00099D 1 92 09 94 09
261+
0009A1 1 96 09
262+
0009A3 1 ;CLOSING MESSAGE
263+
0009A3 1 4B 20 42 4C CLSMSG: .BYTE "K BLOCKS FREE OF $"
264+
0009A7 1 4F 43 4B 53
265+
0009AB 1 20 46 52 45
266+
0009B5 1 20 54 4F 54 TTLMSG: .BYTE " TOTAL$"
267+
0009B9 1 41 4C 24
268+
0009BC 1
269+
0009BC 1 .END

6502PROC/DOS65/alloc.map

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Modules list:
2+
-------------
3+
alloc203.o:
4+
TEA Offs=000000 Size=0001BC Align=00001 Fill=0000
5+
6+
7+
Segment list:
8+
-------------
9+
Name Start End Size Align
10+
----------------------------------------------------
11+
TEA 000800 0009BB 0001BC 00001
12+
13+
14+
Exports list by name:
15+
---------------------
16+
17+
18+
19+
Exports list by value:
20+
----------------------
21+
22+
23+
24+
Imports list:
25+
-------------
26+

6502PROC/DOS65/alloc.out

2.18 KB
Binary file not shown.

6502PROC/DOS65/alloc.s19

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
S1230800A2192003018508AD08018509A20D200301A509C920D004A508100538E9012907D2
2+
S1230820A20E8509200301A22220030185028403A000B102186901850A85108504C8B1025F
3+
S12308406900850B85118505A006B102850FA21B20030185068407A900850C850D850E2018
4+
S12308607A09A40DA60CB1063D8609D004A930D00AA50AD002C60BC60AA931208109A50435
5+
S1230880D002C605C604A5040505F01EE60CA50CC908D0CEA900850CE60DD002E607A50D7C
6+
S12308A02903D0BE207A094C6208207A09207A0920EF08A920208109A50F0AAABD9909BCCE
7+
S12308C09A09A209200301A9A3A009A209200301A900850EA510A411850A840B20EF08A95A
8+
S12308E0B5A009A209200301A508A20E4C0301A20038A50AE910850AA50BE927850BE8B021
9+
S1230900F1A50A6910850AA50B6927850BCAF0068A850E207409A20038A50AE9E8850AA553
10+
S12309200BE903850BE8B0F1A50A69E8850AA50B6903850B206809A20038A50AE964850A72
11+
S1230940A50BE900850BE8B0F1A50A6964850A206809A20038A50AE90AE8B0FB690A850A34
12+
S1230960206809A50A4C7409CAF004860ED004A50EF0068A093020810960A90D208109A9C5
13+
S12309800AA2024C0301804020100804020131243224342438243136248E0990099209940D
14+
S11F09A00996094B20424C4F434B532046524545204F46202420544F54414C2463

6502PROC/DOS65/alloc203.o

3.26 KB
Binary file not shown.

6502PROC/DOS65/asm.co6

9.61 KB
Binary file not shown.

0 commit comments

Comments
 (0)