Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
. 1]5~
I ~OOD~
(b@lIDill OO@(illTI1J~~
. - -
L5@OO mrn
~(ID~~(IDlID(IDwrn ~
40 Best Machine Code
Routines for the 64
Mark Greenshields
Duckworth
First published in 1984 by
Gerald Duckworth & Co. Ltd.
The Old Piano Factory
43 Gloucester Crescent, London NW1
ROM Routines 26
6. Pixel scroll left: scrolls the screen one pixel to the left. 48
5
character ROM down to any location in RAM. 64
6
move the character set to the new bank. 108
7
37. Flash characters: allows you to flash the characters
on the screen. 157
40. Split screen: allows you to split the screen into text
and screen using raster interrupts. You specify where
the change is to take place and whether text or high res
is at the top or the bottom. 169
8
Preface
This book is not intended to teach you machine code on the
CBM 64. It contains 40 machine code routines that can be used
in your Basic or machine code programs to do things that are
not implemented in the standard BASIC or operating system
in your Commodore 64.
I hope that you find the book useful and that the routines help
to improve your programs.
Acknowledgments
M.G.
9
I would like to dedicate this book to my grandparents, Roy and
Gracie Reid.
10
Supermon
There follows a listing of Supermon which is a public domain
assembler/disassembler/monitor. Thanks to Jim Butterfield for
this program. The Basic program which follows is used to enter
this assembler. You will need this assembler or a similar one to
enter all the programs in this book.
Now run the loader and you will see the prompt:
.0800 ?
You will see that the first number corresponds with the first
number in the Supermon listing. This is where you type the data.
The first three lines that you would type are as follows. Type
the program in without spaces .
.0800 ? 001A086400992293
.0808 ? 1210101010535550
.0810 ? 45522036342D4D4F
Don't worry if you don't understand what you are typing in. Just
type exactly what is printed and it will work. It is worth it as
writing machine code using an assembler is far easier than doing
11
it by hand. Once you have finished typing in the program you
will be prompted with:
LOAD"SUPERMON",1 OR LOAD"SUPERMON",8
Then run the program. Some writing will appear on the screen
and a '.' prompt will appear.
LO= INT(number/256)
HI = ((number/256)-LO)*256
Now POKE 55 with the value of LO and POKE 56 with the value
of HI and run Supermon.
12
followed by parameters.
The first command that we will look at is 'A'. This stands for
ASSEMBLE and is the most frequently used command in any
assembler. It will be used for entering almost all the programs
in this book. The syntax for' A' is as follows:
After you press return from the first line, if it is incorrect syntax,
the computer will prompt you with an 'A' and the next address.
Therefore you need only enter the starting address, the assembler
does the rest. To leave the assembly press the return key.
This program makes the screen and the border black. Type it
in to see how to use the assembler. If you make an error the
computer will print a question mark. If this happens use the
normal screen editor and change the mistake and delete the
question mark. Press return and if the next address is prompted
then the line is now correct.
Now that you have typed this in, you may want to save the
program. The command to do this is'S'. The syntax is as follows:
S"name" ,device,start,end + 1
13
mark will be printed. The device is the device that the computer
is to save to: 01 is tape and 08 is disk. The O's before the number
are essential for correct syntax. The start is the starting address
in hex of the save. The end + 1 is the end address plus 1 that
the computer is to save to. The reason that you must save up
to the end + 1 is that the ROM routine used to save to memory
saves up to but not including the end address specified. All the
parameters must be separated by a comma.
o start
e.g. 0 1000
P start end
OPEN4,4 : eM 04 : SYS38893
14
The printer will print something and then you can type what
you want. You can use 'P' or 'M' (coming up next). To disable
the printer when it has finished type 'X' < return> (explained
later) and type CLOSE4. < return>.
M start end
where start and end are in hex. This command may also be used
to the printer. You may also change memory by using this
command and then typing over values and pressing return at
the end of each line.
where start and end are addresses in hex and byte is a byte in hex.
15
2. use the command 'L' in the monitor. It has the syntax:
L"name" ,device
To exit the assembler and retu rn to Basic type X < retu rn > or
press run/stop and restore.
Command Meaning
Syntax
1 HES="0123436789ABCDEF"
10 PRINT"(CLR}"
20 FORA=2049T04587STEPS
30 GOSUBI000:REM CONVERT ADDRESS TO HEX
IN HS
40 PRINT".";HS;:INPUT AS:REM 8 HEX NUMBE
RS
50 FORX=ITOI6STEP2
16
60 BS=MIDS(AS,X,2)
70 GOSUB2000:REM CONVERT HEX NO. TO DECI
MAL
80 POKEA+X/2,HEX
90 NEXT:NEXT
100 INPUT"SAVE TO TAPE OR DISK";TDS
110 IFTDS="D"ORTDS="T"THEN120
115 GOT0100
120 IFTDS="D"THENDEV=8
130 IFTDS="T"THENDEV=l
140 FORA=0T034:READB:POKEA+49152,B:NEXT:
POKE49153,DEV:INPUT"ARE YOU SURE";SS
150 IFSS="N"THEN100
160 SYS49152: REM SAVE ASSEMBLER
170 PRINT"MACHINE CODE SAVED"
180 PRINT"IT MAY BE LOADED FROM TAPE OR
DISK IN THE NORMAL WAY LIKE A BASIC"
190 PRINT"PROGRAM AND THEN RUN"
200 END
1000 Nl=INT(A/4096):N6=(A/4096-N1)*16:N2
=INT(N6):N3=INTN6-N2)*16)
1010 N4=(N6-N2)*16)-N3)*16
1030 HS=MIDS(HES,N1+1,1)+MIDS(HES,N2+1,1
)+MIDS(HES,N3+1,1)+MIDS(HES,N4+1,1)
1040 RETURN
2000 FORV=1T016:B=V-1:IFLEFTS(BS,1)=MIDS
(HES,V,1)THEN2020
2010 NEXT
2020 HEX=B*16
2030 FORV=1T016:B=V-1:IFRIGHTS(BS,1)=MID
S(HES,V,1)THEN2050
2040 NEXT
2050 HEX=HEX+B
2060 PRINT HEX
2070 RETURN
10000 DATA 162,1,160,1,32,186,255,162,26
,160,192,169,8,32,189,255,162,236,160
10010 DATA 17,169,251,32,216,255,96,83,8
5,80,69,82,77,79,78,0
200000PEN15,8,15:INPUT#15,AS,BS,CS,DS:P
RINTAS,BS,CS,DS:CLOSE15
17
PC SR AC XR YR SP
.197FE 33 ee 28 ee F6
.:e8ee ee lAm8 64 8e 99 22 93
.:e8m8 12 IDID ID ID 53 55 5e
.:e81m 45 522S 36 34 2D 4D 4F
.:e818 4E em31 m8 6E mm 99 22
.:e82m 112m 2m 2m 2e 2m 2m 2e
.:e828 2S 2m 2S 2m 2e 2m 2m 2S
.:S83m em 4B m8 78 8e 99 22 11
.:e838 2m 2E 2E 4A 49 4D 2m 42
.:m84m 55 54 54 45 52 46 49 45
.:S848 4C 44 mm 66 88 82 em 9E
.:m85m 28 C2 28 34 33 29 AA 32
.:m858 35 36 AC C2 28 34 34 29
.:m86m AA 31 32 37 29 ee ee ms
.:m868 AA AA AA AA AA AA AA AA
.:m87S AA AA AA AA AA AA AA AA
.:e878 AA AA AA AA AA AA AA AA
.:S88e A5 2D 85 22 A5 2E 85 23
.:e888 A5 37 85 24 A5 38 85 25
.:m89m Am ee A5 22 De e2 C6 23
.:m898 C6 22 Bl 22 De 3C A5 22
.:m8AS DS e2 C6 23 C6 22 Bl 22
.:m8A8 Fm 2185 26 A5 22 Dm e2
.:m8Bm C6 23 C6 22 Bl 22 18 65
.:m8B8 24 AA A5 26 65 25 48 A5
.:S8ce 37 De m2 C6 38 C6 37 68
.:S8C8 9137 8A 48 A5 37 Dm m2
.:m8Dm C6 38 C6 37 68 9137 18
.:e8D8 9S B6 C9 4F De ED A5 37
.:m8Em 85 33 A5 38 85 34 6C 37
.:m8E8 ee 4F 4F 4F 4F AD E6 FF
.:m8Fm ee 8D 16 m3 AD E7 FF me
.:e8F8 8D 17 m3 A9 8e 2m 9S FF
.:S9mm me em D8 68 8D 3E m2 68
.:mge8 8D 3D 92 68 8D 3C m2 68
.:m91m 8D 3B 92 68 AA 68 A8 38
.:m918 8A E9 92 8D 3A m2 98 E9
.:e92m mm em 8D 39 e2 BA 8E 3F
18
:0928 02 20 57 FD 00 A2 42 A9
.:0930 2A 20 57 FA 00 A9 52 D0
.:0938 34 E6 C1 D0 06 E6 C2 D0
.:0940 02 E6 26 60 20 CF FF C9
.:0948 0D D0 F8 68 68 EA EA EA
.:0950 EA EA A9 00 00 85 26 A2
.:0958 0D A9 2E 20 57 FA 00 EA
.:0960 EA EA EA EA 20 3E F8 00
.:0968 C9 2E F0 F9 C9 20 F0 F5
.:0970 A2 0E DD B7 FF 00 D0 0C
.:0978 8A 0A AA BD C7 FF 00 48
.:0980 BD C6 FF 00 48 60 CA 10
.:0988 EC 4C ED FA 00 A5 C1 8D
.:0990 3A 02 A5 C2 8D 39 02 60
.:0998 A9 08 85 1D A0 00 00 20
.:B9A0 54 FD B0 B1 C1 20 48 FA
.:09A8 0B 20 33 F8 00 C6 1D D0
.:09B0 F1 60 20 88 FA 00 90 0B
.:09B8 A2 00 00 81 C1 C1 C1 F0
.:09C0 03 4C ED FA 00 20 33 F8
.:09C8 00 C6 1D 60 A9 3B 85 C1
.:09D0 A9 02 85 C2 A9 05 60 98
.:09D8 48 20 57 FD 00 68 A2 2E
.:09E0 4C 57 FA 00 EA EA EA EA
.:09E8 EA A2 00 00 BD EA FF 00
.:09F0 20 D2 FF E8 E0 16 D0 F5
.:09F8 A0 3B 20 C2 F8 00 AD 39
.:0A00 02 20 48 FA 00 AD 3A 02
.:0A08 20 48 FA 00 20 B7 F8 00
.:0A10 20 8D F8 00 F0 5C 203E
.:0A18 F8 00 20 79 FA 00 90 33
.:0A20 20 69 FA 00 20 3E F8 00
.:0A28 20 79 FA 00 90 28 20 69
.:0A30 ~A 00 EA EA EA EA EA 20
.:0A38 E1 FF F0 3C A6 26 D0 38
.:0A40 A5 C3 C5 C1 A5 C4 E5 C2
.:0A48 90 2E A0 3A 20 C2 F8 00
.:0A50 20 41 FA 00 20 8B F8 00
.:0A58 F0 E0 4C ED FA 00 20 79
.:0A60 FA 00 90 03 20 80 F8 00
.:0A68 20 B7 F8 00 D0 07 2B 79
19
.:0A70 FA 00 90 EB A9 08 85 1D
.:0A78 20 3E F8 00 20 A1 F8 00
.:0A80 D0 F8 4C 47 F8 00 20 CF
.:0A88 FF C9 0D F0 BC C9 20 D0
.:0A90 D1 20 79 FA 20 90 03 20
.:0A98 80 F8 00 EA EA EA EA EA
.:0AA0 AE 3F 02 9A 78 AD 39 02
.:0AA8 48 AD 3A 02 48 AD 3B 02
.:0AB0 48 AD 3C 02 AE 3D 02 AC
.:0AB8 3E 02 40 EA EA EA EA EA
.:0AC0 AE 3F 02 9A 6C 02 A0 A0
.:0AC8 0184 BA 84 B9 88 84 B7
.:0AD0 84 90 84 93 A9 40 85 BB
.:0AD8 A9 02 85 BC 20 CF FF C9
.:0AE0 20 F0 F9 C9 BD F0 38 C9
.:BAE8 22 D0 14 20 CF FF C9 22
.:0AF0 F0 10 C9 0D F0 29 91 BB
.:0AF8 E6 B7 C8 C0 10 D0 EC 4C
.:0B00 ED FA 00 20 CF FF C9 0D
.:0B08 F0 16 C9 2C D0 DC 20 88
.:0B10 FA 00 29 0F F0 E9 C9 03
.:0B18 F0 E5 85 BA 20 CF FF C9
.:0B20 0D 60 6C 30 B3 6C 32 03
.:0B28 20 96 F9 00 D0 D4 EA EA
.:0B30 EA EA EA A9 00 00 20 EF
.:0B38 F9 00 A5 90 29 10 D0 C4
.:0B40 4C 47 F8 00 20 96 F9 00
.:0B48 C9 2C D0 BA 20 79 FA 00
.:0B50 20 69 FA 00 20 CF FF C9
.:0B58 2C D0 AD 20 79 FA 00 A5
.:0B60 C1 85 AE A5 C2 85 AF 20
.:0B68 69 FA 00 20 CF FF C9 0D
.:0B70 D0 98 EA EA EA EA EA 20
.:0B78 F2 F9 00 4C 47 F8 00 A5
.:0B80 C2 20 48 FA m0 A5 C1 48
.:0B88 4A 4A 4A 4A 20 60 FA 00
.:0B90 AA 68 29 0F 20 60 FA 00
.:0B98 48 8A 20 D2 FF 68 4C D2
.:0BA0 FF 09 30 C9 3A 90 02 69
.:0BA8 06 60 A2 02 B5 C0 48 B5
.:0BB0 C2 95 C0 68 95 C2 CA D0
20
.:0BB8 F3 60 20 88 FA 00 90 02
.:0BC0 85 C2 20 88 FA 00 90 02
.:0BC8 85 C1 60 A9 00 00 85 2A
.:0BD0 20 3E F8 00 C9 20 D0 09
.:0BD8 20 3E F8 00 C9 20 D0 0E
.:0BE0 18 60 20 AF FA 00 0A 0A
.:0BE8 0A 0A 85 2A 20 3E F8 00
.:0BF0 20 AF FA 00 05 2A 38 60
.:0BF8 C9 3A 90 02 69 08 29 0F
.:0C00 60 A2 02 2C A2 00 00 B4
.:0C08 C1 D0 08 B4 C2 D0 02 E6
.:0C10 26 D6 C2 D6 Cl 60 20 3E
.:0CI8 F8 00 C9 20 F0 F9 60 A9
.:0C20 00 00 8D 00 00 01 20 CC
.:0C28 FA 00 20 8F FA 00 20 7C
.:0C30 FA 00 90 09 60 20 3E F8
.:0C38 00 20 79 FA 00 B0 DE AE
.:0C40 3F 02 9A EA EA EA EA EA
.:0C48 A9 3F 20 D2 FF 4C 47 F8
.:0C50 e0 20 54 FD 0e CA De FA
.:0C58 60 E6 C3 D0 02 E6 C4 60
.:0C60 A2 02 B5 C0 48 B5 27 95
.:0C68 C0 68 95 27 CA D0 F3 60
.:0C70 A5 C3 A4 C4 38 E9 02 B0
.:0C78 0E 88 90 0B A5 28 A4 29
.:0C80 4C 33 FB 00 A5 C3 A4 C4
.:0C88 38 E5 Cl 85 IE 98 E5 C2
.:0C90 A8 05 IE 60 20 D4 FA 00
.:0C98 20 69 FA 00 20 E5 FA 00
.:0CA0 20 0C FB 00 20 E5 FA 00
.:0CA8 20 2F FB 00 20 69 FA e0
.:0CB0 90 15 A6 26 D0 64 20 28
.:0CB8 FB 00 90 5F Al Cl 81 C3
.:0CC0 20 05 FB 00 20 33 F8 00
.:0CC8 D0 EB 20 28 FB 00 18 A5
.:0CD0 IE 65 C3 85 C3 98 65 C4
.:0CD8 85 C4 20 0C FB 00 A6 26
.:0CE0 D0 3D Al Cl 81 C3 2e 28
.:eCE8 FB 0e Be 34 2e B8 FA ee
.:eCFe 2e BB FA e0 4C 7D FB e0
.:eCF8 2e D4 FA ee 20 69 FA e0
21
.:mDmm 2m E5 FA 80 28 69 FA 88
.:mD88 28 3E F8 882m 88 FA 88
.:mD18 98 14 85 1D A6 26 D8 11
.:mD18 28 2F FB 809m 8C A5 1D
.:mD28 81 C1 28 33 F8 88 D8 EE
.:8D28 4C ED FA 80 4C 47 F8 88
.:8D38 28 D4 FA 882m 69 FA 88
.:mD38 28 E5 FA 88 28 69 FA 88
.:8D48 28 3E F8 88 A2 88 88 28
.:8D48 3E F8 88 C9 27 D0 14 28
.:8D58 3E F8 08 9D 1m 82 E8 28
.:8D58 CF FF C9 0D Fm 22 E8 28
.:8D60 D8 F1 F8 1C 8E 80 88 81
.:0D68 20 8F FA 00 90 C6 9D 10
.:0D70 02 E8 28 CF FF C9 0D F0
.:0D78 89 20 88 FA 80 90 B6 E0
.:0D88 28 D8 EC 86 1C EA EA EA
.:0D88 EA EA 28 57 FD 88 A2 00
.:0D90 08 A0 08 08 B1 C1 DD 10
.:0D98 02 D0 0C C8 E8 E4 1C D0
.:0DA0 F3 20 41 FA 80 28 54 FD
.:0DA8 00 28 33 F8 80 A6 26 D0
.:0DB0 8D 28 2F FB 80 B8 DD 4C
.:0DB8 47 F8 80 20 D4 FA 00 85
.:0DC0 20 A5 C2 85 21 A2 00 00
.:0DC8 86 28 A9 93 20 D2 FF EA
.:0DD0 EA EA EA EA A9 16 85 1D
.:0DD8 20 6A FC 00 20 CA FC 00
.:0DE0 85 C1 84 C2 C6 1D D0 F2
.:0DE8 A9 9120 D2 FF 4C 47 F8
.:0DF0 00 A0 2C 20 C2 F8 00 20
.:0DF8 54 FD 00 20 41 FA 00 20
.:0E08 54 FD 08 A2 80 08 A1 Cl
.:0E08 20 D9 FC 00 48 28 1F FD
.:0E10 00 68 20 35 FD 00 A2 06
.:0E18 E0 03 D0 12 A4 1F F08E
.:0E20 A5 2A C9 E8 B1 C1 B8 1C
.:0E28 20 C2 FC 88 88 D0 F2 86
.:0E30 2A 98 8E BD 2A FF 00 20
.:0E38 A5 FD 00 BD 30 FF 00 F0
.:0E40 03 20 A5 FD 00 CA D0 D5
22
:0E48 60 20 CD FC 00 AA E8 D0
.:0E50 01 C8 98 20 C2 FC 00 8A
.:0E58 86 1C 20 48 FA 00 A6 1C
:0E60 60 A5 1F 38 A4 C2 AA 10
.:0E68 0188 65 C1 90 01 C8 60
.:0E70 A8 4A 90 0B 4A B0 17 C9
.:0E78 22 F0 13 29 07 09 80 4A
.:0E80 AA BD D9 FE 00 B0 04 4A
.:0E88 4A 4A 4A 29 0F DB 04 A0
.:0E90 80 A9 BB B0 AA BD 1D FF
.:0E98 BB 83 2A 29 03 85 1F 98
.:BEAB 29 8F AA 98 A0 03 E0 8A
.:BEA8 FB 0B 4A 90 08 4A 4A B9
.:0EB0 20 88 DB FA C8 88 D0 F2
.:0EB8 60 B1 C1 2B C2 FC 00 A2
.:BEC0 0120 FE FA 00 C4 1F C8
.:BEC8 9B F1 A2 03 C0 04 90 F2
.:BED0 6B A8 B9 37 FF 0B 85 28
.:BED8 B9 77 FF BB 85 29 A9 B0
.:0EE0 00 A0 B5 B6 29 26 28 2A
.:BEE8 88 D0 F8 69 3F 2B D2 FF
.:0EFB CA DB EC A9 20 2C A9 0D
.:0EF8 4C D2 FF 2B D4 FA 00 20
.:0F00 69 FA BB 2B E3 FA 00 2B
.:0FB8 69 FA B0 A2 00 0B 86 28
.:0F1B EA EA EA EA EA 2B 57 FD
.:BF18 0B 2B 72 FC 00 2B CA FC
.:0F20 00 85 C1 84 C2 20 E1 FF
.:0F28 F0 03 2B 2F FB BB BB E9
.:0F30 4C 47 F8 B0 20 D4 FA B0
.:0F38 A9 03 85 1D 20 3E F8 B0
.:0F40 20 A1 F8 B0 D0 F8 A5 20
.:BF48 85 C1 A5 21 85 C2 4C 46
.:0F5B FC 00 C5 28 F0 03 20 D2
.:BF58 FF 60 2B D4 FA BB 2B 69
.:0F60 FA 00 8E 11 02 A2 B3 20
.:0F68 CC FA BB 48 CA DB F9 A2
.:0F70 03 68 38 E9 3F AB B5 4A
.:BF78 6E 11 B2 6E 10 02 88 DB
.:0F8B F6 CA D0 ED A2 02 20 CF
.:0F88 FF C9 0D F0 1E C9 20 F0
23
.:8F9S FS 28 DS FE 88 B8 8F 28
.:SF98 9C FA S8 A4 C1 84 C2 85
.:8FA8 C1 A9 38 9D 18 82 E8 9D
.:8FA8 18 82 E8 DS DB 86 28 A2
.:8FBS SS 88 86 26 F8 84 E6 26
.:8FB8 F8 75 A2 88 88 86 1D A5
.:8FC8 26 28 D9 FC 88 A6 2A 86
.:SFC8 29 AA BC 37 FF SS BD 77
.:8FD8 FF 88 28 B9 FE 88 D8 E3
.:8FD8 A2 86 E8 83 D8 19 A4 1F
.:8FE8 F8 15 AS 2A C9 E8 A9 38
.:SFE8 B8 21 28 BF FE 88 D8 CC
.:8FF8 28 Cl FE 88 D8 C7 88 D8
.:8FF8 EB 86 2A 98 8B BC 38 FF
.:1888 88 BD 2A FF 88 28 B9 FE
.:1888 88 D8 BS CA D8 D1 F88A
.:1818 28 B8 FE 88 D8 AB 28 B8
.:1818 FE 88 D8 A6 AS 28 CS 1D
.:1828 D8 A8 28 69 FA 88 A4 1F
.:1828 FS 28 A5 29 C9 9D DS 1A
.:1S38 28 1C FB 88 98 8A 98 D8
.:1838 84 AS 1E 18 8A 4C ED FA
.:1848 88 C8 DS FA AS IE 18 F6
.:1848 A4 1F D8 83 19 C2 88 88
.:1858 91 Cl 88 D8 F8 AS 26 91
.:1858 C1 28 CA FC 08 85 C1 84
.:1868 C2 EA EA EA EA EA A8 41
.:1868 28 C2 F8 88 28 54 FD 88
.:1878 28 41 FA 88 28 54 FD 88
.:1878 EA EA EA EA EA 4C B8 FD
.:1888 )88 A8 28 BF FE 88 D8 11
.:1888 98 F8 8E 86 lC A6 1D DD
.:1898 18 82 88 E8 86 1D A6 1C
.:1898 28 68 C9 38 98 83 C9 47
.:18A8 68 38 68 48 82 45 83 D8
.:18A8 88 48 89 38 22 45 33 D8
.:18B8 88 48 89 48 82 45 33 D8
.:18B8 88 48 89 48 82 45 B3 D8
.:18C8 88 48 89 88 88 22 44 33
.:18C8 D8 8C 44 08 88 11 22 44
.:18D8 33 D8 8C 44 9A 18 22 44
24
.:19D8 33 D9 98 49 09 19 22 44
.:19E9 33 D0 08 40 09 62 13 78
.:19E8 A9 99 00 21 81 82 99 99
.:19F9 99 90 59 4D 91 92 86 4A
.:lSFe ee 9D 2C 29 2C 23 28 24
59 58 24 24
.:11""
: 11"8
.: 111"
1C
9D
9"
9A
9A
""
1C
1D
23
23
5D
9D
8B
8B
"9
1B
1D
9"
A1
A1
: 1118 9" 9" 29 19 AE 69 A8 19
: 1129 23 24 53 1B 23 24 53 19
: 1129 A1 99 9" 1A 5B 5B A5 69
: 1139 24 24 AE AE A9 AD 29 9"
7C 99 15 9C 6D 9C
: 1138
: 1149 ""
A5 69 ""
29 53 84 13 34 11
: 1148 A5 69 23 Afil D9 62 5A 48
: 1159 26 62 94 88 54 44 C8 54
: 1158 69 44 E8 94 "9 99 B4 fil8
: 1169 94 74 B4 28 6E 74 F4 CC
: 1168 4A 72 F2 A4 8A 9" fil8 AA
: 1178 A2 A2 74 74 74 72 44 69
: 1178 B2 32 B2 "fiI flI16 22 fil8 flI8
: 11816 1A 1A 26 26 72 72 88 C9
: 1199 C4 CA 26 48 44 44 A2 C9
: 119" 3A 3B 52 4D 47 59 4C 53
: 1199 e4 46 48 44 516 2C 41 42
: 11A" F9 16"35 F9 flI16 CC F9 88
: 11A9 F7 F8 56 F9 99 F9
: 11B"
""
FB
F4
fiI"
F9
92
16fi1 ""
FB
"C
flI16
""
FA fiI"
FB
3E
: 11B8 C" fiI"
39 FC "fiI 5B FD 8A FD
: 11CfiI
: 11C8 "fiI AC FD "fiI 46 ""
F8 fiI" FF
: 11DfiI F7 ED
8fi1 F7 flI16 "D 2" 2"
: 11D9 2" efll 43 2fi1 216 53 52 29
: 11E" 41 43 2fi1 58 52 29 59 52
: 11E9 2" 53 5fi1 45 52 22 29 29
25
ROM Routines
The routines in this book use various ROM routines to function.
They are as follows:
$B79E: Read the next expression in the BASIC text and put it
as a 8 bit integer in the X register. If the number is greater than
255 then print Illegal quantity error and return to Basic.
$E104: This routine gets the file name, the device number and
the secondary address from the Basic text. It gives an error if
any of the above are wrong. It is used in preparation for loading,
saving or verifying a program, as in MSAVE/MLOAOI
MVERIFY.
26
1. Fill
The following routine allows you to fill an area of memory with
a byte. It is called by the following command:
e.g. to fill the text screen with 'A' characters and the colour
screen with 1 (white), type the following:
SYS 28672,1024,2023,1
SYS 28672,55296,56295,1
;USES .FB AND .FC
ISTORE TOP ADDRESS IN
;828 AND 829
90: 7S00 20 FD AE JSR 5AEFD
;SCAN PAST COMMA
110: 7003 20 8A AD JSR SAD8A
;READ NUMBER AND PUT
I INTO FAC
140: 7006 20 F7 B7 JSR $B7F7
IGET NUMBER FROM FAC
.' AND PUT IN $14 AND $15
170: 7009 AS 14 LDA 514
170: 700B 8S FB STA .FB
27
18": 7""D A5 15 LDA $15
18": 7""F 85 FC STA $FC
28
B*
PC SR AC XR YR SP
.197FE 72 99 99 91 F6
29
2. Move
The following routine allows you to move an area of memory
to another location. It has the syntax:
SYS 24576,1024,2023,16384
30
170: 6016 20 8A AD JSR SAD8A
180: 6019 20 F7 B7 JSR SB7F7
190: 601C A5 14 LDA S14
200: 601E 8D 7A 60 STA TEMP+2
210: 6021 A5 15 LDA S15
220: 6023 8D 7B 60 STA TEMP+3
225: 6026 20 FD AE JSR .AEFD
230: 6029 20 8A AD JSR .AD8A
240: 602C 20 F7 B7 JSR .B7F7
250: 602F A5 14 LDA .14
268: 6031 8D 7C 68 STA TEMP+4
278: 6034 A5 15 LDA S15
288: 6036 8D 7D 68 STA TEMP+5
I
488: 6068 E6 FB ADDONE INC .FB
418: 6062 D8 82 BNE MORE
428: 6064 E6 FC INC .FC
438: 6066 E6 FD MORE INC .FD
448: 6868 D8 82 BNE RETURN
458: 686A E6 FE INC .FE
468: 686C 68
,
RETURN RTS
31
498: 686D A5 FC CHECK LDA $FC
588: 686F CD 7B 68 CMP TEMP+3
518: 6872 F8 83 BEGl FIN
528: 6874 4C 4F 68 JMP LOOP
READY.
B*
PC SR AC XR YR SP
.197FE 72 88 08 81 F6
32
6039 AD 78 60 LDA S6078
603C 85 FB STA SFB
603E AD 79 60 LDA S6079
6041 85 FC STA SFC
6043 AD 7C 61lJ LDA 561lJ7C
6046 85 FD STA SFD
6048 AD 7D 61lJ LDA S61lJ7D
604B 85 FE STA SFE
604D AIlJ IlJII LDY ..51lJ1lJ
6R14F B1 FB LDA (SFB) ~ Y
6051 91 FD STA (5FD) ~ Y
6R153 2R1 6R1 6R1 JSR 561lJ6R1
6056 A5 FB LDA .FB
6058 CD 7A 6R1 CMP .6R17A
6115B F0 111 BEG! 56R16D
6R15D 4C 4F 61lJ JMP 561lJ4F
6061lJ E6 FB INC 5FB
6R162 DIlJ 02 BNE S61lJ66
6064 E6 FC INC .FC
6066 E6 FD INC SFD
6068 D0 02 BNE S606C
606A E6 FE INC .FE
606C 60 RTS
606D A5 FC LDA .FC
606F CD 7B 60 CMP 5607B
6072 F0 03 BE6I S61lJ77
6074 4C 4F 61lJ JMP 5604F
6077 61lJ RTS
33
3. Pause
The following routine allows a listing to be stopped at any time.
It will in fact stop any output to the screen that is printed. It
works by interrupting the character out routine and check to
see if the shift key has been pressed. If it has then it loops until
the key has been released.
34
16S: S3DB 68 PLA
17S: S3DC 4C CA Fl JMP .FICA
lS3CS-S3DF
READY.
B*
PC SR AC XR YR SP
97FE 72 SS SS Sl F6
35
4. Function keys
The following program allows you to put commands onto the
function keys. It uses the IRQ interrupt to scan the keyboard.
There are listings in PAL and Supermon format to see how the
program works, but it is best to enter the program as the Basic
loader which follows. Any of the three ways works equally well
but it is easier to change the text to go on the function keys
from the Basic listing.
To turn the keys on type SYS 49152 (for the Basic listing, SYS
24576 for the other two). To turn them off press run/stop and
restore.
;ROUTINE TO SETUP
;FUNCTION KEYS
36
200: 6010 98 TYA
210: 6011 48 PHA
220: 6012 A5 C5 LDA SC5
230: 6014 C5 FB CMP SFB
240: 6016 F0 52 BEG! LOOP
250: 6018 85 FB STA $FB
260: 601A C9 03 CMP *3
270: 601C D0 08 BNE LOOPl
37
6BB: 6B59 AC 72 6B LDY CIBB
61B: 6B5C B9 73 6111 LOP LDA CIB1,Y
62B: 6B5F 9D 77 B2 STA SB277,X
631l1: 611162 E8 INX
641l1: 6B63 C8 INY
651l1: 6B64 EIlI B8 CPX ..S1lI8
66B: 6B66 DB F4 BNE LOP
67B: 6B68 86 C6 STX $C6
68B: 6B6A 68 LOOP PLA
69B: 6B6B A8 TAY
7BB: 6B6C 68 PLA
71B: 6B6D AA TAX
72B: 6B6E 68 PLA
73B: 6B6F 4C 31 EA JMP $EA31
;
75B: 6B72 BB Clll1B .BYT B
76B: 6B73 4C 49 53 CUll .ASC "LIST"
76B: 6B77 BD B4 B4 .BYT 13,4,4,4
77B: 6B7B 52 55 4E .ASC "RUNU
77S: 6S7E SD S4 04 .BYT 13,4,4,4,4
78S: 6B83 5S 52 49 .ASC "PRINT-
78S: 6S88 04 04 04 .BYT 4,4,4
79S: 6S8B 54 48 45 .ASC "THEN"
79B: 608F S4 04 04 .BYT 4,4,4,4
8SB: 6B93 4C 4F 41 .ASC "LOAD"
8SB: 6B97 S4 04 04 .BYT 4,4,4,4
81B: 6B9B 53 41 56 .ASC SAVE"
81S: 6S9F B4 04 04 .BYT 4,4,4,4
820: 6SA3 56 45 52 .ASC "VERIFY-
82S: 6SA9 04 04 .BYT 4,4
83S: 6SAB 47 4F 54 .ASC "GOTO"
830: 6SAF 04 04 04 .BYT 4,4,4,4
J6BSS-6BB3
READY.
38
B*
PC SR AC XR YR SP
.197FE 72 fIJfIJ fIJfIJ flJl F6
6fIJfIJfIJ 78 SEI
6flJflJl A9 flJD LDA .. 5f1JD
6f1JflJ3 8D 14 flJ3 STA 5f1J314
6f1JflJ6 A9 6fIJ LDA ..56fIJ
6f1JflJ8 8D 15 flJ3 STA .flJ315
6f1JflJB 58 CLI
6f1JflJC 6fIJ RTS
6f1JflJD 48 PHA
6f1JflJE 8A TXA
6f1JflJF 48 PHA
6flJlfIJ 98 TYA
6flJll 48 PHA
6f1J12 A5 C5 LDA .C5
6f1J14 C5 FB CMP 5FB
6f1J16 FfIJ 52 BEG .6f1J6A
6f1J18 85 FB STA .FB
6flJ1A C9 flJ3 CMP ...83
6flJ1C DfIJ flJ8 BNE 56826
6flJ1E A9 3fIJ LDA ...3fIJ
6f1J2fIJ 8D 72 6fIJ STA .6f1J72
6f1J23 4C 47 6fIJ .JMP .6f1J47
6f1J26 C9 flJ4 CMP ...flJ4
6f1J28 DfIJ flJ8 BNE 56832
6f1J2A A9 fIJfIJ LDA ..5fIJfIJ
6f1J2C 8D 72 6fIJ STA 56f1J72
6f1J2F 4C 47 6fIJ .JMP 56f1J47
6f1J32 C9 flJ5 CMP ...flJ5
6f1J34 DfIJ flJ8 BNE .6f1J3E
6f1J36 A9 lfIJ LDA ... lfIJ
6f1J38 8D 72 6fIJ STA S6f1J72
6f1J3B 4C 47 6fIJ .JMP .6f1J47
6f1J3E C9 flJ6 CMP ..5f1J6
6f1J4fIJ DfIJ 28 BNE .6f1J6A
6f1J42 A9 2fIJ LDA ...2fIJ
6f1J44 8D 72 6fIJ STA 56872
6f1J47 AD 8D 82 LDA 5f1J28D
6f1J4A C9 flJl CMP ,,5el
39
604C DS S9 BNE .6S37
604E AD 72 6S LDA .6S72
6031 18 CLC
6032 69 S8 ADC ...S8
6834 8D 72 6S STA .6S72
6837 A2 SS LDX ".SS
6839 AC 72 6S LD'!' .6S72
683C B9 73 6S LDA .6S73,Y
683F 9D 77 82 STA .S277,X
6862 E8 INX
6863 C8 IN'!'
6864 ES S8 CPX ...88
6S66 DS F4 BNE .6S3C
6S68 86 C6 STX .C6
6S6A 68 PLA
6S6B A8 TAY
6S6C 68 PLA
6S6D AA TAX
6S6E 68 PLA
6S6F 4C 31 EA JMP .EA31
: 6S72 SS 4C 49 33 54 SD S4 S4
: 6S7A S4 32 33 4E "D S4 84 S4
: 6S82 S4 3S 32 49 4E 34 S4 S4
: 6S8A S4 34 48 43 4E S4 84 S4
: 6S92 S4 4C 4F 41 44 S4 S4 S4
: 6S9A S4 33 41 36 43 S4 S4 S4
: 6SA2 S4 36 43 32 49 46 39 S4
: 6SAA S4 47 4F 34 4F S4 S4 S4
: 6SB2 S4 SS SS SS "S SS FF SS
40
IB DATA 12B,169,16,141,2B,3,169,192,141,
21,3,SS,96,234,234,234,72,13S,72,152,72
15 DATA 165,197,197,251,24B,Sl,133,251,2
Bl,3,2BS,S,169,4S,141,B,193,76,74,192
2B DATA2Bl,4,2BS,S,169,B,141,B,193,76,74
,192,2Bl,5,2BS,S,169,16,141,B,193,76,74
25 DATA 192,2Bl,6,2BS,39,169,32,141,B,19
3,173,141,2,2Bl,1,2BS,S,173,B,193,lB5,S
3B DATA141,B,193,162,B,172,B,193,lS5,1,1
93,157,119,2,232,2BB,224,S,2BS,244,134
35 DATA19S,lB4,16S,lB4,17B,lB4,76,49,234
4B FORA=49152T049267:READB:POKEA,B:NEXT
5B FORA=BT07:READK$:FORB=lTOS:L=ASCMID
$(K$,B,1))):IFL=95THENL=13
55 IFL=47THENL=4
6B POKE494B9+(A*S)+B,L:NEXT:NEXT:POKE494
B9,4:SYS49152
7B DATAI/LIST~III"
S0 DATA"PRINTIII H
9B DATAI/RUN~IIIII/
leB DATA"THENIIII"
I1B DATA"LOADIIII"
12B DATA"SAVEIIII H
13B DATAuVERIFYII"
14B DATA"GOTOIIII"
READY.
41
5. IRQ clock
The clock routine is updated by the IRQ interrupt which is called
by the computer every 50th of a second. The routine used to
print line numbers for BASIC is used to print the time (10 byte
in X and high byte in A). It is not very good for using when typing
in a program as the cursor is always at the top of the screen
but it works fine in a program. The syntax to set the clock is
as follows:
SYS 28672,hours,minutes.
;SYS 24576,HOURS,MINS
;
;SECONDS ASSUMED ZERO
42
200: 708B 8D B7 70 STA HOUR
;
501lJ: 703F EE BA 71lJ MAIN INC COUNTER
~10: 7042 AD BA 70 LDA COUNTER
520: 704~ C9 3C CMP *61lJ
531lJ: 71lJ47 B0 03 BCS CHANGE
43
638: 7839 B8 83 BCS MINUTECHANGE
44
1040: 70A9 20 D2 FF JSR .FFD2
READY.
B*
PC SR AC XR YR SP
.197FE 72 00 "0 01 F6
45
7828 A9 78 LDA ..578
782A 8D H5 83 STA 58315
782D AD B7 78 LDA 578B7
7838 AD B8 78 LDA 578B8
7833 A9 88 LDA ..588
7835 8D B9 78 STA 578B9
7838 A9 88 LDA "588
783A SD BA 70 STA 579BA
783D 58 CLI
793E 69 RTS
783F EE BA 78 INC S78BA
7942 AD BA 78 LDA S70BA
7845 C9 3C CMP ...3C
7847 B0 83 BCS S704C
7849 4C 31 EA JMP SEA31
784C A9 80 LDA ...00
784E 8D BA 78 STA S78BA
7951 EE B9 78 INC S79B9
7854 AD B9 78 LDA .78B9
7857 C9 3C CMP ..S3C
7859 B8 93 BCS 5785E
795B 4C 8D 70 JMP 5708D
795E A9 99 LDA ..598
7968 SD B9 79 STA 570B9
7863 EE BS 71i!J INC 57li!JB8
7866 AD B8 70 LDA 578B8
7869 C9 3C CMP ..S3C
786B BIi!J 93 BCS 57879
71i!J6D 4C 8D 78 JMP 578SD
71i!J78 A9 90 LDA "S01i!J
7872 SD B8 78 STA 578BS
7875 EE B7 71i!J INC 570B7
7878 AD B7 78 LDA 578B7
797B C9 lS CMP "51S
71i!J7D 91i!J 9E BCC 571i!J8D
71i!J7F A9 1i!J9 LDA ..509
7li!JSl 8D B9 71i!J STA S7li!JB9
7li!JS4 8D BS 70 STA 570B8
7887 SD B7 78 STA 578B7
7li!JSA 4C 31 EA JMP 5EA31
71i!J8D A9 13 LDA ..513
46
788F 28 D2 FF JSR SFFD2
7892 A9 88 LDA ..S88
7894 AE B7 78 LDX S78B7
7897 28 CD BD JSR SBDCD
789A A9 3A LDA ..S3A
789C 28 D2 FF JSR .FFD2
789F A9 88 LDA ...88
78A1 AE B8 78 LDX .78B8
78A4 28 CD BD JSR .BDCD
78A7 A9 3A LDA ... 3A
78A9 28 D2 FF JSR SFFD2
78AC A9 88 LDA ..S88
78AE AE B9 78 LDX .78B9
78B1 28 CD BD JSR .BDCD
78B4 4C 31 EA JMP .EA31
78B7 88 BRK
78B8 88 BRK
78B9 88 BRK
78BA 88 BRK
47
6. Pixel scroll left
The following routine scrolls the screen to the left by one pixel
every time that it is called.
To scroll the screen one pixel to the left type SYS 4096.
48
239: 1937 9D 99 94 STA .9499, X
249: 193A BD Fl 94 LDA .94Fl,X
259: 193D 9D F9 94 STA .94F9,X
269: 1949 BD El 95 LDA .93El,X
279: 1943 9D E9 95 STA .95E9,X
289: 1946 BD Dl 96 LDA .96Dl,X
299: 1949 9D D9 96 STA $96D9,X
399: 194C E8 INX
319: 194D C8 INY
329: 194E C9 27 CPY tt$27
339: 1959 D9 E2 BNE LOOP
349: 1952 E8 INX
339: 1953 A9 99 LDY tt9
369: 1933 CE 44 93 DEC $9344
379: 1938 D9 DA BNE LOOP
389: 195A 69 RTS
399: 195B 97 BYTE .BYTE7
1 1999-103C
READY.
B*
PC SR AC XR YR SP
; 97FE 72 99 99 91 F6
49
UIlC 18 CLC
Ul1D 69 87 ADC ..S87
181F 8D 16 D8 STA .D816
1822 A9 87 LDA ..SRJ7
1824 8D SB 18 STA .lRJ5B
1827 28 2B 1RJ JSR .lRJ2B
1RJ2A 6RJ RTS
1RJ2B A9 RJ6 LDA ..SRJ6
1RJ2D 8D 44 RJ3 STA .RJ344
1838 A2 RJ8 LDX ...RJRJ
1RJ32 ARJ RJ8 LDY ...RJRJ
1834 BD RJ1 84 LDA .RJ4RJ 1 , X
1RJ37 9D RJ8 84 STA .RJ48RJ,X
183A BD F1 RJ4 LDA .RJ4F1,X
1RJ3D 9D F8 84 STA .RJ4F8,X
1RJ48 BD El RJS LDA .RJSE1,X
1RJ43 9D E8 8S STA S85ERJ,X
1RJ46 BD Dl 86 LDA SRJ6D1,X
1RJ49 9D D8 86 STA SRJ6DRJ,X
1RJ4C E8 INX
1RJ4D C8 INY
184E CRJ 27 CPY ...27
18SRJ DRJ E2 BNE SlRJ34
1RJS2 E8 INX
18S3 ARJ RJ8 LDY ...RJRJ
1RJSS CE 44 RJ3 DEC .RJ344
IRJS8 D8 DA BNE .lRJ34
IRJSA 68 RTS
IRJSB RJ7 ???
50
7. Pixel scroll right
The following routine scrolls the screen to the right by one pixel.
To scroll the screen by one pixel to the right type SYS 4096.
51
228: 183F 9D 79 84 STA 1825+128,X
238: 1842 BD A8 84 LDA 1824+168,X
238: 1845 9D A1 84 STA 1825+168,X
248: 1848 BD C8 84 LDA 1824+288,X
248: 184B 9D C9 84 STA 1825+288,X
258: 184E BD F8 84 LDA 1824+248,X
258: 1851 9D F1 84 STA 1825+248,X
268: 1854 BD 18 85 LDA 1824+288,X
268: 1857 9D 19 85 STA 1825+288,X
278: 185A BD 48 85 LDA 1824+328,X
278: 185D 9D 41 85 STA 1825+328,X
288: 1868 BD 68 85 LDA 1824+368,X
288: 1863 9D 69 85 STA 1825+368,X
298: 1866 BD 98 85 LDA 1824+488,X
298: 1869 9D 91 85 STA 1825+488,X
388: 186C BD B8 85 LDA 1824+448,X
388: 186F 9D B9 85 STA 1825+448,X
318: 1872 BD E8 85 LDA 1824+488,X
318: 1875 9D E1 85 STA 1825+488, X
328: 1878 BD 88 86 LDA 1824+528,X
328: 187B 9D 89 86 STA 1825+528,X
338: 187E BD 38 86 LDA 1824+568, X
338: 1881 9D 31 86 STA 1825+568,X
348: 1884 BD 58 86 LDA 1824+688,X
348: 1887 9D 59 86 STA 1825+688,X
358: 188A BD 88 86 LDA 1824+648,X
358: 188D 9D 81 86 STA 1825+648,X
368: 1898 BD A8 86 LDA 1824+688,X
368: 1893 9D A9 86 STA 1825+688,X
378: 1896 BD D8 86 LDA 1824+72", X
378: 1"99 9D D1 86 STA 1825+72",X
3811: 1119C BD F8 116 LDA 1"24+76", X
3811: 1"9F 9D F9 86 STA 1825+76",X
3911: l"A2 BD 28 flO LDA 11124+8"", X
3911: l"A5 9D 21 "7 STA 1"25+8"",X
41111: l11A8 BD 48 "7 LDA 1"24+84", X
4"": l"AB 9D 49 "7 STA 1"25+84",X
41": ll1AE BD 7" "7 LDA 1"24+88", X
41": I"Bl 9D 71 "7 STA 1"25+88",X
42": I11B4 BD 98 "7 LDA 1"24+92", X
42": I"B7 9D 99 "7 STA 1"25+92",X
43": II1BA BD C" "7 LDA 1"24+96", X
52
431': lSBO 90 Cl 1'7 STA 11'25+961', X
441': lSCS CA OEX
441': lSCl ES FF CPX 4t.FF
441': lSC3 FS 1'3 BEG! FIN
441': lSC:! 4C 2A 11' JMP LOOP
451': lSC8 61' FIN RTS
461': lSC9 1'1' BYTE BYTES
llSSS-lSCA
READY.
B*
PC SR AC XR YR SP
; 97FE 72 1'1' 1'1' 1'1 F6
53
1033 9D 29 04 STA .0429, X
1036 BD 50 04 LDA .0450, X
1039 9D 31 04 STA .0451,X
103C BD 78 04 LDA .8478, X
103F 9D 79 04 STA .0479, X
1042 BD A0 04 LDA .04A0,X
1043 9D A1 84 STA .84A1, X
1048 BD C8 04 LDA .04C8,X
104B 9D C9 84 STA .04C9,X
104E BD F8 "4 LDA ."4F0,X
1"51 9D F1 "4 STA ."4F1,X
1054 BD 18 05 LDA .0518,X
1037 9D 19 "5 STA .8519,X
185A BD 40 85 LDA .8540, X
103D 9D 41 83 STA .0541,X
1060 BD 68 "5 LDA .0568, X
1063 9D 69 05 STA .8569, X
1066 BD 90 05 LDA .0590, X
1069 9D 91 05 STA ."591, X
106C BD B8 05 LDA .85B8,X
106F 9D B9 05 STA .05B9,X
1072 BD E0 05 LDA ."5E0,X
1"75 9D El "5 STA ."5El,X
1078 Bll 08 06 LDA ."608, X
1"7B 9D "9 "6 STA .06"9, X
1"7E BD 30 06 LDA ."630, X
1081 9D 31 "6 STA ."631, X
1"84 BD 58 "6 LDA .0658, X
1"87 9D 39 "6 STA ."639, X
1"8A BD 8" "6 LDA ."680, X
108D 9D 81 06 STA .0681,X
1"90 BD A8 06 LDA .06A8,X
1093 9D A9 "6 STA .86A9,X
1"96 BD D0 06 LDA .06D",X
1"99 9D Dl "6 STA .06D1,X
1"9C BD F8 "6 LDA .86F8,X
1"9F 9D F9 06 STA ."6F9,X
10A2 BD 20 07 LDA .0720, X
Itz!A5 9D 21 07 STA .0721,X
10A8 BD 48 07 LDA .0748,X
10AB 9D 49 07 STA ."749, X
54
10AE BD 70 07 LDA .0770, X
10Bl 9D 71 07 STA .0771,X
10B4 BD 9S 07 LDA .079S,X
10B7 9D 99 07 STA .0799, X
10BA BD C0 07 LDA .07C0,X
10BD 9D Cl 07 STA S07Cl,X
10C0 CA DEX
10Cl E0 FF CPX ...FF
10C3 F0 03 BE6'I S10CS
10C5 4C 2A 10 JMP S102A
10CS 60 RTS
10C9 00 BRK
55
8. Pixel scroll up
The routine here scrolls the screen up one pixel every time that
it is called.
56
24B: 4B2D 29 F8 AND #248
24B:
24l1J:
248:
4B2F
4838
4832
18
69
8D
8'
11 D8
CLC
ADC .,
STA 53265
258: 4835 A9 8D LDA .. 13
268: 483' 28 D2 FF JSR SFFD2
2'8: 483A 6B RTS
288: 483B 8' BYTE BYTE'
l4888-483C
READY.
B*
PC SR AC XR YR SP
.19'FE '2 88 88 81 F6
57
482F 18 CLC
4838
4832
69",
8D 11 D8
ADC
STA
".8'
.D811
483S A9 "D LDA ...8D
483' 28 D2 FF JSR .FFD2
483A 68 RTS
483B 8' ???
58
9. Pixel scroll down
The following routine scrolls the screen down one pixel when
it is called. However, due to the way the character scroll works
(using the ROM print routine), the top line of the screen is not
scrolled. If this routine were coupled with a raster interrupt to
suppress the scroll at the top of the screen then this area would
stay stationary while the rest would scroll independently.
59
218: 4827 8D 4B 48 STA BYTE
228: 482A AD 11 D8 LDA ~326~
228: 482D 29 Fe AND tt248
228: 482F 8D 11 D8 STA 53265
238: 4832 A9 13 LDA It" (HOME)"
248: 4834 28 D2 FF JSR 5FFD2
2~8: 4837 A9 11 LDA 1t"(CUR DNP
268: 4839 28 D2 FF JSR SFFD2
278: 483C A9 9D LDA tt (CUR L}H
288: 483E 28 D2 FF JSR SFFD2
298: 4841 A9 94 LDA ttll(INST DEL)
388: 4843 28 D2 FF JSR 5FFD2
318: 4846 A9 88 LDA 1t128
328: 4848 8~ DA STA 218
338: 484A 68 RTS
348: 484B 88 BYTE BYTE8
1 4888-484C
READY.
B*
PC SR AC XR YR SP
,97FE 72 88 88 81 F6
60
4020 C9 08 CMP ...08
4022 F0 81 BEQ .4825
4824 60 RTS
4825 A9 88 LDA ...88
4027 8D 4B 48 STA S484B
482A AD 11 D8 LDA SD811
482D 29 Fe AND ..SF 8
482F 8D 11 D8 STA SD811
4832 A9 13 LDA ... 13
4834 28 D2 FF JSR SFFD2
4837 A9 11 LDA ... 11
4839 28 D2 FF JSR SFFD2
483C A9 9D LDA ...9D
483E 28 D2 FF JSR SFFD2
4841 A9 94 LDA ..S94
4843 28 D2 FF JSR SFFD2
4846 A9 88 LDA ...80
4848 85 DA STA SDA
484A 68 RTS
484B 88 BRK
61
10. Colour
This routine allows you to change the screen colour, the bord-
er colour, the text colour, extended colours 1, 2 and 3 (or mul-
ticolour) in one command.
62
248: 7827 28 37 78 JSR PARAM
268: 782A 8D 23 D8 STA ~3283
278: 782D 28 FD AE JSR .AEFD
288: 7838 28 37 78 JSR PARAM
388: 7833 8D 24 D8 STA ~3284
318: 7836 68 RTS
328: 7837 28 9E B7 PARAM JSR .B79E
328: 783A 8A TXA
338: 783B 68 RTS
348: 783C 4C 48 B2 161ERR JMP .B248
J7888-783F
READY.
B*
PC SR AC XR YR SP
.197FE 72 88 88 81 F6
63
11. Copy
This routine allows you to copy the contents of part of or all
of the character ROM to a specified part of RAM. This is to make
user defined characters easier to set up.
The address is where you want to start your character set at.
The number of pages to copy is the number of 256 byte blocks
of the ROM to copy down. Only whole numbers are allowed.
The character ROM is 16 blocks long. If you specify more than
16 then an illegal quantity error will occur.
SYS 24576,8192,16
or, to copy only the first K of the ROM down to location 12288
type:
SYS 24576,12288,4
POKE 53272,24
64
PAL ec) 1979 BRAD TEMPLETON
2
2B: 6fi1BB .OPT P,OO
3B: 6BBB
, *= S6BBB
,ROUTINE TO MOVE
,CHARACTER
,ROM TO SPECIFIED
, LOCATION
,SYNTAX
;
,SYS24S76,START,NO OF
,PAGES TO COPY
,WHERE PAGES ARE 2S6
,BYTES LONG
lSB: 68BB 2B FD AE JSR SAEFD
16B: 68B3 2B 8A AD JSR SAD8A
17": 68B6 2B F7 B7 JSR SB7F7
18": 68B9 AS 14 LDA S14
19": 68BB 8S FB STA SFB
211": 68BD AS 1S LDA S1S
21": 6811F 8S FC STA SFC
375:
376:
683B A9 BB
6832 8D BE DC
LDA
STA
."
S6334
38": 6fi13S A9 33 LDA .. 51
65
390: 6037 85 01 STA 1
400: 6039 B1 FE LOOP LDA (SFE),Y
410: 603B 91 FB STA (SFB),Y
420: 603D C8 INY
430: 603E D0 F9 BNE LOOP
READY.
B*
PC SR AC XR YR SP
; 97FE 72 1lJ0 1lJ0 IIJl F6
66
6011 20 FD AE JSR SAEFD
6014 20 9E B7 JSR SB79E
6017 8A TXA
6018 C9 11 CMP .. Sl1
601A 90 03 BCC S601F
601C 4C 48 B2 JMP SB248
601F 85 FD STA SFD
6021 A9 00 LDA ..S00
6023 8D 58 60 STA S605B
6026 A0 00 LDY ..S00
6028 A9 fIJfIJ LDA .. SfIJfIJ
602A 85 FE STA SFE
6f1J2C A9 DfIJ LDA .. SD0
6f1J2E 85 FF STA SFF
6f1J3fIJ A9 fIJfIJ LDA .. SfIJfIJ
6f1J32 8D flJE DC STA SDCflJE
6f1J35 A9 33 LDA .. S33
6f1J37 85 01 STA SflJl
6f1J39 B1 FE LDA (SFE),Y
6f1J3B 91 FB STA (SFB),Y
6f1J3D C8 INY
6f1J3E DfIJ F9 BNE S6039
6f1J4fIJ EE 58 6fIJ INC S6f1J5B
6f1J43 AD 5B 6fIJ LDA S605B
6f1J46 C5 FD CMP SFD
6048 BfIJ 07 BCS S6051
6f1J4A E6 FC INC SFC
604C E6 FF INC SFF
604E 4C 39 60 JMP S6039
6051 A9 37 LDA .. S37
6f1J53 85 flJ1 STA S01
6055 A9 flJ1 LDA .. S01
6057 8D flJE DC STA SDCflJE
6f1J5A 60 RTS
67
12. Sprite/char
If you are using sprites in a program the time will come when
you want to find what character the sprite is under or over. You
can see which one, but the computer cannot. Commodore kindly
made it possible for the video chip to detect if it has hit a character
or not, but not to detect which one. The following program does
this. It is written to detect the charcter under sprite O. To find
out which character it is, use SYS 16384 from Basic or JSR $4000
from machine code. The character code is returned in location
828 ($033C), so to find the character execute the routine and
PEEK or LOA(X or Y) location 828 ($033C)
1. Change the first line from LOA $0000 to LOA $ hex location
of 'X' coordinate of the sprite that you want to test.
The routine checks which character is under the top left 8 bytes
of the sprite (going down). i.e.
68
123
123
123
123
123
123
123
123
and so on ...
The line at location $4004 is SBe #$18. The number after the
SBe must never be less than $18 (24), but if you add one to
this value for every bit across the sprite then you can alter where
on the horizontal the routine will check. (This number must never
exceed $30 (48) if the sprite is not expanded in the 'X' direction
or $60 (96) if expanded.) Remember that as the sprite is expanded
each dot on the sprite is 2 dots wide, therefore you will need
to multiply the amount greater than $18 by two and add it to $18.
Or, to get the routine to check for the 7th to the 15th bit across
in an expanded sprite, make the line SBe # (24 + 7*2) which
is SBe #$26.
e.g. to make the routine check for the bottom 8 bytes of the
sprite when it is unexpanded the line is SBe #$47.
69
or, to make the routine check for the 10th to the 18th byte down
in an expanded sprite the line is SBe #$3A + 2*10 which is
SBe #$4E
70
1ge: 4e3A 69 lD ADC tt29
2ee: 4e3C 8D 99 4e STA X2STORE
21e: 4e3F AD 9B 4e MOREl LDA Y2STORE
22e: 4e42 8D 96 4e STA NUMBERl
23e: 4e45 A9 28 LDA tt4e
24e: 4e47 8D 97 4e STA NUMBER2
25e: 4e4A 2e 79 4e JSR MULTIPLY
26e: 4e4D AD 99 4e LDA X2STORE
27e: 4e5e 6D 94 4e ADC RESULT
28e: 4e53 8D 94 4e STA RESULT
2ge: 4e56 AD 95 4e LDA RESULT+l
3ee: 4e59 69 ee ADC tte
31e: 4e5B 8D 95 4e STA RESULT+l
32e: 4e5E AD 95 4e LDA RESULT+l
33e: 4e61 18 CLC
340: 4062 69 04 ADC tt4
35e: 4064 8D 95 40 STA RESULT+l
; CHARACTER IN LOCATION
; IN LOCS RESULT AND RESULT+l
380: 4e67 AD 94 40 LDA RESULT
380: 406A 85 FB STA SFB
3ge: 406C AD 95 4e LDA RESULT+l
3ge: 406F 85 FC STA SFC
40e: 4071 Ae e0 LDY tte
41e: 4073 Bl FB LDA (SFB),Y
420: 4075 eD 3C e3 STA 828
430: 4078 60 RTS
440: 4079 A9 00 MULTIPLY LDA tt0
450: 407B 8D 94 40 STA RESULT
46e: 407E A2 08 LDX tt8
470: 4080 4E 96 40 LOOP LSR NUMBERl
480: 4083 ge e4 BCC NO ADD
4ge: 4085 18 CLC
50e: 4086 6D 97 4e ADC NUMBER2
51e: 4089 6A NO ADD ROR A
520: 408A 6E 94 4e ROR RESULT
530: 408D CA DEX
540: 4e8E De Fe BNE LOOP
550: 4090 8D 95 40 STA RESULT+l
56e: 4e93 6e RTS
71
58": 4"94 RESULT WORD"
59": 4"96 "" "" NUMBER1 BYTE"
6"": 4"97 ""
"" NUMBER2 BYTE"
61": 4"98 X1STORE BYTE"
62": 4"99 "" X2STORE BYTE"
63":
64":
4"9A
4"9B
""
"" Y1STORE
Y2STORE
BYTE"
BYTE"
14"""-4"9C ""
READY.
B*
PC SR AC XR YR SP
I 97FE 72 00 00 01 F6
72
492S SA TXA
4929 4A LSR
492A 4A LSR
492B 4A LSR
492C SD 99 49 STA $4999
492F AD 19 D9 LDA $D919
4932 C9 01 CMP .. 591
4934 D9 09 BNE $493F
4936 AD 99 49 LDA $4999
4939 lS CLC
493A 69 lD ADC .. 51D
493C SD 99 49 STA $4999
493F AD 9B 49 LDA $499B
4942 SD 96 49 STA $4996
4945 A9 2S LDA ...2S
4947 SD 97 49 STA $4997
494A 29 79 49 JSR 54979
494D AD 99 49 LDA $4999
4959 6D 94 49 ADC $4994
4953 SD 94 49 STA 54994
4956 AD 95 49 LDA 54995
4959 69 99 ADC ..599
495B SD 95 49 STA 54995
495E AD 95 49 LDA 54995
4"61 lS CLC
4"62 69 04 ADC "5"4
4964 8D 95 4" STA $4"95
4"67 AD 94 4" LDA 54994
4"6A 85 FB STA .FB
4"6C AD 95 4" LDA 54995
4"6F 85 FC STA .FC
4971 A" 09 LDY "5"9
4"73 Bl FB LDA C5FB),Y
4975 SD 3C 93 STA .933C
4"78 69 RTS
4979 A9 09 LDA ..599
4"7B 8D 94 49 STA $4994
497E A2 0S LDX "59S
4"S" 4E 96 4" LSR $4996
49S3 99 04 !.lCC $49S9
4"85 18 CLC
73
4086 6D 97 40 ADC $4097
4089 6A ROR
408A 6E 94 40 ROR $4094
408D CA DEX
408E D0 F8 BNE $4888
4098 8D 93 48 STA $4095
4893 68 RTS
4094 88 BRK
4895 88 BRK
4096 88 BRK
4897 00 BRK
4898 88 BRK
4899 00 BRK
489A 08 BRK
489B 88 BRK
74
13. Doke
The following routine allows you to POKE a 16 bit number into
two consecutive locations. This could be to change a RAM vec-
tor. It replaces the following line of Basic code:
DOKE ROUTINE
75
-
20S: S3Dl 2S FD AE JSR SAEFD
21S: 03D4 2S 8A AD JSR SAD8A
22S: S3D7 2S F7 B7 JSR SB7F7
READY.
B*
PC SR AC XR YR SP
; 97FE 72 S0 00 Sl F6
76
14. Deek
This routine is complementary to Doke. It allows you to read
the contents of two consecutive locations in memory. It replaces
the following line of Basic code:
SYS 828,address
SIMULATED DEEK
FUNCTION
ONLY USED TO PRINT
THE VALUE
IN TWO CONSECUTIVE
LOCATIONS IN 16 BIT
FORMAT
SYNTAX
SYS929,ADDRESS
EG. SYS92S,79S
77
2H': .033C 2.0 FD AE JSR SAEFD
22.0: .033F 2.0 8A AD JSR SAD8A
23.0: .0342 2.0 F7 B7 JSR SB7F7
l033C-,0358
READY.
B*
PC SR AC XR YR SP
; 97FE 72 0.0 00 01 F6
78
15. 3 channel IRQ tune
The following routine will playa tune independently of the other
things that the computer is doing.
The data for the tune is held in the tunetable in the PAL listing
and from location $6074 onwards in the disassembly.
79
5a: 61l121l1 8D IlID D4 STA 54285
80
16flJ: 6flJ5E E8 INX
16flJ: 6flJ5F C8 INY
16flJ: 6flJ6flJ 86 FB STX 251
16flJ: 6flJ62 84 FC STY 252
16flJ: 6flJ64 EflJ 3flJ CPX tt48
16flJ: 6flJ66 BflJ flJ3 BCS RE
16flJ: 6flJ68 4C 31 EA .JMP SEA31
READY.
81
B*
PC SR AC XR YR SP
.197FE 72 flIflI flIflI flIl F6
6fl1fl1fl1 78 SEI
6fl1fl11 A9 32 LDA ...32
6fl1113 8D 14 113 STA $11314
6fl1116 A9 611 LDA ...6fl1
6fl1118 8D 1~ 113 STA .1I31~
61111B A9 flIF LDA ...IIF
61111D 8D 18 D4 STA SD418
611111 A9 13 LDA ... 13
61112 8D 84 D4 STA $D4114
6111~ A9 411 LDA ...411
61117 8D 85 D4 STA .D411~
6111A 8D 86 D4 STA SD4116
6111D 8D 8C D4 STA SD411C
61128 8D 8D D4 STA SD411D
61123 A9 21 LDA ...21
61125 8D 8B D4 STA SD411B
61128 A9 811 LDA .. SIIII
6112A 85 FB STA SFB
6112C 8~ FC STA SFC
6112E 8~ FD STA SFD
61138 ~8 eLI
61131 68 RTS
61132 A6 FB LDX .FB
61134 A4 FC LDY .FC
61136 BD 74 611 LDA .61174, X
61139 8D 811D4 STA .D4811
6113C BD A6 611 LDA S6I1A6,X
6113F 8D 87 D4 STA SD487
61142 BD A7 611 LDA S6I1A7,X
6114~ aD 88 D4 STA SD488
61148 BD 7~ 611 LDA S6117~,X
6114B 8D 81 D4 STA SD481
684E A~ FD LDA .FD
611~8 C9 8A CMP ...8A
6852 BII 85 BCS S61159
61154 E6 FD INC SFD
61156 4C 31 EA JMP SEA31
82
6.059 A9 e.0 LDA .. S.0.0
6.05B 85 FD STA SFD
6.05D E8 INX
6.05E E8 INX
6.05F C8 INY
6.06.0 86 FB STX SFB
6.062 84 FC STY SFC
6.064 E.0 3.0 CPX ..S3.0
61666 Bm e3 BCS S6.06B
6.068 4C 31 EA JMP .EA31
6m6B A2 em LDX ....016
6m6D 85 FB STA SFB
6m6F 85 FC STA .FC
61671 4C 31 EA JMP SEA31
61674 C6 2D DEC .2D
61676 .0.0 BRI<
61677 16m BRI<
6.078 C6 2D DEC S2D
83
16. List alter
The following routine lets you list a program in a specified column
width. I have used it to list the Supermon loader in a width suita-
ble for a book page.
84
270: 0373 60 RTS
280: 0374 6C 78 03 NEWPRT JMP (OLDOUT)
290: 0377 50 COLUMN .BYT 80
300: 0378 OLDOUT = *'OLDOUT+2
310: 0378 COUNT =
l033C-0378
READY.
B*,
PC SR AC XR YR SP
; 97FE 72 00 01lJ 01 F6
85
17. Old
This routine allows a program accidentally newed to be reco-
vered. It also works after a SYS 64738 or SYS 58260 (cold or
warm start). If the old routine is not in memory when you need
it, do not worry: it can be loaded in after the new and executed
and the program will still be recovered.
READY.
86
PC SR AC XR YR SP
.;97FE 72 00 00 01 F6
B*
PC SR AC XR YR SP
; 97FE 72 00 00 01 F6
87
18. Graph
This routine is the graph (or high res) command. It turns on the
high res screen which is located at 24576 and the colour memory
at 16384. It does not clear the screen.
; GRAPH FUNCTION 26
READY.
88
B*
PC SR AC XR YR SP
; 97FE 72 ee es el F6
89
19. NRM
This is the complementary routine to graph. It turns the high
res screen off and returns to the normal text screen.
READY.
B*
PC SR AC XR YR SP
.197FE 72 IS IS 11 F6
90
20. CLG
This routine clears the high res screen. Two parameters are re-
quired. The first defines the drawing colour and the second the
background colour. Both are values between 0 and 15 and are
the same as the usual text colours.
91
15m: cm57 A9 m" LDA .. m
15m: cm59 85 FB STA SFB
16m: cm5B A9 6" LDA .. 96
16m: cm5D 85 FC STA SFC
17m: cm5F Am m" LDY .. m
18m: cm61 A9 m" LDA .. m
19m: cm63 91 FB LOOP STA CSFB) ,Y
2mm: C"65 C8 INY
21m: C"66 D" FB BNE LOOP
22": C"68 E6 FC INC SFC
23": C"6A A6 FC LDX SFC
24": C"6C E" 8" CPX .. 128
25m: C"6E D" F3 BNE LOOP
26m: C"7" AD 85 C" LDA FIN
27":
28":
C"73
C"75
A2
9D
m"
4" LOOP1
LDX
STA
.."
S4""",X
29": C"78
C"7B
9D
9D
""
"" 41
42
STA
STA
S41mm,X
$42"", X
3"":
31": C"7E 9D
E8
""
"" 43 STA
INX
.43"",X
32": C"81
32": cm82 Dm F1 BNE LOOP1
32": C"84 6" RTS
33": C"85 FIN *
lC"26-CS85
READY.
B*
PC SR AC XR YR SP
. I 97FE 72 "m "1 F6
C"26 2" FD AE
"" JSR SAEFD
C"29 2" SA AD JSR SAD8A
C"2C 2" F7 B7 JSR SB7F7
C"2F A5 15 LDA $15
C"31 F" "3 BEG! SC"36
C"33 4C 48 B2 JMP SB248
C"36 A5 14 LDA 514
92
C038 8D 8S C0 STA SC08S
C03B 20 FD AE JSR SAEFD
C03E 20 8A AD JSR SAD8A
C041 20 F7 B7 JSR SB7F7
C044 AS 15 LDA S15
C046 F0 03 BEQ SC04B
C048 4C 48 B2 JMP SB248
C04B A5 14 LDA S14
C04D 0A ASL
C04E 0A ASL
C04F 0A ASL
C050 0A ASL
C051 0D 85 C0 ORA SC085
C054 8D 85 C0 STA SC085
C057 A9 016 LDA ..S00
C059 85 FB STA SFB
C05B A9 616 LDA ..S60
C05D 85 FC STA SFC
C05F A0 00 LDY ..S00
C061 A9 0m LDA ..S00
C063 91 FB STA CSFB),Y
cm65 C8 INY
C066 D0 FB BNE SC063
C068 E6 FC INC SFC
Cm6A A6 FC LDX SFC
C06C Em 8m CPX ..S80
C06E D0 F3 BNE SC063
C070 AD 85 C0 LDA scm85
C073 A2 00 LDX ..S00
cm75 9D 1616 48 STA S400m,x
C078 9D 016 41 STA S4100,X
C07B 9D 016 42 STA S4200,X
C07E 9D mf6 43 STA S4380,X
C081 E8 INX
C882 Df6 Fl BNE SC075
C884 60 RTS
93
21. Plot
This routine plots a point Oil the high res screen . It requires
two parameters: the X coordinate (0-319) and the Y coordinate
(0-199) to be plotted.
;AND $15
50: CaSA TEMP = $FD
6a: caSA SCREEN = $6ma0
70: Ca8A CHECKCOM = $AEFD
sa: cmSA COORD = $B7EB
98: cmSA FALSE = 255
lmm: cmSA TRUE = 0
13m: cmSA A9 mm SET LDA ttTRUE
14m: cmsc SD 3A Cl SETl STA RSFLAG
94
220: C09F E9 01 SBC tt>320
230: C0Al B0 54 BCS TOOBIG
95
510: C0Dl 65 15 ADC XCOORD
+1
520: C0D3 85 FE STA TEMP+l
96
77": C12A 8" ORMASI< .BYT %1""""
"""
78": C12B 4" .BYT %"110""
"""
79": C12C 2" .BYT %""1""
"""
8"": C12D 1" .BYT %"""1"
"""
81": C12E "8 .BYT %""""1
"""
82": C12F "4 .BYT %fO""fO"
1""
83": C13" "2 .BYT %"""""
"1"
84"= C131 fOl .BYT %""fO"fO
""1
READY.
97
B*
PC SR AC XR YR SP
; 97FE 72 flJflJ flJflJ flJl F6
98
CtlCF A5 FE LDA $FE
CtlDl 65 15 ADC $15
CtlD3 85 FE STA $FE
CtlD5 A5 FD LDA $FD
CtlD7 18 CLC
C"D8 69 IlJIlJ ADC ...1lJ1lJ
CtlDA 85 FD STA .FD
C"DC A5 FE LDA .FE
CtlDE 69 61lJ ADC ... 61lJ
C"EIlJ 85 FE STA .FE
CtlE2 A2 IlJIlJ LDX ...1lJ1lJ
C"E4 Al FD LDA C.FD,X)
CtlE6 2C JA Cl BIT SC1JA
C"E9 11lJ 1lJ6 BPL .CIlJFl
C"EB J9 J2 Cl AND .C132,Y
CIlJEE 4C F4 CIlJ JMP .CIlJF4
CtlFl 19 2A Cl ORA .C12A,Y
C"F4 81 FD STA C.FD,X)
CIlJF6 61lJ RTS
CIlJF7 61lJ RTS
99
22. Unplot
This routine is complementary to Plot. It unplots a point on the
high res screen. Just type in the routine below and unplot is
ready.
30' *=SC0S6
40' LDA .. SFF
50' BNE SET1
READY.
PC SR AC XR YR SP
.,97FE 72 0'0' 0'0' 0'1 F6
100
23. Char
This routine puts a character onto the high res screen. You speci-
fy three parameters: the X coordinate (0-39), the Y coordinate
(0-24) and the character code (screen code).
;CHAR X,Y,CHARACTER,
;EOR OR DELETE
70: C13B 4C 48 B2 ERROR JMP SB248
80: C13E 20 FD AE JSR SAEFD
90: C141 20 ID C2 JSR PARAMS
100: C144 A5 14 LDA S14
100: C146 C9 28 CMP .. 40
100: C148 B0 Fl BCS ERROR
110: C14A 8D 48 C2 STA XSTORE
120: C14D 20 FD AE JSR SAEFD
130: C150 20 ID C2 JSR PARAMS
140: C153 A5 14 LDA S14
140: C155 C9 19 CMP .. 25
14m: C157 B0 E2 BCS ERROR
150: C159 8D 4C C2 STA YSTORE
;TOTAL = Y*320 + X*8
170: C15C AD 48 C2 LDA XSTORE
180: C15F 8D 48 C2 STA MULTI
190: C162 A9 08 LDA .. 8
200: C164 8D 49 C2 STA MULT2
210: C167 20 28 C2 JSR MULTIPLY
220: C16A AD 46 C2 LDA RESULT
101
23.0: C16D 85 FB STA .FB
24.0: C16F AD 47 C2 LDA RESULT+1
25.0: C172 85 FC STA .FC
;NOW Y=32.0*Y
28.0: C174 AD 4C C2 LDA YSTORE
29.0: C177 8D 48 C2 STA MULTl
399: C17A A9 28 LDA .. 49
31.0: C17C 8D 49 C2 STA MULT2
32B: C17F 2B 2B C2 JSR MULTIPLY
33B: C182 AD 46 C2 LDA RESULT
339: C185 8D 5B C2 STA STORERES
33B: C188 AD 47 C2 LDA RESULT+l
33B: C18B 8D 51 C2 STA STORERES+l
34B: C18E A2 B7 LDX .. 7
35.0: C199 AD 46 C2 LOOP12 LDA RESULT
35B: C193 6D 5B C2 ADC STORERES
369: C196 8D 46 C2 STA RESULT
369: C199 AD 47 C2 LDA RESULT+l
379: C19C 69 B.0 ADC .. B
379: C19E 8D 47 C2 STA RESULT+l
389: CIAl CA DEX
399: CIA2 D.0 EC BNE LOOP12
4.09: CIA4 A2 97 LDX .. 7
41.0: CIA6 AD 47 C2 LOOP14 LDA RESULT+l
429: CIA9 18 CLC
429: CIAA 6D 51 C2 ADC STORERES+l
439: ClAD 8D 47 C2 STA RESULT+l
449: CIBB CA DEX
45.0: CIBl D9 F3 BNE LOOP14
46.0: CIB3 AD 47 C2 LDA RESULT+l
47.0: CIB6 18 CLC
47.0: CIB7 69 69 ADC ...6.0
48.0: CIB9 8D 47 C2 STA RESULT+l
49.0: CIBC A5 FB LDA .FB
59.0: CIBE 18 CLC
5.0.0: CIBF 6D 46 C2 ADC RESULT
51B: CIC2 85 FB STA .FB
52.0: CIC4 A5 FC LDA .FC
53.0: CIC6 6D 47 C2 ADC RESULT+l
54.0: CIC9 85 FC STA .FC
102
559: C1CB 29 FD AE JSR SAEFD
569: C1CE 29 lD C2 JSR PARAMS
579: C1Dl A5 14 LDA S14
589: C1D3 8D 4E C2 STA CHAR
599: C1D6 AD 4E C2 LDA CHAR
699: C1D9 8D 48 C2 STA MULTl
619: C1DC A9 98 LDA tt8
629: C1DE 8D 49 C2 STA MULT2
639: C1El 2111 2B C2 JSR MULTIPLY
641l1: C1E4 AD 46 C2 LDA RESULT
; CHARACTER LOCATION
651l1: C1E7 85 FD STA SFD
661l1: C1E9 AD 47 C2 LDA RESULT+l
679: C1EC 18 CLC
;ADD .D9 TO SD99S
671l1: C1ED 69 De ADC ttsDe
68S: ClEF 85 FE STA SFE
699: C1Fl A9 ge LDA tt9
699: C1F3 8D 4A C2 STA COUNT
69S: C1F6 78 SEI
691l1: C1F7 A9 33 LDA tt51
69S: C1F9 85 01 STA .91
71l1S: C1FB A9 llIe LDY tt9
711l1: C1FD Bl FD LOOPl LDA (SFD),Y
729: C1FF 91 FB STA (SFB),Y
73S: C21l11 E6 FB INC SFB
73S: C21l13 Dill 92 BNE Nl
74S: C2e5 E6 FC INC SFC
75S: C21l17 E6 FD Nl INC SFD
761l1: C2S9 DS e2 BNE N2
77S: C2SB E6 FE INC SFE
78S: C2eD EE 4A C2 N2 INC COUNT
79S: C21e AD 4A C2 LDA COUNT
8es: C213 C9 III 8 CMP tt8
81S: C215 De E6 BNE LOOPl
829: C217 A9 37 LDA tt55
829: C219 85 e1 STA 1
829: C21B 58 CLI
829: C21C 69 RTS
839: C21D 29 8A AD PARAMS JSR SAD8A
849: C229 29 F7 B7 JSR SB7F7
103
85": C223 AS 15 LDA S15
85": C225 F" "3 BEQ FINROUT
86": C227 4C 48 B2 JMP SB248
86": C22A 6" FINROUT RTS
87": C22B A9 "9 MULTIPLY LDA tt"
88": C22D 8D 46 C2 STA RESULT
89": C23" A2 "8 LDX tt8
9"": C232 4E 48 C2 LOOP21 LSR MULTl
91": C235 9" "4 BCC LOOP9
92": C237 18 CLC
93": C238 6D 49 C2 ADC MULT2
94": C23B 6A LOOP9 ROR A
95": C23C 6E 46 C2 ROR RESULT
96": C23F CA DEX
97": C24" D" F" BNE LOOP21
98": C242 8D 47 C2 STA RESULT+l
99": C245 6" RTS
1""": C246 RESULT WORD"
1"1": C248 "" "" MULTl .BYT
1"2": C249 "" MULT2 .BYT "
1"3": C24A "" COUNT .BYT "
1"4": C24B "" XSTORE .BYT "
1"5": C24C ""
"" YSTORE .BYT "
""
1"6": C24D EORFLAG .BYT
1"7": C24E
1"8": C24F
""
"" CHAR
STORE
.BYT
.BYT "
1"9": C25" "" STORERES WORD" "
lC13B-C252 "" ""
READY.
B*
PC SR AC XR YR SP
; 97FE 72 "1 F6
CIJB 4C 48 B2
"" "" JMP SB248
CIJE 2" FD AE JSR SAEFD
C141 2" ID C2 JSR SC21D
104
C144 A5 14 LDA $14
C146 C9 28 CMP 41.28
C148 B9 Fl ICS $C13B
C14A 8D 41 C2 STA $C24B
C14D 29 FD AE JSR $AEFD
C159 29 lD C2 JSR SC21D
C153 A5 14 LDA $14
C155 C9 19 CMP ttS19
C157 B9 E2 ICS SC131
C159 8D 4C C2 STA SC24C
C15C AD 4B C2 LDA $C24B
C15F 8D 48 C2 STA SC248
C162 A9 98 LDA ttS98
C164 8D 49 C2 STA SC249
C167 29 2B C2 JSR SC22B
C16A AD 46 C2 LDA SC246
C16D 85 FB STA SFB
C16F AD 47 C2 LDA SC247
C172 85 FC STA SFC
C174 AD 4C C2 LDA SC24C
C177 8D 48 C2 STA SC248
C17A A9 28 LDA ttS28
C17C 8D 49 C2 STA SC249
C17F 29 21 C2 JSR SC22B
C182 AD 46 C2 LDA SC246
C185 8D 59 C2 STA SC259
C188 AD 47 C2 LDA SC247
C18B 8D 51 C2 STA SC251
C18E A2 97 LDX 41.97
C199 AD 46 C2 LDA SC246
C193 6D 59 C2 ADC SC259
C196 8D 46 C2 STA SC246
C199 AD 47 C2 LDA SC247
C19C 69 99 ADC ttS99
C19E 8D 47 C2 STA SC247
C1Al CA DEX
C1A2 D9 EC ENE SC199
C1A4 A2 97 LDX 41.97
C1A6 AD 47 C2 LDA .C247
C1A9 18 CLC
C1AA 6D 51 C2 ADC .C251
105
ClAD 8D 47 C2 STA SC247
CIBS CA DEX
CIBl DS F3 BNE SCIA6
CIB3 AD 47 C2 LDA SC247
CIB6 18 CLC
CIB7 69 6S ADC "56S
CIB9 8D 47 C2 STA SC247
CIBC A~ FB LDA 5FB
CIBE 18 CLC
CIBF 6D 46 C2 ADC SC246
CIC2 85 FB STA 5FB
CIC4 A~ FC LDA SFC
CIC6 6D 47 C2 ADC SC247
CIC9 85 FC STA SFC
CICB 2S FD AE JSR SAEFD
CICE 2S ID C2 JSR SC21D
CIDl A5 14 LDA 514
CID3 8D 4E C2 STA SC24E
CID6 AD 4E C2 LDA SC24E
CID9 8D 48 C2 STA SC248
CIDC A9 S8 LDA "SS8
CIDE 8D 49 C2 STA SC249
CIEl 2S 2B C2 JSR SC22B
CIE4 AD 46 C2 LDA SC246
CIE7 8~ FD STA SFD
CIE9 AD 47 C2 LDA SC247
CIEC 18 CLC
CIED 69 DS ADC "5DS
ClEF 8~ FE STA SFE
CIFl A9 SS LDA ...SS
CIF3 8D 4A C2 STA SC24A
CIF6 78 SEI
CIF7 A9 33 LDA "S33
CIF9 85 Sl STA SSl
CIFB AS SS LDY .. SSS
CIFD Bl FD LDA (SFD) ,Y
CIFF 91 FB STA (SFB),Y
C2S1 E6 FB INC SFB
C2S3 DS S2 BNE SC2S7
C205 E6 FC INC SFC
C207 E6 FD INC SFD
106
C209 D0 912 BNE SC20D
C20B E6 FE INC SFE
C20D EE 4A C2 INC SC24A
C210 AD 4A C2 LDA SC24A
C213 C9 918 CMP .. S08
C215 D0 E6 BNE SCIFD
C217 A9 37 LOA ..S37
C219 85 911 STA .01
C21B 58 CLI
C21C 60 RTS
C21D 20 8A AD JSR SAD8A
C220 20 F7 B7 JSR SB7F7
C223 A5 15 LOA S15
C225 F0 913 BEG! SC22A
C227 4C 48 B2 JMP SB248
C22A 60 RTS
C22B A9 910 LOA ...00
C22D 8D 46 C2 STA SC246
C230 A2 918 LOX .. S08
C232 4E 48 C2 LSR SC248
C235 991 914 BCC .C23B
C237 18 CLC
C238 6D 49 C2 ADC SC249
C23B 6A ROR
C23C 6E 46 C2 ROR SC246
C23F CA DEX
C240 D0 F0 BNE .C232
C242 8D 47 C2 STA .C247
C245 60 RTS
.:C246 091 00 00 00 00 00 00 00
.:C24E 9191 00 091 00 10 CF A5 BA
107
24. Change bank
This routine allows easy access to the four 16K banks accessi-
ble by the VIC II chip. It does not copy the character set down.
To do this, use the copy routine given above.
ROUTINE TO CHANGE
BANK FOR
VIC II CHIP
SYNTAX
108
25.0: .0357 BD 6B .03 LDA L56576,X
26.0: .035A 8D .0.0 DD STA 56576
27.0: .035D A9 93 LDA #"to
28.0: .035F 2.0 D2 FF JSR SFFD2
29.0: .0362 6.0 RTS
READY.
B*
PC SR AC XR YR SP
; 97FE 72 .0.0 .0.0 .01 F6
109
25. Invert
This routine inverts all or some of the high res screen (it can
invert any part of memory).
110
;
21": C276 LOOP LDY
22": C278
C27A
A"
A9
51
""
FF
FB
LDA
EOR
tt"
tt255
(SFB),Y
23":
24": C27C 91 FB STA (.FB) ,Y
25": C27E 2" 95 C2 JSR ADD
26": C281 A5 FB LDA .FB
26": C283 CD 3C "3 CMP 828
26": C286 F" "3 BEQ CHECK
27": C288 4C 76 C2 JMP LOOP
28": C28B AS FC CHECK LDA .FC
28": C28D CD 3D "3 CMP 829
28": C29" F" "B BEQ FINISH
29": C292 4C 76 C2 JMP LOOP
3"": C295 E6 FB ADD INC .FB
3"": C297 F" "1 BEQ FCPLUS1
31": C299 6" RTS
32": C29A E6 FC FCPLUS1 INC SFC
32": C29C 6" RTS
33": C29D 6" FINISH RTS
lC252-C29E
READY.
B*
PC SR AC XR YR SP
; 97FE 72 "1 F6
C252 FD
""AE"" JSR .AEFD
2"
C255 2" 8A AD JSR $AD8A
C258 2" F7 B7 JSR .B7F7
C25B A5 14 LDA 514
C25D 85 FB STA .FB
C25F A5 15 LDA $15
C261 85 FC STA .FC
C263 2" FD AE JSR SAEFD
111
C266 20 8A AD JSR SAD8A
C269 20 F7 B7 JSR SB7F7
C26C A5 14 LDA S14
C26E 8D 3C 03 STA S033C
C271 A5 15 LDA S15
C273 8D 3D 03 STA S033D
C276 A0 00 LDY ..S00
C278 A9 FF LDA ..SFF
C27A 51 FB EOR (SFB) ,Y
C27C 91 FB STA (SFB) ,Y
C27E 20 95 C2 JSR SC295
C281 A5 FB LDA SFB
C283 CD 3C 03 CMP S033C
C286 F0 03 BEG SC28B
C288 4C 76 C2 JMP SC276
C28B A5 FC LDA SFC
C28D CD 3D 03 CMP S033D
C290 F0 0B BEG SC29D
C292 4C 76 C2 JMP SC276
C295 E6 FB INC SFB
C297 F0 01 BEG! SC29A
C299 60 RTS
C29A E6 FC INC SFC
C29C 60 RTS
C29D 60 RTS
112
26. Organ
The following is a simple interrupt driven organ program. It al-
lows you to playa tune on the keyboard whether a program
is running or not. The program could run with a sound shaping
program, for example.
qwertyuiop@* t
and the space bar to turn the notes off
113
90: cmlF A5 C5 MAIN ... DA 197
1m,,:
10":
C"21
C"23
A2
A"
0m
"m
LDX
LDY
...."m
11": C"25 DD 43 C" LOOP CMP KEYDAT
A,X
12": C"28 F" "A BEG! PLAYNO
TE
13": C"2A E8 INX
130: cm2B C8 INY
13": C"2C C8 INY
14": cm2D Em "F CPX .. 15
15": C"2F D" F4 BNE LOOP
160: C"31 4C 31 EA JMP $EA31
PC SR AC XR YR SP
.197FE 72 ee ee el F6
114
CIlJIlJIlJ 78 SEI
CllJllJl A9 IF LDA .. SlF
CIlJ1lJ3 8D 14 1lJ3 STA SIlJ314
CIlJ1lJ6 A9 CS LDA "SCS
CIlJ1lJ8 8D 15 1lJ3 STA SS315
CIlJSB A9 IlJF LDA ..SIlJF
CIlJSD 8D 18 D4 STA SD418
CIlJ1S A9 21 LDA ...21
CIlJ12 8D S4 D4 STA .D4S4
CllJl!5 A9 38 LDA "S38
CIlJ17 8D S5 D4 STA SD41lJ5
CIlJ1A 8D S6 D4 STA .D4S6
CIlJ1D 58 CLI
CIlJ1E 6S RTS
CIlJ1F A!5 C!5 LDA SC5
CIlJ21 A2 SS LDX ".SS
CIlJ23 AIlJ SS LDY ...SIlJ
CIlJ25 DD 43 CS CMP .CS43,X
CIlJ28 FIlJ SA BEG! .C1lJ34
CIlJ2A E8 INX
CIlJ2B C8 INY
CIlJ2C C8 INY
CIlJ2D EIlJ IlJF CPX ...SF
CIlJ2F DS F4 BNE .CS25
CIlJ31 4C 31 EA JMP SEA31
CIlJ34 B9 51 CS LDA SCS!51,Y
CIlJ37 8D IlJl D4 STA SD4S1
CIlJ3A B9 52 CS LDA SCS!52,Y
CIlJ3D 8D IlJIlJ D4 STA .D4IlJS
CIlJ4S 4C 31 EA JMP SEA31
: CS43 3E S9 SE 11 16 19 lE 21
: CS4B 26 29 2E 31 36 3C 11 25
.:CS53 13 3F 15 9A 16 E3 19 Bl
: CS5B lC D6 2S 5E 22 4B 26 7E
: CS63 2B 34 2D C6 33 61 39 AC
: CS6B SS SIlJ 8S DS F3 AD 85 cm
115
27. Sound
This routine makes sound much easier to use. It allows you to
set the voice, volume, frequency and waveform for the sound.
The voice is between 1 and 3. The volume is between and
15. The frequency is between and 65535. The waveform is
one of 17 (triangle), 33 (sawtooth) and 129 (noise). Pulse wave-
form is not implemented. It can be set but it will not function.
The ADSR and all other features of the SID chip are set auto-
matically.
SOUND ROUTINE
SYNTAX
SYS 16384,VOICE,
VOLUME,FRE~,WAVE
1116: 4000 20 FD AE JSR SAEFD
1216: 4003 20 8A AD JSR SAD8A
116
130: 4006 20 F7 B7 JSR $B7F7
140: 4009 A5 15 LDA $15
150: 400B D0 3F BNE IGIERR
160: 400D A5 14 LDA $14
170: 400F 8D DA 40 STA VOICE
117
52": 4"64 F" E6 BEGI IGiERR
53": 4"66 C9 "4 CMP .. 4
54": 4"68 B" E2 BCS IGiERR
'18: 4085 AD DC
48 VOICEl LDA WAVE
'28: 4088 8D "4 D4 STA 542'6
'38: 488B A9 80 LDA .. 128
'48: 408D 8D 05 D4 STA 542"
'58: 4090 8D 06 D4 STA 542'8
'60: 4093 AD DD 40 LDA FREGI
"8: 4896 8D 80 D4 STA 542'2
'88: 4899 AD DE 48 LDA FREGl+l
'98: 489C 8D 01 D4 STA 542'3
8"": 4"9F 4C D9 4" JMP FINISH
;
82": 4"A2 AD DC 4" VOICE2 LDA WAVE
83": 40A5 8D "B D4 STA 54283
84": 4"A8 A9 80 LDA .. 128
858: 48AA 8D 8C D4 STA 54284
868: 48AD 8D "D D4 STA 54285
8'8: 48B" AD DD 48 LDA FREGl
888: 4"B3 8D 8' D4 STA 542'9
890: 4"B6 AD DE 40 LDA FREGI+l
90": 4"B9 8D "8 D4 STA 5428"
910: 4"BC 4C D9 40 JMP FINISH
118
93.0: 48BF AD DC 40 VOICE3 LDA WAVE
94.0: 40C2 8D 12 D4 STA 5429.0
95.0: 40C~ A9 80 LDA tU28
96.0: 40C7 8D 13 D4 STA 54291
970: 40CA 8D 14 D4 STA 54292
98.0: 48CD AD DD 4.0 LDA FRE6I
990: 48D0 8D 0E D4 STA 54286
1.0.0.0: 40D3 AD DE 4.0 LDA FRE6I+l
1.010: 40D6 8D 0F D4 STA 54287
READY.
B*
PC SR AC XR YR SP
97FE 72 0.0 0.0 01 F6
119
4921 8D DB 49 STA .49DB
4924 29 FD AE JSR .AEFD
4927 29 8A AD JSR .AD8A
492A 29 F7 B7 JSR .B7F7
492D A5 14 LDA .14
492F 8D DD 49 STA .49DD
4932 A5 15 LDA S15
4934 8D DE 49 STA .49DE
4937 29 FD AE JSR .AEFD
493A 29 8A AD JSR .AD8A
493D 29 F7 B7 JSR SB7F7
4949 A5 13 LDA .15
4942 D9 98 BNE .494C
4944 A5 14 LDA .14
4946 8D DC 49 STA "9DC
4949 4C 4F 49 JMP .494F
494C 4C 48 B2 JMP SB248
494F A2 99 LDX ...99
4931 AD DC 49 LDA .49DC
4934 DD DF 49 CMP .49DF,X
4937 F9 98 BEGI .4961
4939 E8 INX
495A E9 94 CPX ...94
495C D9 F6 BNE .4954
493E 4C 4C 49 JMP .494C
4961 AD DA 49 LDA .49DA
4964 F9 E6 BEGI S494C
4966 C9 94 CMP ...94
4968 B9 E2 BCS S494C
496A AD DB 49 LDA S49DB
496D C9 1.0 CMP ... 19
496F B9 DB BCS .494C
4971 AD DB 49 LDA .49DB
4974 8D 18 D4 STA .D418
4977 AD DA 49 LDA .49DA
4.07A C9 91 CMP ...JiH
4.07C F.0 97 BEG! .4985
4.07E C9 92 CMP ...92
498.0 F9 2.0 BEG! .49A2
4982 4C BF 4.0 JMP .49BF
4985 AD DC 49 LDA .49DC
120
4088 8D 04 D4 STA .D404
408B A9 89 LDA ...89
408D 8D 95 D4 STA .D405
4099 8D 96 D4 STA .D406
4093 AD DD 49 LDA .49DD
4096 8D 99 D4 STA .D499
4099 AD DE 40 LDA .49DE
409C 8D 91 D4 STA .D491
409F 4C D9 49 JMP .40D9
40A2 AD DC 49 LDA .40DC
40A5 8D 9B D4 STA .D40B
40A8 A9 89 LDA ...89
40AA 8D 8C D4 STA SD40C
40AD 8D 8D D4 STA .D49D
40B9 AD DD 49 LDA .49DD
40B3 8D 87 D4 STA SD497
40B6 AD DE 48 LDA .48DE
4089 8D 88 D4 STA .D408
40BC 4C D9 48 JMP .48D9
40BF AD DC 48 LDA .48DC
40C2 8D 12 D4 STA SD412
40C5 A9 88 LDA ...80
40C7 8D 13 D4 STA .D413
40CA 8D 14 D4 STA .D414
40CD AD DD 49 LDA .48DD
40D9 8D 8E D4 STA .D48E
40D3 AD DE 48 LDA .40DE
40D6 8D 9F D4 STA .D49F
40D9 68 RTS
.:49DA 80 90 09 99 99 11 21 41
.:49E2 81 99 BE 89 89 98 F8 09
121
28. Envelope
This routine is similair to Sound (above) but it allows you to set
the attack, decay, sustain and release as well.
Attack, decay, sustain and release are all betwen 0 and 15.
; ENVELOPE FUNCTION
;
; SYNTAX
;
;SYS16384,VOICE,VOLUME,
;WAVE,FREQ,A,D,S,R
128: 4fJ8fJ 28 24 41 JSR GETPARAM
138: 4883 A~ 1~ LDA $1~
14fJ: 488~ D8 6D BNE IQERR
1~8: 4887 A~ 14 LDA $14
168: 48fJ9 8D 2E 41 STA VOICE
178: 48fJC 28 24 41 JSR GETPARAM
18fJ: 4fJfJF A5 15 LDA $15
198: 4811 D8 61 BNE IG/ERR
2fJfJ: 4813 A5 14 LDA .14
218: 4fJ15 8D 2F 41 STA VOLUME
22fJ: 4818 2fJ 24 41 JSR GETPARAM
23fJ: 4fJ1B A5 15 LDA $15
24fJ: 4fJ1D DfJ 55 BNE IG/ERR
122
250: 401F A3 14 LDA $14
260: 4021 8D 30 41 STA WAVE
270: 4024 20 24 41 JSR GETPARAM
280: 4027 A3 14 LDA $14
290: 4029 8D 31 41 STA FREQ
300: 402C A5 15 LDA S15
310: 402E 8D 32 41 STA FREQ+1
320: 4031 20 24 41 JSR GETPARAM
330: 4034 A3 15 LDA $13
340: 4036 D0 3C BNE IQERR
350: 4038 A5 14 LDA $14
360: 403A C9 10 CMP tH6
370: 403C B0 36 BCS IQERR
380: 403E 8D 33 41 STA ATTACK
390: 4041 20 24 41 JSR GETPARAM
408: 4044 A3 13 LDA S13
410: 4046 D8 2C BNE IQERR
420: 4048 A3 14 LDA S14
430: 404A C9 10 CMP tH6
448: 404C B0 26 BCS IQERR
430: 404E 8D 34 41 STA DECAY
123
;
671: 4177 AD 2F 41 DO LDA VOLUME
681: 4B7A C9 U, CMP .. 16
691: 407C B0 F6 BCS IG!ERR
711: 407E 8D 18 D4 STA 54296
;CALCULATE ADSR
124
1060: 40BA F0 07 BEGI VOICEl
1070: 40BC C9 02 CMP .. 2
1080: 40BE F0 24 BEGI VOICE2
1090: 40C0 4C 05 41 JMP VOICE3
125
148S: 4123 6S
FINISH RTS
149S: 4124 2S FD AE GETPARAM JSR $AEFD
lSSS: 4127 2S 8A AD JSR $AD8A
lSlS: 412A 2S F7 B7 JSR $B7F7
152S: 412D 6S RTS
153S: 412E SS VOICE .BYT S
154S: 412F SS VOLUME .BYT S
155~: 413S SS WAVE .BYT S
156S: 4131 SS SS FRE61 WORD"
157S: 4133 SS ATTACK .BYT "
158S: 4134 DECAY .BYT
159S: 4135
16S": 4136
"S
SS
SS
SUSTAIN .BYT
RELEASE .BYT
""
161S: 4137
162S: 4138
SS AD
SR
.BYT
.BYT ""
163S: 4139
J4SSS-413D
""11 21 "
41 WAVETABLE.BYT 17,33,65,129
READY.
B*
PC SR AC XR YR SP
.197FE 72 SS "S S1 F6
126
401B A5 15 LDA $15
401D D0 55 BNE $4074
401F A5 14 LDA $14
4021 8D 30 41 STA $4130
4024 20 24 41 .JSR $4124
4027 A5 14 LDA $14
4029 8D 31 41 STA $4131
402C A5 15 LDA $15
402E 8D 32 41 STA $4132
4031 20 24 41 .JSR $4124
4034 A5 15 LDA $15
4036 D0 3C BNE $4074
4038 A5 14 LDA $14
403A C9 10 CMP "$10
403C B0 36 BCS $4074
403E 8D 33 41 STA $4133
4041 20 24 41 .JSR $4124
4044 A5 15 LDA $15
4046 D0 2C BNE $4074
4048 A5 14 LDA $14
404A C9 10 CMP "$10
404C B0 26 BCS $4074
404E 8D 34 41 STA $4134
4051 20 24 41 .JSR $4124
4054 A5 15 LDA $15
4056 D0 1C BNE $4074
4058 A5 14 LDA $14
405A C9 10 CMP "$10
405C B0 16 BCS .4074
405E 8D 35 41 STA $4135
4061 20 24 41 .JSR $4124
4064 A5 15 LDA .15
4066 D0 0C BNE $4074
4068 A5 14 LDA $14
406A C9 10 CMP "$10
406C B0 06 BCS $4074
406E 8D 36 41 STA .4136
4071 4C 77 40 .JMP .4077
4074 4C 48 B2 .JMP SB248
4077 AD 2F 41 LDA $412F
407A C9 10 CMP ... 10
127
4.07C B.0 F6 BCS $4.074
4.07E BD 1B D4 STA $D41B
4.081 AD 34 41 LDA $4134
4.084 4A LSR
4.0B~ 4A LSR
4.086 4A LSR
4.087 4A LSR
4.088 18 CLC
4.089 6D 33 41 ADC $4133
4.08C 8D 37 41 STA $4137
4.08F AD 36 41 LDA $4136
4.092 4A LSR
4.093 4A LSR
4.094 4A LSR
4.09~ 4A LSR
4.096 18 CLC
4.097 6D 35 41 ADC $413~
4.09A 8D 38 41 STA $4138
4.09D A2 .0.0 LDX "$.0.0
4.09F AD 3.0 41 LDA $413.0
4.0A2 DD 39 41 CMP $4139,X
4.0A3 F.0 .08 BEQ $4.0AF
4.0A7 E8 INX
4.0A8 E.0 .04 CPX "$.04
4.0AA D.0 F6 BNE $4.0A2
4.0AC 4C 48 B2 JMP $B248
4.0AF AD 2E 41 LDA $412E
4.0B2 F.0 F8 BEQ $4.0AC
4.0B4 C9 .04 CMP ....04
4.0B6 B.0 F4 BCS .4.0AC
4.0B8 C9 .01 CMP "$.01
4.0BA F.0 .07 BEQ .4.0C3
4.0BC C9 .02 CMP "$.02
4.0BE F.0 24 BEQ $4.0E4
4.0C.0 4C .0~ 41 JMP $41.05
4.0C3 AD 3.0 41 LDA $413.0
4.0C6 8D .04 D4 STA $D4.04
4.0C9 AD 37 41 LDA $4137
4.0CC 8D .05 D4 STA $D4.05
4.0CF AD 38 41 LDA $4138
4.0D2 8D .06 D4 STA $D4.06
128
4"D5 AD 31 41 LDA $4131
4"D8 8D D4 STA $D4.0"
4"DB
4.0DE
AD
8D
""
32 41 LDA $4132
"1 D4 STA $D4.01
4"E1 4C 23 41 JMP $4123
4"E4 AD 3" 41 LDA S413"
4"E7 8D "B D4 STA SD4"B
4"EA AD 37 41 LDA S4137
4"ED 8D "C D4 STA $D4"C
4"F" AD 38 41 LDA $4138
4.0F3 8D "D D4 STA $D4.0D
4.0F6 AD 31 41 LDA $4131
4"F9 8D "7 D4 STA $D4.07
4.0FC AD 32 41 LDA $4132
4"FF 8D "8 D4 STA $D4"8
41"2 4C 23 41 JMP S4123
41"5 AD 3" 41 LDA $413"
41"8 8D 12 D4 STA $D412
41"B AD 37 41 LDA $4137
41"E 8D 13 D4 STA $D413
4111 AD 38 41 LDA $4138
4114 8D 14 D4 STA $D414
4117 AD 31 41 LDA $4131
411A 8D "E D4 STA $D4.0E
411D AD 32 41 LDA $4132
412" 8D "F D4 STA $D4"F
4123 60 RTS
4124 2" FD AE JSR $AEFD
4127 2" SA AD JSR $AD8A
412A 2" F7 B7 JSR $B7F7
412D 6" RTS
129
29. DIR
This routine allows you to read the disk directory (of either or
both drives on a dual drive (not two 1541s)). It does not disturb
the program in memory.
130
259: 4997 C9 93 CMP tt3
269: 4999 B9 F2 BCS IGiERR
279: 499B C9 99 CMP tt9
279: 499D F9 9F BEGI ZERO
289: 499F C9 91 CMP ttl
299: 4911 D9 16 BNE BOTH
399: 4913 A9 31 LDA tt"l"
319: 4915 85 FC STA .FC
329: 4917 A9 92 LDA tt2
339: 4919 85 FD STA FNLEN
349: 491B 4C 2D 48 JMP DIR
131
6~": 4"58 D" 3D BNE DLIST4
66": 4"5A A" "6 LDY #6
67": 485C 84
FB DLISTl STY TEMP
68": 485E A5 FF
2" JSR IECINP
69": 4861 A6
FC LDX TEMP+l
7"": 8~ FC
4"63 STA TEMP+l
71": 486~ A4 9" LDY ST
72": 4"67 D" 2E BNE DLIST4
73": 4"69 A4 FB LDY TEMP
74": 4"6B 88 DEY
7~": 4"6C D" EE BNE DLISTl
768: 486E A4 FC LDY TEMP+l
77": 487" 2" CD BD JSR LINENO
788: 4873 A9 2" LDA #.2"
79": 487~ 2" D2 FF JSR PRINT
8"": 4878 2" A3 FF DLIST3 JSR IECINP
81": 487B A6 9" LDX ST
828: 487D D" 18 BNE DLIST4
83": 487F AA TAX
84": 4"8" F" "6 BE61 DLIST2
8~": 4882 2" D2 FF JSR PRINT
86": 4883 4C 78 4" JMP DLIST3
87": 4"88 A9 "D DLIST2 LDA #CR
88": 4"8A 2" D2 FF JSR PRINT
89": 4"8D A3 C3 LDA .C~
READY.
132
B*
PC SR AC XR YR SP
; 9'FE '2 fIIfII fIIfII fill F6
133
404E 20 B4 FF JSR $FFB4
4051 A5 B9 LDA $B9
4053 20 96 FF JSR $FF96
4056 A4 90 LDY $90
4058 D0 3D ENE $4097
405A A0 06 LDY "$06
4/15C 84 FB STY .FB
4/15E 2/1 A5 FF JSR .FFA5
4/161 A6 FC LDX .FC
4063 85 FC STA .FC
4/165 A4 90 LDY .9/1
4067 D/I 2E ENE .4097
4069 A4 FB LDY .FB
406B 88 DEY
4/16C D0 EE ENE .405C
406E A4 FC LDY .FC
4070 20 CD BD JSR .BDCD
4073 A9 2/1 LDA ...2/1
4075 2/1 D2 FF JSR $FFD2
4/178 20 A5 FF JSR .FFA5
4/17B A6 90 LDX $90
407D D0 18 BNE $4097
407F AA TAX
4/180 F0 06 BEG! .4088
4/182 20 D2 FF JSR .FFD2
4/185 4C 78 4/1 JMP $4078
4/188 A9 0D LDA "$0D
408A 20 D2 FF JSR .FFD2
4/18D A5 C5 LDA .C5
4/18F C9 3F CMP ...3F
4/191 F/I 04 BEG! .4097
4093 A0 04 LDY ...04
4095 D0 C5 BNE .405C
4097 20 42 F6 JSR .F642
409A 60 RTS
134
30. MSAVE
The following routine allows you save any specified area of
memory. You specify the filename, the device, the secondary
address, the start address and the finishing address + 1.
135
230: 4028 A9 FB LDA ..SFB
240: 402A 4C ~F E1 JMP SE1~F
] 4000-482D
READY.
B*
PC SR AC XR YR SP
.19'FE '2 fIfI fIfI fll F6
136
31. MLOAD/MVERIFY
The following routine allows you to load or verify to or from a
specified area of memory. The load enables you to load into any
area of memory, whether it was saved from that area or not.
The verify allows you to verify a specific area of memory.
SYS 16384,"name",device,1,start
READY.
137
B*
PC SR AC XR YR SP
.197FE 72 00 00 01 F6
138
32. Disk
This routine allows you to send a command to the command
channel of the disk drive, e.g. initialise or format.
OPEN15,8,15,"COMMAND"
SYS 16384,"command"
139
220: 4015 60 RTS
I
240: 4016 A9 a0 GETFPAR LDA .. 0
250: 4018 20 BD FF JSR SETFNA
260: 401B A9 0F LDA fUS
270: 401D A8 TAY
280: 401E A2 a8 LDX .. 8
290: 4020 20 BA FF JSR SETFPA
300: 4023 20 a6 E2 JSR NEXTGI
310: 4026 20 S7 E2 JSR GETNAME
320: 4029 60 RTS
330: 402A 4C F9 E0 ERROR JMP GIVERR
l4000-402D
READY.
B*
PC SR AC XR YR SP
; 97FE 72 00 00 01 F6
140
33. DERROR
This routine allows you to read the disk error channel in direct
mode or during a program.
10 OPEN15,8,15
20 INPUT # 15,A$,B$,C$,O$,E$
30 PRINT A$;B$;C$;O$;E$
40 CLOSE15
141
2UJ: 4BBD 85 B9 STA SECADR
22B: 4BBF 2B 96 FF JSR SEND SEC
23B: 4B12 A4 9B LOOP LDY ST
24B: 4B14 DB BA BNE DERR4
25B: 4B16 2B A5 FF JSR IECINP
26B: 4B19 2B D2 FF JSR PRINT
27B: 4B1C C9 BD CMP 113
28B: 4B1E DB F2 BNE LOOP
29B: 4B2B 2B AB FF DERR4 JSR UNTALK
3BB: 4B23 6B RTS
]4BBB-4024
READY.
B*
PC SR AC XR YR SP
; 97FE 72 BB BB B1 F6
142
34. Scroll message
This routine allows a message to be scrolled across the screen
independently of anything else. This could be useful during the
introduction to a game, for example.
143
100: 400D 8D 96 40 STA TEMPF
B
110: 4010 A5 15 LDA S15
120: 4012 85 FC STA SFC
120: 4014 8D 97 40 STA TEMPF
C
144
37~: 4045 A2 00 LDX #0
380: 4047 BD 99 07 LOOP LDA 1945,
X
390: 404A 9D 98 07 STA 1944,
X
400: 404D BD 99 DB LDA 1945+
54272,X
410: 4050 9D 98 DB STA 1944+
54272,X
420: 4053 E8 INX
430: 4054 E0 27 CPX #39
440: 4056 D0 EF BNE LOOP
145
630: 4080 A0 00 CHECK LDY H0
640: 4082 B1 FB LDA (SFB)
,Y
650: 4084 C9 FF CMP HSFF
660: 4086 F0 01 BEG! RESET
B*
PC SR AC XR YR SP
; 97FE 72 .0.0 .0.0 40 F6
146
4014 8D 97 40 STA $4097
4017 20 FD AE JSR $AEFD
401A 20 9E B7 JSR $B79E
401D 8A TXA
401E 8D 95 40 STA $4095
4021 8D 94 40 STA $4094
4024 20 FD AE JSR $AEFD
4027 20 9E B7 JSR $B79E
402A 8E 98 40 STX $4098
402D 78 SEI
422E A9 3A LDA "$3A
4032 8D 14 23 STA $2314
4233 A9 42 LDA "$40
4035 8D 15 23 STA 52315
4238 58 CLI
4039 62 RTS
423A CE 94 40 DEC $4094
403D D2 38 BNE 54277
423F AD 95 40 LDA $4295
4042 8D 94 40 STA 54294
4045 A2 22 LDX "$00
4247 BD 99 27 LDA $2799, X
404A 9D 98 27 STA $2798, X
424D BD 99 DB LDA 5DB99,X
4252 9D 98 DB STA $DB98,X
4053 E8 INX
4254 E2 27 CPX "$27
4256 D2 EF BNE $4047
4258 A2 22 LDY "$20
425A B1 FB LDA ($FB),Y
425C C9 3F CMP "$3F
405E B2 23 BCS 54263
4262 4C 66 40 JMP $4066
4063 38 SEC
4264 E9 40 SBC "$40
4266 8D BF 27 STA $27BF
4269 22 7A 40 JSR $427A
426C A5 FC LDA $FC
426E 18 CLC
406F 69 D4 ADC "$D4
4271 AD 98 40 LDA $4098
147
4S74 SD BF DB STA $DBBF
4S77 4C 31 EA JMP $EA31
4S7A E6 FB INC $FB
4S7C DS S2 BNE $4SSS
4S7E E6 FC INC $FC
4SSS AS SS LDY "$SS
4SS2 B1 FB LDA (SFB),Y
4SS4 C9 FF CMP ... FF
4SS6 FS S1 BEGl $4SS9
4SSS 6S RTS
4SS9 AD 96 4S LDA $4S96
4SSC S5 FB STA $FB
4SSE AD 97 4S LDA $4S97
4S91 S5 FC STA $FC
4S93 6S RTS
148
35. Flash screen
This routine allows you to flash the screen colour from one colour
to another at a specified rate.
SYS 16384,colour1,colour2,rate
where colour1 is the first colour, colour2 is the second and rate
is the number of 60ths of a second between flashes, e.g. 10
is 1/6 second. Setting the rate to 0 switches off the flash.
149
149: 4929 F9 93 BEG! MOREl
159: 4922 4C 48 B2 JMP $B248
169: 4925 A5 14 MOREl LDA $14
179: 4927 8D 8F 49 STA TEMP+l
189: 492A 29 FD AE JSR $AEFD
199: 492D 29 8A AD JSR $AD8A
299: 4939 29 F7 B7 JSR $B7F7
219: 4933 A5 15 LDA $15
229: 4935 F9 93 BEG! MORE2
239: 4937 4C 48 B2 JMP $B248
249: 493A A5 14 MORE2 LDA $14
249: 493C F9 43 BEG! RESET
259: 493E 8D 99 49 STA TEMP+2
259: 4941 78 SEI
269: 4942 A9 54 LDA I<MAIN
279: 4944 8D 14 93 STA 788
289: 4947 A9 49 ) LDA I>MAIN
299: 4949 8D 15 93 STA 789
399: 494C 58 CLI
319: 494D AD 99 49 LDA TEMP+2
319: 4959 8D 91 49 STA TEMP+3
329: 4953 69 RTS
339: 4954 MAIN = *TEMP+3
349: 4954 CE 91 49 DEC
359: 4957 D9 25 BNE FINISH
369: 4959 AD 21 DI LDA 53281
369: 495C 29 9F AND 115
379: 495E CD 8F 49 CMP TEMP+l
389: 4961 F9 9F BEG! D09
399: 4963 AD 8F 49 LDA TEMP+l
499: 4966 8D 21 D9 STA 53281
499: 4969 AD 9S 4" LDA TEMP+2
499: 4S6C 8D 91 4" STA TEMP+3
419: 496F 4C 7E 49 JMP FINISH
429: 4S72 AD 8E 49 D09 LDA TEMP
439: 4975 8D 21 D9 STA 53281
449: 4978 AD 9S 49 LDA TEMP+2
449: 497B 8D 91 4" STA TEMP+3
459: 4"7E 4C 31 EA FINISH JMP $EA31
46": 4"81 78 RESET SEI
47": 4"82 A9 31 LDA 149
150
48B: 4B84 8D 14 B3 STA 788
49B: 4B87 A9 EA LDA .. 234
5BB: 4B89 8D 15 B3 STA 789
51B: 4B8C 58 CLI
52B: 4B8D 6B RTS
53B: 4"8E TEMP = *
14"BB-4B8E
READY.
B*
PC SR AC XR YR SP
; 97FE 72 BB BB 4B F6
151
4"3A A5 14 lDA 514
4"3C F" 43 BEG! 54"81
4"3E 8D 9" 4" STA 54"9"
4"41 78 SEI
4"42 A9 54 lDA ..554
4"44 8D 14 "3 STA 5"314
4"47 A9 4" lDA "54"
4"49 8D 15 "3 STA 5"315
4"4C 58 ClI
4"4D AD 9" 4" lDA 54"9"
4"5" 8D 91 4" STA 54"91
4"53 6" RTS
4"54 CE 91 4" DEC 54"91
4"57 D" 25 BNE S4"7E
4"59 AD 21 D" lDA SD"21
4"5C 29 "F AND "$"F
4"5E CD 8F 4" CMP S4"8F
4"61 F" "F BEG! $4"72
4"63 AD 8F 4" lDA $4"8F
4"66 8D 21 D" STA SD"21
4"69 AD 9" 4" lDA $4"9"
4"6C 8D 91 4" STA $4"91
4"6F 4C 7E 4" JMP S4"7E
4"72 AD 8E 4" lDA $4"8E
4"75 8D 21 D" STA $D"21
4"78 AD 9" 4" LDA S4"9"
4"7B 8D 91 4" STA $4"91
4"7E 4C 31 EA JMP $EA31
4"81 78 SEI
4"82 A9 31 LDA .. 531
4"84 8D 14 "3 STA 5"314
4"87 A9 EA LDA ..SEA
4"89 8D 15 "3 STA $"315
4"8C 58 ClI
4"8D 6" RTS
152
36. Flash border
This routine does the same as the flash screen routine except
that the border is flashed.
SYS16384,colour1,colour2,rate
153
160: 4025 A5 14 MOREl LDA S14
170: 4027 8D 8F 40 STA TEMP+l
180: 402A 20 FD AE JSR SAEFD
190: 402D 20 8A AD JSR SAD8A
200: 4030 20 F7 B7 JSR SB7F7
210: 4033 A5 15 LDA S15
220: 4035 F0 03 BEG! MORE2
230: 4037 4C 48 B2 JMP SB248
240: 403A A5 14 MORE2 LDA S14
240: 403C F0 43 BEG! RESET
250: 403E 8D 90 40 STA TEMP+2
250: 4041 78 SEI
260: 4042 A9 54 LDA .. <MAIN
270: 4044 8D 14 03 STA 788
280: 4047 A9 40 LDA .. >MAIN
290: 4049 8D 15 03 STA 789
300: 404C 58 CLI
310=- 404D AD 90 40 LDA TEMP+2
310: 4050 8D 91 40 STA TEMP+3
320: 4053 60 RTS
330: 4054 MAIN = *TEMP+3
340: 4054 CE 91 40 DEC
350: 4057 D0 25 BNE FINISH
360: 4059 AD 20 D0 LDA 53280
360: 405C 29 0F AND .. 15
370: 405E CD 8F 40 CMP TEMP+l
380: 4061 F0 0F BEG! D00
390: 4063 AD 8F 40 LDA TEMP+1
400: 4066 8D 20 D0 STA 53280
400: 4069 AD 90 40 LDA TEMP+2
400: 406C 8D 91 40 STA TEMP+3
410: 406F 4C 7E 40 JMP FINISH
420: 4072 AD 8E 40 D00 LDA TEMP
430: 4075 8D 20 D0 STA 53280
440: 4078 AD 90 40 LDA TEMP+2
440: 407B 8D 91 40 STA TEMP+3
450: 407E 4C 31 EA FINISH JMP SEA31
460: 4081 78 RESET SEI
470: 4082 A9 31 LDA .. 49
480: 4084 8D 14 03 STA 788
490: 4087 A9 EA LDA .. 234
154
588: 4889 8D 15 83 STA 789
518: 488C 58 CLI
528: 488D 68 RTS
538: 488E TEMP = *
l4888-488E
READY.
B*
PC SR AC XR YR SP
; 97FE 72 88 88 4.9 F6
155
4041 78 SEI
4042 A9 54 LDA "$54
4044 8D 14 03 STA $0314
4047 A9 40 LDA "$40
4049 8D 15 03 STA $0315
404C 58 CLI
404D AD 90 40 LDA $4090
4050 8D 91 40 STA $4091
4053 60 RTS
4054 CE 91 40 DEC $4091
4057 D0 25 BNE $407E
4059 AD 20 D0 LDA $D020
405C 29 0F AND "$0F
405E CD 8F 40 CMP $408F
4061 F0 0F BEG! $4072
4063 AD 8F 40 LDA $408F
4066 8D 20 D0 STA $D020
4069 AD 90 40 LDA $4090
406C 8D 91 40 STA $4091
406F 4C 7E 40 JMP $407E
4072 AD 8E 40 LDA $408E
4075 8D 20 D0 STA $D020
4078 AD 90 40 LDA $4090
407B 8D 91 40 STA $4091
407E 4C 31 EA JMP $EA31
4081 78 SEI
4082 A9 31 LDA "$31
4084 8D 14 03 STA $0314
4087 A9 EA LDA "$EA
4089 8D 15 03 STA $0315
408C 58 ell
408D 60 RTS
156
37. Flash characters
This routine flashes (or reverses) all the characters on the screen
at a specified rate.
SYS 16384,rate
;SYNTAX FLASH 1 OR
;0
157
150: 4016 8D 14 03 STA 788
160: 4019 A9 40 LDA H>MAI
N
170: 401B 8D 15 03 STA 789
180: 401E 58 CLI
190: 401F 60 RTS
200: 4020 78 RESET SEI
220: 4021 A9 31 LDA H49
230: 4023 8D 14 03 STA 788
240: 4026 A9 EA LDA H234
250: 4028 8D 15 03 STA 789
260: 402B 58 CLI
270: 4.02C 60 RTS
290: 4.02D CE 68 40 MAIN DEC TEMP+
1
300: 4030 F0 03 BEG! MORE
3'10: 4032 4C 31 EA JMP $EA31
; INVERT CHARACTERS
158
255+255, X
490: 4052 18 CLC
500: 4053 69 80 ADC #128
510: 4055 9D FE 05 STA 1024+
255+255, X
READY.
B*
PC SR AC XR YR SP
.197FE 72 1616 f6flJ 416 F6
159
401F 616 RTS
40216 78 SEI
4021 A9 31 LDA "$31
4823 8D 14 163 STA $16314
4826 A9 EA LDA "$EA
4828 8D H5 163 STA $16313
402B 38 CLI
402C 616 RTS
402D CE 68 416 DEC S4f668
48316 Ff6 163 BEQ S4f635
4032 4C 31 EA JMP SEA31
4.033 AD 67 416 LDA S4f667
4838 8D 68 416 STA 541668
483B A2 1616 LDX ...1616
483D BD 1616 164 LDA Sf64f6f6,X
48416 18 CLC
4.041 69 816 ADC "$816
4843 9D 1616 164 STA Sf64f6f6,X
4.046 BD FF 164 LDA $f64FF,X
4.049 18 CLC
4.04A 69 816 ADC ...816
484C 9D FF 164 STA Sf64FF,X
4.04F BD FE 163 LDA Sf63FE,X
4.052 18 CLC
4.053 69 816 ADC ..S8f6
4.035 9D FE 163 STA 5f63FE,X
4.038 BD FD 166 LDA .f66FD, X
4.03B 18 CLC
4.03C 69 816 ADC ...816
4.03E 9D FD 166 STA Sf66FD, X
4.061 E8 INX
4.062 Df6 D9 BNE 54f63D
4.064 4C 31 EA JMP .EA31
4867 216 Df6 AD JSR SADDf6
160
38. Flash colour
This routine flashes the colour of the characters between two
specified colours at a specified rate.
SYS 16384,colourl,colour2,rate
; SYNTAX
SYSFLASH,COLOURI
,COLOUR2,NO OF
CHANGES A SECOND
161
15": 4"18 2" 8A AD JSR $AD8A
162
370: 4054 MAIN = *TEMP+
380: 4054 CE A8 40 DEC
3
390: 4057 D0 29 BNE FINIS
H
400: 4059 AD A4 40 LDA STORE
163
+255+255,X
63.0: 4.09.0 9D FO OA STA 55296
+255+255+255,X
64.0: 4.093 E8 INX
65.0: 4.094 0.0 F1 BNE LOOP
66.0: 4.096 6.0 RTS
B*
PC SR AC XR YR SP
,97FE 72 flJta flJta 4ta F6
164
4022 4C 48 B2 JMP .B248
4025 A5 14 LDA 514
4027 8D A6 40 STA .40A6
402A 20 FD AE JSR 5AEFD
402D 20 8A AD JSR 5AD8A
4030 20 F7 B7 JSR 5B7F7
4033 A5 15 LDA .15
4035 F0 03 BEG! .403A
4037 4C 48 B2 JMP .B248
403A A5 14 LDA 514
403C F0 59 BEG! .4097
403E 8D A7 40 STA .40A7
4041 78 SEI
4042 A9 54 LDA ...54
4044 8D 14 03 STA 50314
4047 A9 4" LDA ... 40
4049 8D 15 03 STA .0315
404C 58 CLI
404D AD A7 40 LDA '4"A7
4050 8D A8 40 STA '4"A8
4053 6" RTS
4054 CE A8 40 DEC '4"A8
4057 D" 29 BNE '4"82
4059 AD A4 4" LDA '4"A4
405C CD A6 4" CMP '4"A6
405F F0 12 BEQ .4073
4061 AD A6 4" LDA .40A6
4064 8D A4 4" STA '4"A4
4067 20 85 40 JSR .4085
406A AD A7 40 LDA '4"A7
406D 8D A8 40 STA .40A8
4"70 4C 82 4" JMP '4"82
4073 AD A5 40 LDA .40A5
4076 8D A4 40 STA .40A4
4079 20 85 40 JSR '4"85
4"7C AD A7 4" LDA .40A7
407F 8D A8 40 STA .40A8
4"82
4085
4"87
4C
A2
9D
31
0"
D8
EA JMP
LDX
STA
...,,"
5EA31
4"8A ""
9D FF DB STA
5D8"",X
5D8FF,X
165
4B8D 9D FE D9 STA $D9FE,X
4999 9D FD DA STA $DAFD,X
4B93 E8 INX
4994 DB F1 BNE $4B87
4B96 69 RTS
4B97 78 SEI
4998 A9 31 LDA ... 31
4B9A 8D 14 "3 STA .9314
499D A9 EA LDA ...EA
499F 8D 15 "3 STA .B315
49A2 58 eLI
49A3 6" RTS
49A4 "B BRI<
166
39. Print at
This routine allows you to print at any position on the screen
without using lots of cursor controls.
SYS960,X, Y, "text"
IPRINT AT ROUTINE
6.0: 93C,0 2.0 FD AE JSR SAEFD
7.0: ,03C3 2.0 9E B7 JSR SB79E
8.0: 93C6 8A TXA
9.0: 93C7 48 PHA
1.0.0: 93C8 2.0 FD AE JSR SAEFD
11.0: 93CB 2.0 9E B7 JSR SB79E
12.0: 93CE 8A TXA
13.0: ,03CF A8 TAY
14.0: 93D,0 68 PLA
H5,0: 93Dl AA TAX
16.0: 93D2 18 CLC
17.0: 93D3 2.0 F,0 FF JSR SFFF,0
18.0: 93D6 2.0 FD AE JSR SAEFD
19.0: .03D9 4C A,0 AA JMP SAAA,0
167
200: S3DC 00 BRK
l03C0-03DD
READY.
B*
PC SR AC XR YR SP
; 97FE 72 00 00 40 F6
168
40. Split screen
This routine sets up a raster scan that allows the text and high
res screen to coexist at the same time. You can specify where
the cut is to take place and whether text or high res is at the top.
where line is the line down the screen (the same as the Y
coordinates for plot) and option is 1 for the text to be at the
top and 0 for the text to be at the bottom. If line has the value
o then the raster is switched off. The line number must be in
the range 50 to 249.
;SYS16384,CHANGE,1=
;TEXT/0=HIRES
110: 4000 20 FD AE JSR .AEFD
120: 4003 20 8A AD JSR .AD8A
130: 4006 20 F7 B7 JSR .B7F7
169
190: 4014 C9 31 MaR CMP tt49
200: 4016 90 20 BCC IGiERR
210: 4018 C9 FA CMP tt250
220: 401A B0 lC BCS IGiERR
230: 401C 8D FE 40 STA TEMP
171
86": 40D2 1" "4 BPL LOOP9
8''': 4"D4 A9 "1 LDA #S"l
88": 4"D6 85 FB STA SFB
89": 4"D8 A6 FB LOOP9 LDX SFB
9"": 4"DA BD F8 4" LDA RASTER, X
91": 4"DD 8D 12 D" STA SD"12
92": 4"E" BD FA 40 LDA TEXT,X
93": 4"E3 8D 18 D" STA 532'2
94": 4"E6 BD Fe 40 LDA HIRES,X
95": 4"E9 8D 11 D" STA SD"ll
96": 40EC 8A TXA
9''': 4"ED F" "6 BEG! LOOPl
98": 4"EF 68 LOOP PLA
990: 4"F" A8 TAY
10"0: 4"Fl 68 PLA
1010: 4"F2 AA TAX
1020: 4"F3 68 PLA
103": 40F4 4" RTI
1040: 40FS 4C 31 EA LOOPl JMP SEA31
1"4": 4"F8 FIN = *
10S0: 40F8 96 "0 RASTER .BYT 150,0
1060: 4"FA "8 15 TEXT .BYT 8,21
10'0: 40FC 3B IB HIRES .BYT 59,2'
1"8": 40FE 00 TEMP WORD"
]4000-41"0 ""
READY.
172
4016 90 20 BCC S4038
4018 C9 FA CMP ttSFA
401A B0 1C BCS S4038
401C 8D FE 40 STA S40FE
401F 20 FD AE JSR SAEFD
4022 20 8A AD JSR SAD8A
4025 20 F7 B7 JSR SB7F7
4028 A5 15 LDA S15
402A D0 0C BNE S4038
402C AS 14 LDA S14
402E C9 02 CMP tt.02
4030 B0 06 BCS S4038
4032 8D FF 40 STA S40FF
4035 4C 3B 40 JMP S403B
4038 4C 48 B2 JMP SB248
403B AD FE 40 LDA S40FE
403E 8D F8 40 STA .40F8
4041 AD FF 40 LDA S40FF
4044 C9 01 CMP ttS01
4046 F0 17 BEQ S405F
4048 A9 08 LDA ttS08
404A A2 15 LDX ttS15
404C 8D FA 40 STA S40FA
404F 8E FB 40 STX 540FB
4052 A9 3B LDA ttS3B
40S4 A2 1B LDX ttS1B
40S6 8D FC 40 STA S40FC
4059 8E FD 40 STX S40FD
40SC 4C 73 40 JMP S4073
40SF A9 15 LDA tt.15
4061 A2 08 LDX ttS08
4063 8D FA 40 STA S40FA
4066 8E FB 40 STX S40FB
4069 A9 1B LDA ttS1B
406B A2 3B LDX ttS3B
406D 8D FC 40 STA S40FC
4070 8E FD 40 STX S40FD
4073 78 SEI
4074 A9 7F LDA ttS7F
4076 8D 0D DC STA SDC0D
4079 A9 01 LDA ttS01
173
487B 8D lA D8 STA SD81A
487E A9 02 LDA ..S82
4888 85 FB STA SFB
4882 AD F8 40 LDA S48F8
4885 8D 12 D8 STA SD812
4888 A9 18 LDA ... 18
408A 8D 11 De STA SD811
488D AD 14 83 LDA S8314
4898 8D F6 48 STA S48F6
4893 AD 15 83 LDA .8315
4896 8D F7 48 STA S48F7
4899 A9 C6 LDA .. SC6
489B 8D 14 83 STA S8314
489E A9 48 LDA ..S48
48A8 8D 15 fa3 STA S8315
48A3 58 CLI
48A4 68 RTS
48A5 78 SEI
48A6 A9 31 LDA ..S31
48A8 8D 14 0:S STA .8314
48AB A9 EA LDA 4ISEA
48AD 8D 15 83 STA .8315
48B8 A9 15 LDA 4IS15
48B2 8D 18 D8 STA .D818
48B5 A9 lB LDA ..SlB
48B7 8D 11 D0 STA SD811
48BA A9 88 LDA ..S88
48BC 8D lA D8 STA SD81A
48BF A9 88 LDA ... 88
48Cl 8D 0D DC STA SDC8D
48C4 58 CLI
48C5 68 RTS
48C6 AD 19 D8 LDA SD819
48C9 8D 19 D0 STA .D819
48CC 29 81 AND 4IS81
48CE F8 lF BEG! S48EF
48D8 C6 FB DEC SFB
48D2 18 84 BPL S48D8
4.3D4 A9 81 LDA ..S81
48D6 85 FB STA SFB
48D8 A6 FB LDX SFB
174
4eDA BD F8 4e LDA S4eF8,X
4eDD 8D 12 De STA SDe12
4eEe BD FA 4e LDA S4eFA,X
4eE;,j; SD 18 De STA SDelS
4eE6 BD FC 4e LDA S4eFC,X
4eE9 SD 11 De STA SDell
4eEC SA TXA
4eED Fe e6 BEG! S4eF5
4eEF 6S PLA
4eFe AS TAY
4eFl 6S PLA
4eF2 AA TAX
4eF3 6S PLA
4eF4 40 RTI
40F5 4C 31 EA JMP SEA31
: 4eFS 96 ee es 15 3B IB ee ee
175
40 BEST
MACHINE CODE
ROUTINES
FOR THE 64
All the machine code programs in this
book, including Supermon, are
available on one cassette at 7.95,
direct from Duckworth. Send a
cheque/postal order (or order by
phone with your Access or
Barclaycard number) and the cassette
will be sent post-free.