Sei sulla pagina 1di 175

-

. 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

1984 by Mark Greenshields

All rights reserved. No part of this publication


may be reproduced, stored in a. retrieval system,
or transmitted, in any form or by any means,
electronic, mechanical, photocopying, recording
or otherwise, without the prior permission of the
publisher.

ISBN 0 7156 1899 7

British Library Cataloguing in Publication Data


Greenshields, Mark
Forty best machine codes for the 64
1. Commodore 64 (Computer) 2.Machine
codes (Electronic codes)
I. Title
001.64'25 QA76.8.C64
ISBN 0-7156-1899-7

Typeset by The Electronic Village, Richmond


from text stored on a Commodore 64
Printed in Great Britain by
Redwood Burn Ltd., Trowbridge
and bound by Pegasus Bookbinding, Melksham
Contents
Preface 9

Supermon: an assembler/disassembler written in


machine code by Jim Butterfield for the 64. 11

ROM Routines 26

1. Fill: fills an area of memory with a byte. 27

2. Move: allows you to move an area of memory to


another location. 30

3. Pause: allows you to pause a listing at any time by


just pressing a shift key. 34

4. Function keys: This program allows you to program


the function keys. 36

5. IRQ clock: displays a clock in 24 hour format at the


top of the screen whether a program is running or not. 42

6. Pixel scroll left: scrolls the screen one pixel to the left. 48

7. Pixel scroll right: scrolls the screen one pixel to the


right. 51

8. Pixel scroll up: scrolls the contents of the screen one


pixel up. 56

9. Pixel scroll down: scrolls the screen one pixel down. 59

10. Colour: sets the screen, border, text, multicolours


1,2 and 3 in one command without PEEKs and POKEs. 62

11. Copy: allows you to copy any part or all of the

5
character ROM down to any location in RAM. 64

12. Sprite/ char detect: tells you what character a sprite


is passing over or under, not just if it is touching. 68

13. Ooke: allows you to POKE a 16 bit number into


memory easily. 75

14. Oeek: complements Ooke, and allows you to read


the 16 bit number contained in two consecutive
locations. 77

15. 3-channel IRQ tune: plays a tune using all three


channels. It does not tie up the computer, so you could
type in another program while listening to this one. 79

16. List alter: allows you to list programs to the screen


or printer in any column width. 84

17. Old: allows you to recover a program accidentally


newed. It can be loaded after you have newed the
program and still work. 86

18. Graph: turns the high res screen on. 88

19. NRM: turns the high-res screen off and returns to


the text screen. 90

20. CLG: clears the high-res screen and colours it as


specified. 91

21. Plot: plots a point on the high res screen. 94

22. Unplot: extends the above to allow a point to be


removed from the high-res screen. 100

23. CHAR: puts a text or UOG character onto the high-


res screen. 101

24. Change bank: changes the Video bank in one simple


command. The Copy command above can be used to

6
move the character set to the new bank. 108

25. Invert: allows you to invert all or part of the high-res


screen. 110

26. Organ: this routine is interrupt driven and allows you


to play music even while programming or running
another program. 113

27. Sound: makes sound much easier on the 64. It uses


preset ADSR's etc. You only need to specify the voice,
the volume, the frequency and the waveform. 116

28. Envelope: does the same as the sound function


except that you can specify the envelope of your choice. 122

29. DIR: reads and displays the disk directory of one or


both drives without disturbing the program in memory. 130

30. MSAVE: allows you to save any area of memory onto


disk or cassette. 135

31. MLOAD/MVERIFY: allows you to load to any part


of memory from disk or cassette. 137

32. DISK: allows you to send a command to the disk


drive, e.g. format a disk. 139

33. DERROR: allows you to read the disk error channel


within a program or directly. 141

34. Scroll message: allows a message to be scrolled


along the second bottom line of the screen even if a
program is running. 143

35. Flash screen: allows you to flash the screen colour.


You set colour 1, colour 2 and the number of times a
second for the flash. 149

36. Flash border: as above but for the border. 153

7
37. Flash characters: allows you to flash the characters
on the screen. 157

38. Flash colour: allows you to flash the colour of the


characters on the screen. You specify colour 1, colour
2 and the number of changes per second. 161

39. Print at: allows you to print text anywhere on the


screen without all those weird symbols. 167

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.

The book includes a listing of Supermon which is a public domain


assembler / disassembler written by Jim Butterfield (thanks Jim).
It can be used to enter the programs in this book if you do not
possess an assembler. The listings are all given twice: once in
an assembled listing from the PAL assembler from Proline
Software (this, along with POWER, is the best machine code
development package that I have seen), and once in a
disassembled version suitable for entering with Supermon or
similar.

I hope that you find the book useful and that the routines help
to improve your programs.

Acknowledgments

I would like to thank my parents Jack and Sheila Greenshields,


my sister Louise, Graeme Douglas, William Drummond, Mark
Kelly and all my relations for their encouragement.

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.

Supermon is listed as a hex dump, which is a listing of


hexadecimal numbers. This makes it easy to enter into a Basic
loader program.

To enter Supermon, type in the following commands in direct


mode (where < return> means press the return key), and then
type in the Basic loader and save it.

POKE 43,1 < return >


POKE 44,32 < return >
POKE8192,0 < return >
NEW < return >

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:

SAVE TO TAPE OR DISK?

Press T if you are using cassette and have a blank cassette in


the recorder. Press D if you are using disk and make sure that
a formatted disk with at least 11 blocks free is in the drive.

If you pressed T you will be prompted with PRESS PLAY ON


TAPE and if you pressed D the drive will start whirring. The
program is now being saved to tape or disk. If an error occurs
then typing RUN100 will allow you to save the program again.
It can be loaded in the normal way.

LOAD"SUPERMON",1 OR LOAD"SUPERMON",8

Then run the program. Some writing will appear on the screen
and a '.' prompt will appear.

To make spare copies of Supermon just load the program and


save it as if it was Basic.

Supermon is given here as a relocatable loader: it can be located


anywhere in RAM. To adjust where it isto be located in memory,
find the starting address and add 2065 to it. Use the following
formula to calculate the two numbers necessary:

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.

To restart Supermon, type SYS starting address + 1. The normal


value to start Supermon is SYS 38893.

Instructions for using Superman

Supermon commands are all one-letter commands usually

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:

A (start address in hex) (mnemonic) (operand).

e.g. A 1000 LOA # $10

The address is the starting address in hex. The mnemonic is the


assembly language command and the operand is the number
associated with the command if there is one.

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.

Here is a simple example program which shows you how the


assembler works .

.A 1000 LOA # $00


.A 1002 STA $0020
.A 1005 STA $0021
.A 1008 RTS

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

The total length of the name must not exceed 16 or a question

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.

The next command is the command to execute a program in


machine code from the assembler. It is 'G' and has the syntax:

G address to start at.

If you want to return control to the monitor when the program


has been run then make the last command of the program a
BRK command instead of an RTS.

The next command allows you to see a program in memory.


It is '0' and has the syntax:

o start
e.g. 0 1000

This command clears the screen and prints a page of commands.


To see more press 0 and return.

The next command is the same as '0' except that it prints a


continuous listing without clearing the screen. The command
is 'P' and it has the syntax:

P start end

It is mainly used when you want a printer listing. To print a


disassembly to the printer type the following in Basic:

OPEN4,4 : eM 04 : SYS38893

(The SYS assumes that the monitor is at its default position in


memory. If it isn't, use your address.)

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>.

Often you will want a listing of memory in hex (which Supermon


was listed in). This is done with the 'M' command which has
the syntax:

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.

The monitor has a command to fill areas of memory with a


number. It is 'F' and it has the syntax:

F start end byte

where start and end are addresses in hex and byte is a byte in hex.

Supermon can move parts of memory to another part. The


command is 'T' which stands for transfer memory. It has the
syntax:

T oldstart oldend newstart

where oldstart, old end and newstart are addresses in hex.

If you want to find the contents of the registers at any time,


type the command 'R' on its own.

If you are working in the assembler and you want to load a


program into memory where it came from, there are two ways
to do this:

1. return to Basic and type LOADlname",device,1

e.g. To load the file hello from tape type LOAD"HELLO", 1, 1

15
2. use the command 'L' in the monitor. It has the syntax:

L"name" ,device

where device is 01 for tape and 08 for disk.

To exit the assembler and retu rn to Basic type X < retu rn > or
press run/stop and restore.

Summary of SUPERMON commands.

Command Meaning
Syntax

A Assemble Mnemonics into


memory A 1000 LOA #$10
o Disassemble memory 01000
M Display hex from memory M 10002000
S Save memory to device S"name",08,1ooo,20oo
L Load memory from device L"name" ,01
P Print disassembly of memory P 10002000
F Fill memory F 3000 4000 FF
T Transfer memory to memory T 1000 2000 COOO
X Exit to Basic X
R Register display R
G Goto address G FFD2

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:

$AEFO: Check if the next character is a comma and skip it.


Otherwise print SYNTAX ERROR and return to Basic.

$A08A: Read next expression (variable, number, etc.) into the


FAC.

$B7F7: Change the value in the FAC into a 16 bit integer


(0-65535). If the number is too big then print illegal quantity error
and return to Basic. Otherwise put the low byte of the number
into $14 and the high byte into $15.

$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.

$B7EB: This routine reads two expressions or numbers separated


by a comma from the Basic text. The first is a 16 bit number
and the second is an 8 bit number. The 16 bit number is stored
in $14 and $15 and the 8 bit number is stored in the X register.
If either or both of the numbers are out of their ranges then the
program will stop and print an illegal quantity error. If the comma
is missing a syntax error with be displayed. Both these errors
return control 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:

SYS 28672,start address, end address, byte

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

An error will be given if any of the numbers are too big or


negative.

PAL (C)1979 BRAD TEMPLETON


2
20: 7000 .OPT P,OO
30: 7S00 *-
IFILL ROUTINE
57000


;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

2"": 7"11 2" FD AE JSR $AEFD


;SCAN PAST COMMA
22": 7"14 2" 8A AD JSR $AD8A
23": 7"17 2" F7 B7 JSR $B7F7
24": 7"lA A5 14 LDA $14
248: 781C 8D 3C 83 STA 828
2\58: 781F A5 15 LDA $15
25": 7"21 8D 3D "3 STA 829

278: 7"24 2" FD AE JSR SAEFD


288: 7"27 28 8A AD JSR SAD8A
298: 782A 28 F7 B7 JSR SB7F7
388: 782D A5 15 LDA $1\5
388: 7"2F F" "3 BEG! MORE
3"": 7"31 4C 48 B2 JMP $B248
.SB248 IS IG!ANT ERROR
328: 7"34 A\5 14 MORE LDA $14
328: 7"36 8D 3E "3 STA 83"
7"39 A8 LOOP LDY 1t8
33":
34": 783B AD
91
""FB3E "3 LDA 83"
STA ($FB),Y
35": 7"3E
36": 7"48 28 \57 7" JSR ADD
378: 7"43 A\5 FB LDA $FB
378: 7"4\5 CD 3C "3 CMP 828
37": 7"48 F" "3 BEG! CHECK
38": 7"4A 4C 39 7" JMP LOOP
398: 7"4D A5 FC CHECK LDA $FC
398: 784F CD 3D 83 CMP 829
398: 78\52 F" 8B BEG! FINISH
48": 7854 4C 39 7" JMP LOOP
41": 7"57 E6 FB ADD INC SFB
41": 7"\59 F" "1 BEG! FCPLUSl
42": 7"5B 6" RTS
438: 78\5C E6 FC FCPLUSl INC SFC
438: 78\5E 68 RTS
44": 7S5F 6" FINISH RTS
]7""8-7"6"

28
B*
PC SR AC XR YR SP
.197FE 72 99 99 91 F6

7999 29 FD AE JSR SAEFD


7993 29 8A AD JSR .AD8A
7996 29 F7 B7 JSR .B7F7
7999 AS 14 LDA .14
799B 85 FB STA $FB
799D A5 15 LDA .1S
799F 8S FC STA SFC
7911 29 FD AE JSR .AEFD
7914 29 8A AD JSR SAD8A
7917 29 F7 B7 JSR .B7F7
791A AS 14 LDA .14
791C 8D 3C 93 STA S933C
791F AS 1S LDA .1S
7921 8D 3D 93 STA .933D
7924 29 FD AE JSR .AEFD
7927 29 8A AD JSR .AD8A
792A 29 F7 B7 JSR .B7F7
792D AS 1S LDA .1S
792F F9 S3 BEQ .7934
7931 4C 48 B2 JMP .B248
7934 AS 14 LDA $14
7936 8D 3E 93 STA S933E
7939 A9 S9 LDY ..S99
793B AD 3E 93 LDA S933E
793E 91 FB STA 'SFB) ~ Y
7949 29 S7 79 JSR S79S7
7943 AS FB LDA SFB
7945 CD 3C 93 CMP S933C
7948 F9 93 BEQ S794D
794A 4C 39 79 JMP S7939
794D AS FC LDA SFC
794F CD 3D 93 CMP $933D
79S2 F9 SB BEQ .79SF
7954 4C 39 79 JMP S7939
79S7 E6 FB INC SFB
79S9 F9 91 BEG! .795C

29
2. Move
The following routine allows you to move an area of memory
to another location. It has the syntax:

SYS 24576, start, finish,destination address.

e.g. to move the contents of the screen to 16384 type the


following:

SYS 24576,1024,2023,16384

The three numbers or variables must be no bigger than 65535.


If they are bigger then an error will be printed and control will
return to Basic.

PAL (C)1979 BRAD TEMPLETON


2
28: 6888 .OPT P,OO
38: 6888 *- .6111111
IROUTINE TO MOVE ONE
AREA OF
;MEMORY TO ANOTHER
I
;SCAN COMMA
98: 6888 28 FD AE JSR SAEFD
1811: 68113 211 8A AD JSR SAD8A
1111 : 6886 28 F7 B7 JSR SB7F7
1211: 61189 AS 14 LDA .14
1311: 688B 8D 78 68 STA TEMP
1411: 688E AS 1S LDA S1S
1SII: 611111 8D 79 68 STA TEMP+1

16S: 6813 28 FD AE JSR SAEFD

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

291 : 6039 AD 78 68 LDA TEMP


291 : 603C 85 FB STA .FB
292: 603E AD 79 60 LDA TEMP+l
292: 6041 85 FC STA .FC
293: 6043 AD 7C 68 LDA TEMP+4
293: 6046 85 FD STA .FD
294: 6048 AD 7D 68 LDA TEMP+5
294: 604B 85 FE STA .FE
388: 604D A0 88 LDY ..8
310: 604F Bl FB LOOP LDA CSFB) ,Y
328: 6051 91 FD STA (SFD),Y
338: 6053 28 68 68 JSR ADDONE
348: 6056 A5 FB LDA .FB
358: 6058 CD 7A 68 CMP TEMP+2
368: 605B F0 18 BEQ CHECK
378: 605D 4C 4F 68 JMP LOOP

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

558: 6877 FIN .. *


555:
568:
6877 68
6878
]6888-6878
TEMP .
RTS
*

READY.

B*
PC SR AC XR YR SP
.197FE 72 88 08 81 F6

6888 28 FD AE JSR $AEFD


6883 28 8A AD JSR $AD8A
6086 28 F7 B7 JSR $B7F7
6889 A5 14 LDA $14
688B 8D 78 68 STA $6878
688E A5 15 LDA S15
6010 8D 79 68 STA $6879
6013 28 FD AE JSR SAEFD
6816 28 8A AD JSR SAD8A
6819 20 F7 B7 JSR $B7F7
681C A5 14 LDA S14
681E 8D 7A 60 STA S607A
6821 A5 15 LDA $15
6023 8D 7B 68 STA S607B
6826 28 FD AE JSR SAEFD
6829 20 8A AD JSR .AD8A
602C 28 F7 B7 JSR .B7F7
682F A5 14 LDA .14
6831 8D 7C 68 STA $687C
6034 A5 15 LDA $15
6836 8D 7D 68 STA $687D

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.

The syntax is SYS 960. To disable it press run/stop and restore


simultaneously.

PAL (C) 1979 BRAD TEMPLETON


2
28: S3C8 .OPT P,OO
38: S3CIII
*- 968

58: S'$C8 A9 CB LDA *<MAIN


68: S3C2 8D 26 83 STA 886
78: S3C5 A9 83 LDA *>MAIN
88: S3C7 8D 27 83 STA 887
98: S3CA 68 RTS
I
118: S3CB 48 MAIN PHA
11111 : S3CC 8A TXA
118: S3CD 48 PHA
118: S3CE 98 TYA
118: S3CF 48 PHA
128: S3D8 AD 8D 82 LOOP LDA 653
138: S3D3 C9 81 CMP *1
148: S3D5 F8 F9 BEG! LOOP
168: S3D7 68 PLA
168: S3D8 A8 TAY
16111: 03D9 68 PLA
16111: 03DA AA TAX

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

S3CS A9 CB LDA ...CB


S3C2 8D 26 S3 STA .S326
S3CS A9 S3 LDA ...S3
S3C7 8D 27 S3 STA SS327
S3CA 6S RTS
S3CB 48 PHA
S3CC 8A TXA
S3CD 48 PHA
S3CE 98 TYA
S3CF 48 PHA
S3DS AD 8D S2 LDA SS28D
S3D3 C9 Sl CMP ..SSl
S3DS FS F9 BE61 .S3DS
S3D7 68 PLA
S3D8 A8 TAY
S3D9 68 PLA
S3DA AA TAX
S3DB 68 PLA
S3DC 4C CA Fl JMP .FICA

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.

PAL (C)1979 BRAD TEMPLETON


2
2": 6""" .OPT P,OO
3": 60"" *- S6S"S

;ROUTINE TO SETUP
;FUNCTION KEYS

8": 6SS" 78 SEI


9": 6""1 A9 "D LDA tt<MAIN
1"": 6S"3 8D 14 "3 STA 788
11S: 6""6 A9 6" LDA tt>MAIN
12": 6SS8 8D 15 "3 STA 789
13": 60"B 58 CLI
14": 6""C 6S RTS

17": 6"SD 48 MAIN PHA


18S: 6SSE 8A TXA
19S: 6SSF 48 PHA

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

290: 601E A9 38 LDA *.30


308: 6828 8D 72 60 STA C180
318: 6823 4C 47 69 JMP PRINT
;
330: 6826 C9 84 LOOPl CMP *4
349: 6928 D9 08 BNE LOOP2
359: 682A A9 99 LDA *9
369: 682C 8D 72 69 STA C180
379: 692F 4C 47 69 JMP PRINT

399: 6832 C9 95 LOOP2 CMP *5


499: 6934 D0 98 BNE LOOP3

429: 6836 A9 18 LDA *.18


438: 6938 8D 72 69 STA C199
448: 693B 4C 47 69 JMP PRINT

460: 603E C9 06 LOOP3 CMP *6


470: 6049 D0 28 BNE LOOP
480: 6042 A9 20 LDA *$20
490: 6044 8D 72 69 STA C100

510: 6047 AD 8D 02 PRINT LDA $928D


520: 604A C9 01 CMP *1
530: 684C D0 09 BNE PUTON

550: 604E AD 72 69 LDA C109


560: 6051 18 CLC
560: 6052 69 08 ADC *8
570: 6054 8D 72 60 STA C100

590: 6057 A2 00 PUTON LDX *0

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.

The clock is in 24 hour format, so remember to enter the time


in 24 hour format.

PAL (C) 1979 BRAD TEMPLETON


2
2": 7""" .OPT P,OO
3": 7""" *- .7"""
;DISPLAYS A CLOCK AT
ITOP LEFT
;OF SCREEN
I
;TO SET TYPE

;SYS 24576,HOURS,MINS
;
;SECONDS ASSUMED ZERO

15": 7""" 2" FD AE JSR $AEFD


16": 7""3 2" 9E B7 JSR .B79E
17": 7""6 8A TXA
18": 7""7 C9 18 CMP #24
19": 7""9 B" 14 BCS IGIERR

42
200: 708B 8D B7 70 STA HOUR

220: 700E 20 FD AE JSR SAEFD


230: 7011 20 9E B7 JSR SB79E
240: 7014 8A TXA
2~0: 7015 C9 3C CMP *60
260: 7017 B0 06 BCS IGiERR
270: 7019 8D B8 70 STA MINUTE

290: 701C 4C 22 70 JMP SETUP


;
310: 701F 4C 48 B2 IGiERR JMP SB248
;
330: 7022 78 SETUP SEI
340: 7023 A9 3F LDA *<MAIN
350: 702~ 8D 14 03 STA 788
360: 7028 A9 70 LDA *>MAIN
370: 702A 8D 15 03 STA 789
380: 702D AD B7 70 LDA HOUR
401lJ: 7031lJ AD B8 71lJ LDA MINUTE
421lJ: 71lJ33 A9 1lJ0 LDA *1lJ
431lJ: 71lJ3~ 8D B9 71lJ STA SECOND
451lJ: 7038 A9 00 LDA *0
451lJ: 703A 8D BA 71lJ STA COUNTER
461lJ: 703D 58 CLI
471lJ: 703E 61lJ RTS

;
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

551lJ: 7049 4C 31 EA JMP SEA31

~70: 704C A9 00 CHANGE LDA *0


580: 704E 8D BA 71lJ STA COUNTER

601lJ: 7051 EE B9 71lJ INC SECOND


611lJ: 71lJ54 AD B9 70 LDA SECOND
620: 7057 C9 3C CMP *60

43
638: 7839 B8 83 BCS MINUTECHANGE

638: 785B 4C 8D 78 JMP PRINT

678: 783E A9 88 MINUTECHALDA ..8


688: 7868 8D B9 78 STA SECOND
698: 7863 EE B8 78 INC MINUTE
788: 7866 AD B8 78 LDA MINUTE
718: 7869 C9 3C CMP .. 68
728: 786B B8 83 BCS HOURCHANGE

748: 786D 4C 8D 78 JMP PRINT


;
768: 7878 A9 88 HOURCHANGLDA ..8
778: 7872 8D B8 78 STA MINUTE
788: 7875 EE B7 78 INC HOUR
798: 7878 AD B7 78 LDA HOUR
888: 787B C9 18 CMP .. 24
818: 787D 98 8E BCC PRINT

838: 787F A9 88 LDA .. 8


848: 7881 8D B9 78 STA SECOND
858: 7884 8D B8 78 STA MINUTE
868: 7887 8D B7 78 STA HOUR
878: 788A 4C 31 EA JMP SEA31

898: 788D A9 13 PRINT LDA ""I


988: 788F 28 D2 FF JSR SFFD2

928: 7892 A9 88 LDA .. 8


938: 7894 AE B7 78 LDX HOUR
948: 7897 28 CD BD JSR SBDCD

968: 789A A9 3A LDA :It" :


978: 789C 28 D2 FF JSR $FFD2

998: 789F A9 88 LDA .. 8


1888: 78Al AE B8 78 LDX MINUTE
1818: 78A4 28 CD BD JSR $BDCD

1838: 78A7 A9 3A LDA tI":

44
1040: 70A9 20 D2 FF JSR .FFD2

1060: 70AC A9 00 LDA 10


1070: 70AE AE B9 70 LDX SECOND
1080: 70Bl 20 CD BD JSR .BDCD
1090: 70B4 4C 31 EA JMP .EA31
;
1110: 70B7 00 HOUR .BYT 0
1120: 70B8 00 MINUTE .BYT 0
1130: 70B9 00 SECOND .BYT 0
114": 70BA "0 COUNTER .BYT 0
l700"-7"BB

READY.

B*
PC SR AC XR YR SP
.197FE 72 00 "0 01 F6

7""" 2" FD AE JSR .AEFD


7"03 20 9E B7 JSR .B79E
7"06 8A TXA
7"07 C9 18 CMP 1.18
7009 B" 14 BCS '7"lF
7"0B 8D B7 70 STA .70B7
7"0E 2" FD AE JSR .AEFD
7"11 20 9E B7 JSR .B79E
7014 8A TXA
7015 C9 3C CMP 1.3C
7"17 B0 06 BCS '7"lF
7"19 8D B8 70 STA '7"B8
701C 4C 22 7" JMP .7022
7"lF 4C 48 B2 JMP .B248
7022 78 SEI
7"23 A9 3F LDA 1.3F
7025 8D 14 03 STA .0314

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.

PAL (C) 19'9 BRAD TEMPLETON


2
2": 1""" .OPT P,OO
3":
4":
1"""
II1J"" AD 16 D" LDA
*- '1"""
532'"
5": II1J"3 29 F8 AND tt248
18 CLC
,,,:
6": II1J"5
II1J"6 6D 5B 1" ADC BYTE
8": II1J"9 8D 16 D" STA 532'"
9": II1J"C CE 5B 1" DEC BYTE
1"": II1J"F AD 5B 1" LDA BYTE
11": I11J12 C9 FF CMP tt.FF
12": I11J14 F" "1 BE iii RESET
13": I11J16 6" RTS
14": Il1Jl' AD 16 D" RESET LDA 532'"
140: II1JIA 29 F8 AND tt248
14": II1JIC 18 CLC
14":
14":
l"lD 69 ",
II1JIF 8D 16 D"
ADC
STA
tt,
532'"
15":
15":
I11J22 A9
1"24 8D 5B 1"
", LDA
STA
tt,
BYTE
16": 1"2' 2" 2B 1" JSR CHARSCROLL
1''': 102A 6" RTS
18": 102B A9 06 CHARSCROLLDA tt6
19": 102D 8D 44 03 STA .0344
103" A2 LDX
2"":
210:
22":
1"32 A" 0" ""
1034 BD "1 "4 LOOP
LDY
LDA
tt"
tt0
'''4''1, x

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

1999 AD 16 D9 LDA $D916


1993 29 F8 AND ...F8
1995 18 CLC
1996 6D 3B 19 ADC $193B
1999 8D 16 D9 STA $D916
199C CE 5B 19 DEC $195B
199F AD 3B 19 LDA .195B
1912 C9 FF CMP tt.FF
1914 F9 91 BEG! .1917
1916 69 RTS
1917 AD 16 D9 LDA $D916
191A 29 F8 AND tt$F8

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.

PAL (C)1979 BRAD TEMPLETON


2
28: 1888 .OPT P,OO
38:
48:
11188
1888 AD 16 D8 LDA
*- S1888
S3278
48: 1883 29 F8 AND .. 248
S8: 188S 18 CLC
58: 1886 6D C9 18 ADC BYTE
68: 1889 8D 16 D8 STA S3278
78: 188C EE C9 18 INC BYTE
88: 188F AD C9 18 LDA BYTE
98: 1812 C9 88 CMP .. 8
188: 1814 F8 81 BEGl RESET
118: 1816 68 RTS
128: 1817 A9 88 RESET LDA ..8
128: 1819 8D C9 18 STA BYTE
138: 181C AD 16 D8 LDA S3278
148: 181F 29 F8 AND .. 248
158: 1821 8D 16 D8 STA S3278
168: 1824 28 28 18 JSR CHARSCROLL
178: 1827 68 RTS
188: U'28 A2 26 CHARSCROLLDX .. 38
198: 182A BD 88 84 LOOP LDA 1824,X
198: 182D 9D 81 84 STA 1825,X
288: 1838 BD 28 84 LDA 1824+48, X
288: 1833 9D 29 84 STA 182S+48,X
2U': 1836 BD S8 84 LDA 1824+88, X
218: 1839 9D Sl 84 STA 1825+88,X
228: 183C BD 78 84 LDA 1824+128,X

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

11'1'1' AD 16 OS LDA .01'16


11'1'3 29 F8 AND ... F8
11'1'5 18 CLC
11'1'6 60 C9 11' AOC .lSC9
lSS9 80 16 OS STA .OS16
lSSC EE C9 11' INC .lSC9
lSSF AD C9 11' LOA .lSC9
11'12 C9 1'8 CMP ".1'8
lS14 FS 1'1 BEQ .11'17
11'16 61' RTS
lS17 A9 1'1' LOA ".1'1'
lS19 80 C9 11' STA .lSC9
lSlC AD 16 OS LOA .01'16
lSlF 29 F8 AND ... F8
11'21 80 16 OS STA .01'16
11'24 21' 28 11' JSR .11'28
lS27 61' RTS
11'28 A2 26 LOX ...26
lS2A BO 1'1' 1'4 LOA .1'41'1', X
11'20 90 1'1 1'4 STA .1'41'1, X
lS3S BO 28 1'4 LOA .1'428, X

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.

To set up the screen for scrolling type SYS 16384.

To scroll the screen up one pixel type SYS 16398.

PAL (C) 1979 BRAD TEMPLETON


2
28: 4.8" .OPT P~OO
38: 4.8" .4888
;TO SETUP TYPE
*-
;SYS16384
,
TO USE TYPE SYS 16398
78: 48"8 AD 11 D" SETUP LDA 53265
,USE BEFORE STARTING
88: 4883 29 F7 AND .. 247
98: 48"5 8D 11 D8 STA 53265
188: 4888 A9 "7 LDA .. 7
188: 488A 8D 3B 48 STA BYTE
11": 4"8D 68 RTS
I MAIN ROUTINE
138: 4"8E AD 11 D" LDA 53265
148= 4811 29 F8 AND "248
H58: 4"13 18 CLC
168: 4814 6D 3B 48 ADC BYTE
178: 4817 8D 11 D" STA 53265
188: 481A CE 3B 48 DEC BYTE
198= 4"lD AD 3B 4" LDA BYTE
280: 4"20 C9 FF CMP ... FF
210: 4022 F" 81 BEG RESET
220: 4824 68 RTS
238: 4825 A9 87 RESET LDA "7
238= 4827 8D 3B 48 STA BYTE
24"= 482A AD 11 D0 LDA 53265

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

4888 AD 11 D8 LDA .D811


4883 29 F' AND ...F'
4885 8D 11 D8 STA .D811
4888 A9 8' LDA ".8'
488A 8D 3B 48 STA .483B
488D 68 RTS
488E AD 11 D8 LDA .D811
4811 29 F8 AND ...F8
4813 18 CL.C
4814 6D 3B 48 ADC .4B3B
481' 8D 11 D8 STA .D811
481A CE 3B 48 DEC .483B
4B1D AD 3B 48 LDA .483B
4828 C9 FF CMP ...FF
4822 F8 81 BEQ .4B25
4B24 6B RTS
4825 A9 8' LDA ".8'
482' 8D 3B 48 STA .483B
482A AD 11 DB LDA .D811
482D 29 F8 AND ...F8

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.

To set up the screen for scrolling type SYS 16384.

To scroll the screen down one pixel type SYS 16398.

PAL (C)1979 BRAD TEMPLETON


2
28: 4888 .OPT P,OO
38:
48:
4888
4888 AD 11 D8 SETUP
.4888
LDA 53265
*-
USE SETUP BEFORE
STARTING
68: 4883 29 F7 AND .. 247
78: 4885 8D 11 D8 STA 53265
88: 48"8 A9 88 LDA ..8
88: 488A 8D 4B 48 STA BYTE
98: 488D 68 RTS
MAIN ROUTINE
11": 488E AD 11 D8
LDA 53265
128: 4"11 29 F8 AND #248
138: 4813 18 CLC
148: 4"14 6D 4B 48 ADC BYTE
158: 4817 8D 11 D" STA 53265
168: 481A EE 4B 48 INC BYTE
17": 481D AD 4B 48 LDA BYTE
18": 4828 C9 88 CMP "."8
19": 4822 F8 81 BEQ RESET
2"": 4824 68 RTS
21": 4"23 A9 88 RESET LDA #8

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

4888 AD 11 D8 LDA SD811


4883 29 F7 AND ttSF7
488~ 8D 11 D8 STA SD811
4888 A9 88 LDA ItS88
488A 8D 4B 48 STA S484B
488D 68 RTS
488E AD 11 D8 LDA SD811
4811 29 F8 AND 1t5F8
4813 18 CLC
4814 6D 4B 48 ADC 5484B
4817 8D 11 D8 STA .D811
481A EE 4B 48 INC 5484B
481D AD 4B 48 LDA 5484B

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.

The syntax is as follows:

SYS 28672,screen colour, border colour,text colour,


multi1,multi2,multi3

NB. All parameters must be given.

PAL (C) 1979 BRAD TEMPLETON


2
2": 7""" .OPT P,OO
3": 7"""
, *- S7""S
,ROUTINE TO SET SCREEN
,COLOURS AND BORDER AND
'TEXT,MULTI1,MULTI2
8": 7""" 2" FD AE JSR SAEFD
9": 7""3 2" 37 7" JSR PARAM
lS": 7""6 8D 21 D" STA ~3281
11": 7""9 2S FD AE JSR SAEFD
12": 7""C 2" 37 7" JSR PARAM
13S: 7""F 8D 2" D" STA 5328"

15": 7"12 2" FD AE JSR SAEFD


16": 7"15 2" 37 7" JSR PARAM
18": 7"18 8D 86 "2 STA 646
198: 781B 28 FD AE JSR SAEFD
288: 781E 28 37 7" JSR PARAM
228: 7"21 eD 22 D" STA ~3282
238: 7824 28 FD AE JSR SAEFD

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

7888 28 FD AE JSR .AEFD


7883 28 37 78 JSR .7837
7886 8D 21 D8 STA .D821
7889 28 FD AE JSR .AEFD
788C 28 37 78 JSR .7837
788F 8D 28 D8 STA .D828
7812 28 FD AE JSR .AEFD
781~ 28 37 78 JSR .7837
7818 8D 86 flI2 STA .8286
781B 28 FD AE JSR .AEFD
781E 2fl1 37 7fl1 JSR .7837
7821 8D 22 D8 STA .DflI22
7824 28 FD AE JSR .AEFD
7827 28 37 78 JSR .7fl137
7fl12A aD 23 DflI STA .DflI23
782D 28 FD AE JSR .AEFD
7838 2fl1 37 78 JSR .7837
7833 8D 24 D8 STA .D824
7fl136 6fl1 RTS
7fl137 28 9E B7 JSR .B79E
7fl13A 8A TXA
783B 68 RTS
783C 4C 48 B2 JMP .B248

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 syntax is SYS 24576,address,no. of pages to copy.

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.

e.g. To copy the whole character ROM down to location 8192


type the following:

SYS 24576,8192,16

or, to copy only the first K of the ROM down to location 12288
type:

SYS 24576,12288,4

To enable the character set use location 53272 or the change


banks routine in this book.

To enable the character set at location 8192 type:

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

23": 6811 2" FD AE JSR SAEFD


24": 6814 2" 9E B7 JSR SB79E
2S": 6817 8A TXA
26": 6818 C9 11 CMP .. 17
27": 681A 9" B3 Bec MORE
28": 6fi11C 4C 48 B2 JMP SB248
29": 681F 8S FD MORE STA SFD
311":
31":
6821
6823
A9
8D
BB
SB 6"
LDA
STA
."
TEMP
32": 6826 A" BB LDY .."
33":
34":
6828
682A
A9
8S ""
FE
LDA
STA
."
SFE
3S": 682C A9 DB LDA .. 2B8
36": 682E 8S FF STA SFF

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

450: 6040 EE 5B 61lJ INC TEMP


460: 6043 AD 5B 611J LDA TEMP
470: 6046 C3 FD CMP $FD
480: 611J48 B0 07 BCS FINISH

311J0: 611J4A E6 FC INC $FC


510: 611J4C E6 FF INC SFF
5211J: 61lJ4E 4C 39 611J JMP LOOP
;
5411J: 611J5l A9 37 FINISH LDA tt55
550: 611J53 85 01 STA 1
560: cllJ55 A9 IIJl LDA ttl
570: 61lJ57 8D 0E DC STA 56334
580: 611J5A 61lJ RTS
590: 611J5B TEMP = *
l611J00-611J5B

READY.

B*
PC SR AC XR YR SP
; 97FE 72 1lJ0 1lJ0 IIJl F6

61lJIIJIIJ 21lJ FD AE JSR SAEFD


61lJIIJ3 211J 8A AD JSR SAD8A
611J1IJ6 211J F7 B7 JSR SB7F7
61lJ1lJ9 A5 14 LDA S14
61lJIlJB 85 FB STA SFB
601lJD A5 15 LDA S15
61lJIIJF 85 FC STA SFC

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)

No doubt you will want to check which character is under a


different sprite than sprite O. Rather than listing 8 programs, one
for each sprite, here is a list of what to change to make it work
for any sprite:

1. Change the first line from LOA $0000 to LOA $ hex location
of 'X' coordinate of the sprite that you want to test.

2. Change the line at address $400A to CMP # $ bit value of


sprite to be tested (sprite 0 = 1 through to sprite 7 = 128).

3. Change the line at address $400E to LOX $ hex location of


'X' coordinate of the sprite to be tested.

4. Change the line at address $4011 to LOA $ hex location of


'Y' coordinate of sprite to be tested.

5. Change the line at address $4032 to CMP # $ bit value of sprite


to be tested (as in 2).

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 ...

It checks the character under the 1s in the above diagram, but


this can be altered by changing two bytes in the program as
follows:

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.

e.g. to get the routine to check for the rightmost 8 bits of an


unexpanded sprite, make the line SBe # $30.

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.

To alter where the routine checks on the vertical change the


line at address $4015 (SBe #$3A). The rules for changing are
the same as for the 'X' direction. If the sprite is unexpanded
in the 'V' direction then the value is $3A + the byte down. If
the sprite is expanded then the value is $3A + 2* the byte down.
The value must never be less than $3A and if the sprite is unex-
panded no greater than $4F (79) or if the sprite is expanded no
greater than $64 (100) for the routine.

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

PAL (C) 1979 BRAD TEMPLETON


2
2": 4""" .OPT P,OO
3": 4""" *= $4"""
49"" AD LDA 53248
4":
5": 4""3 38
49"4 E9 18
D"
"" SEC
SBC .. 24
5":
5": 4""6 AA TAX
6": 4"97 AD 1" D" LDA 53264
6": 4""A C9 "1 CMP .. 1
6": 499C D9 93 BNE MORE
4S9E AE D9 LDX 53248
7":
8": 4"11
4914
AD
38
91 ""
D9 MORE LDA
SEC
53249
8":
8": 4915 E9 3A SBC .. 58
89: 4917 A8 TAY
9": 4918 8E 98 4" STX X1STORE ;Xl
1"": 491B 8C 9A 49 STY Y1STORE ; Y1
11": 491E 98 TYA
129: 491F 4A LSR A
12": 4929 4A LSR A
12": 4921 4A LSR A ;Y2=Yl/8
13": 4"22 18 CLC
13": 4923 69 "1 ADC .. 1
13": 4925 8D 9B 49 STA Y2STORE
14": 4928 8A TXA
15": 4929 4A LSR A
15": 492A 4A LSR A
159: 492B 4A LSR A ; X2=X2/8
16": 492C 8D 99 49 STA X2STORE
179: 492F AD 1'3 D9 LDA 53264
179: 4932 C9 "1 CMP .. 1
17": 4934 D" 99 BNE MOREl
18": 4936 AD 99 49 LDA X2STORE
19": 4939 18 CLC

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

4000 AD 00 D0 LDA .D000


4003 38 SEC
4004 E9 18 SBC ... 18
4006 AA TAX
4007 AD 10 D0 LDA .D010
400A C9 01 CMP ...01
400C D0 03 BNE .4011
400E AE 00 D0 LDX .D000
4011 AD 01 D0 LDA .D001
4014 38 SEC
401~ E9 3A SBC ...3A
4017 A8 TAY
4018 8E 98 40 STX .4098
4018 8C 9A 40 STY .409A
401E 98 TYA
401F 4A LSR
4020 4A LSR
4021 4A LSR
4022 18 CLC
4023 69 01 ADC ...01
4025 8D 98 40 STA .4098

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:

a = number: hi = intI a/256): 10 = (a-number)*256: poke


address, lo:pokeaddress + 1,hi

To use the routine type SYS 960,address,number.

e.g. to change the output character routine to point to your own


routine at 828 (as in the list alter routine later) type SYS
960,806,828.

PAL (C)1979 BRAD TEMPLETON


2
28: 03C8 .OPT P,OO
38: 03C8 *= 968

DOKE ROUTINE

SYNTAX SYS 968,


ADDRESS, VALUE
EG SYS16384,788,16384

118: 03C0 28 FD AE JSR .AEFD


120: 03C3 28 8A AD JSR .AD8A
130: 03C6 20 F7 B7 JSR .B7F7

1~8: 03C9 A5 14 LDA .14


160: 03CB 85 FB STA .FB
170: 03CD A5 15 LDA .15
180: 03CF 85 Fe STA .FC

75
-
20S: S3Dl 2S FD AE JSR SAEFD
21S: 03D4 2S 8A AD JSR SAD8A
22S: S3D7 2S F7 B7 JSR SB7F7

24S: 03DA AS SS LDY IS


25S: S3DC AS 14 LDA S14
26S: S3DE 91 FB STA (SFB),Y
27S: S3ES AS Sl LDY 11
28S: 03E2 AS 15 LDA S15
29S: S3E4 91 FB STA (SFB),Y

31S: 03E6 6S RTS


l03CS-03E7

READY.

B*
PC SR AC XR YR SP
; 97FE 72 S0 00 Sl F6

S3C0 2S FD AE JSR .AEFD


03C3 20 8A AD JSR .AD8A
03C6 20 F7 B7 JSR $B7F7
S3C9 A5 14 LDA .14
03CB 85 FB STA .FB
03CD A:I lS LDA .1:1
03CF 85 FC STA .FC
03Dl 20 FD AE JSR $AEFD
S3D4 20 8A AD JSR $AD8A
03D7 2S F7 B7 JSR .B7F7
S3DA AS SS LDY I$SS
03DC AS 14 LDA $14
S3DE 91 FB STA ($FB) ,Y
03ES AS Sl LDY ...Sl
03E2 AS 1:1 LDA $15
03E4 91 FB STA (.FB) ,Y
S3E6 6S RTS

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:

PRINT PEEK(ADDRESS) + 256*PEEK(ADDRESS + 1)

The routine cannot create a variable (e.g. a = Deek (address)


is not possible).

The syntax for the routine is as follows:

SYS 828,address

PAL (C)1979 BRAD TEMPLETON


2
28: B33C .OPT P,OO
38: B33C *= 929

SIMULATED DEEK
FUNCTION
ONLY USED TO PRINT
THE VALUE
IN TWO CONSECUTIVE

LOCATIONS IN 16 BIT
FORMAT
SYNTAX

SYS929,ADDRESS

EG. SYS92S,79S

WILL RETURN 59953

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

25.0: .0345 A5 14 LDA S14


26.0: .0347 85 FB STA SFB
27.0: .0349 A5 15 LDA S15
28.0: ,034B 85 FC STA SFC

3.0.0: ,034D A.0 .0.0 LDY .. .0


31.0: ,034F B1 FB LDA (SFB) ,Y
32.0: .0351 C8 INY
33.0: .0352 AA TAX
34.0: .0353 B1 FB LDA (SFB) ,Y

36.0: 0355 4C CD BD JMP $BDCD

l033C-,0358

READY.

B*
PC SR AC XR YR SP
; 97FE 72 0.0 00 01 F6

033C 20 FD AE JSR $AEFD


033F 20 8A AD JSR .AD8A
0342 20 F7 B7 JSR .B7F7
0345 A5 14 LDA $14
0347 85 FB STA $FB
0349 A5 15 LDA $15
034B 85 FC STA $FC
034D A0 .00 LDY "$00
034F B1 FB LDA (SFB),Y
.0351 C8 INY
0352 AA TAX
0353 B1 FB LDA ($FB) ,Y
0355 4C CD BD JMP SBDCD

78
15. 3 channel IRQ tune
The following routine will playa tune independently of the other
things that the computer is doing.

The routine is enabled by SYS 24576 and can be stopped with


run/stop and restore.

The data for the tune is held in the tunetable in the PAL listing
and from location $6074 onwards in the disassembly.

PAL (C) 1979 BRAD TEMPLETON


2
20: 6000 .OPT P,OO
30: 6000 *= $6000

40: 6000 78 SEl


40: 6001 A9 32 LDA '"<MAl
N
40: 6003 8D 14 03 STA 788
40: 6006 A9 60 LDA ,">MAl
N
40: 6008 8D 15 03 STA 789
40: 600B A9 0F LDA '"15
40: 600D 8D 18 D4 STA 54296

50: 6010 A9 13 LDA '"19


50: 6012 8D 04 D4 STA 54276

50: 6015 A9 40 LDA '"64


50: 6017 8D 05 D4 STA 54277

50: 601A 8D 06 D4 STA 54278

50: 601D 8D 0C D4 STA 54284

79
5a: 61l121l1 8D IlID D4 STA 54285

52: 611123 A9 21 LDA n33


52: 611125 8D IlIB D4 STA 54283

55: 611128 A9 IlIIl1 LDA nlll


55: 61l12A 85 FB STA 251
55: 61l12C 85 FC STA 252
55: 61l12E 85 FD STA 253
55: 61l131l1 58 CLI
55: 611131 6111 RTS

7t;J: 611132 A6 FB MAIN LDX 251


71l1: 611134 A4 FC LDY 252
70: 611136
Sill: 611136 BD 74 6111 LDA TUNE,
X
91l1: 611139 8D IlIIl1 D4 STA 54272

95: 61l13C BD A6 6 III LDA TUNE1


-2,X
95: 61l13F 8D 1117 D4 STA 54279

95: 611142 BD A7 6 III LDA TUNE1


-l,X
95: 611145 8D illS D4 STA 5428111

1t;J1l1: 611148 BD 75 6 III LDA TUNE+


1,X
11 III : 61l14B 8D 01 D4 STA 54273

120: 61l14E A5 FD LDA 253


131l1: 61l151l1 C9 iliA CMP n11l1
141l1: 611152 Bill 1lI5 BCS NEXDE
LAY
151l1: 611154 E6 FD INC 253
151l1: 611156 4C 31 EA JMP SEA31

161l1: 611159 A9 1110 NEXDELAY LDA nlll


161l1: 61l15B 85 FD STA 253
161l1: 61l15D E8 INX

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

165: 6flJ6B A2 flJflJ RE LDX ttflJ


165: 6flJ6D 85 FB STA 251
165: 6flJ6F 85 FC STA 252
165: 6flJ71 4C 31 EA .JMP SEA31

IflJflJflJ: 6flJ74 C6 2D flJflJ TUNE .BYT 198,4


5,flJ,flJ, 198,45,52,43, 126, 38, flJ,flJ, 126,38
IflJlflJ: 6flJ82 4B 22 7E .BYT 75,34
,126,38,75,34,141,3flJ,214,28,flJ,flJ
IflJ15: 6flJ8E D6 lC 8D .BYT 214,2
8,141,3flJ,75,34,227,22
IflJ2flJ: 6flJ96 Bl 19 8D .BYT 177,2
5,141,38,214,28,177,25,227,22
IflJ3flJ: 6flJAflJ flJflJ flJflJ flJflJ .BYT flJ,flJ,flJ
,flJ,flJ,flJ,8,flJ
IflJ5flJ: 6flJA8 72 flJB flJflJ TUNEI .BYT 114,1
l,flJ,flJ, 114,11,2flJ5,lflJ, 159,9,B,flJ,159,9
IflJ6flJ: 6flJB6 93 flJ8 9F .BYT 147,8
,159,9,147,8,163,7,53,7,flJ,B
IflJ7flJ: 6flJC2 35 flJ7 A3 .BYT 53,7,
163,7,147,8,185,5
IflJ8flJ: 6flJCA 6C flJ6 A3 .BYT IflJ8,6
,163,7,53,7,lflJ8,6,185,5
IflJ9flJ: 6flJD4 flJflJ flJflJ flJflJ .BYT flJ,flJ,flJ
,flJ,flJ,flJ,8,flJ
16flJflJflJ-68DC

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

: 6.074 C6 2D .016 16m C6 2D 34 2B


: 6m7C 7E 26 16.0 .0.0 7E 26 4B 22
: 6.084 7E 26 4B 22 8D 1E D6 1C
: 6m8C 16m em D6 1C 8D 1E 4B 22
: 61694 E3 16 B1 19 8D 1E D6 1C
: 6m9C B1 19 E3 16 168 16m 16m16m
: 6mA4 16m 8.0 mB 16m 72 mB .016
16m
: 68AC 72 8B CD mA 9F 169 16m16m
: 6mB4 9F 89 93 168 9F B9 93 168
: 6mBC A3 87 35 167 168 16m 35 167
: 6mC4 A3 87 93 168 B9 165 6C 166
: 6mcc A3 e7 35 .07 6C 166 B9 165
: 6mD4 8.0 8m Bm 16m 168 16m Bm 16m

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.

To use this routine type SYS 828,number of columns.

PAL (C) 1979 BRAD TEMPLETON


2
29: 933C .OPT P,OO
39: 933C *= S933C
49: 933C IBSOUT = S9326
59: 933C 29 FD AE JSR SAEFD
69: 933F 29 9E B7 JSR SB79E
79: 9342 8E 77 93 STX COLUMN
89: 9345 AD 26 93 LDA IBSOUT
99: 9348 8D 78 93 STA OLDOUT
199: 934B AD 27 93 LDA IBSOUT+l
119: 934E 8D 79 93 STA OLDOUT+l
129: 9351 A9 5C LDA tt<MAIN
139: 9353 8D 26 93 STA IBSOUT
149: 9356 A9 93 LDA tt>MAIN
159: 9358 8D 27 93 STA IBSOUT+l
169: 935B 69 RTS

189: 935C C9 90 MAIN CMP tt13


199: 935E F9 98 BEG! DOCR
299: 9369 CE 7A 93 DEC COUNT
219: 9363 D9 9B BNE NAODCR
229: 9365 29 74 93 JSR NEWPRT
239: 9368 AD 77 93 DOCR LOA COLUMN
249: 936B 80 7A 93 STA COUNT
259: 936E A9 90 LDA tt13
269: 9379 29 74 93 NAOOCR JSR NEWPRT

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

1lJ33C 21lJ FD AE JSR SAEFD


033F 20 9E B7 JSR SB79E
0342 8E 77 03 STX SIlJ377
0345 AD 26 1lJ3 LDA SIlJ326
0348 8D 78 1lJ3 STA SIlJ378
034B AD 27 1lJ3 LDA SIlJ327
034E 8D 79 1lJ3 STA SIlJ379
0351 A9 5C LDA "SSC
0353 8D 26 1lJ3 STA S0326
0356 A9 03 LDA ...1lJ3
0358 8D 27 1lJ3 STA SIlJ327
1lJ35B 61lJ RTS
035C C9 IlJD CMP ...0D
035E F0 1lJ8 BEG! SIlJ368
1lJ361lJ CE 7A 1lJ3 DEC SIlJ37A
0363 DIlJ IlJB BNE SIlJ370
0365 21lJ 74 1lJ3 JSR SIlJ374
1lJ368 AD 77 1lJ3 LDA SIlJ377
036B 8D 7A 1lJ3 STA SIlJ37A
036E A9 IlJD LDA .. SIlJD
0371lJ 21lJ 74 1lJ3 JSR SIlJ374
0373 61lJ RTS
0374 6C 78 1lJ3 JMP (S0378)
0377 51lJ 0e BVC SIlJ379

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.

To use type SYS 300.

To load into memory after a new type LOAD"OLD",8,1 (or


LOAD"OLD",1,1) and then SYS 300.

PAL (C) 1979 BRAD TEMPLETON


2
2": 812C OPT P,OO
3": 812C
;OLD ROUTINE
3"" *=
5": flJ12C A9 FF LDA tt$FF
6": 812E A" "1 LDY ttl
7": 813" 91 2B STA ($2B),8Y
8": 8132 2" 33 A5 JSR .A533
9": 111135 A5 22 LDA $22
11ll": 111137 18 CLC
11": 111138 69 "2 ADC tt2
11": 1ll13A 85 2D STA $2D
121ll: 1ll13C A5 23 LDA $23
13": 1ll13E 69 illS ADC tt"
14": "14" 85 2E STA S2E
15": 8142 4C 5E A6 JMP SA65E
l"12C-"145

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

012C A9 FF LDA #SFF


012E A0 01 LDY #.01
0130 91 2B STA ('2B) ,Y
0132 20 33 A3 JSR .A333
0133 A3 22 LDA $22
0137 18 CLC
0138 69 02 ADC #.02
013A 85 2D STA $2D
013C A5 23 LDA $23
.913E 69 .9'" ADC # .90
.914.9 85 2E STA $2E
0142 4C 5E A6 JMP $A65E

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.

To use type SYS 49152.

PAL eC) 19"9 BRAD TEMPLETON


2
28: C888 .OPT P,OO
38: C888
*- .C888

; GRAPH FUNCTION 26

"8: C888 A9 16 LDA tt$16


98: C882 aD 88 DD STA ~6~"6
; CHANGE BLOCK

118: C88~ A9 8a LDA tta


128: C88" aD 18 D8 STA ~3272

148: C88A AD 11 D" LDA ~326~


148: C""D "9 28 ORA tt32
148: C""F aD 11 D" STA ~3265
1~": C"12 6" RTS
lC"8"-C"13

READY.

88
B*
PC SR AC XR YR SP
; 97FE 72 ee es el F6

cees A9 16 LDA ... 16


cee2 SD ee DD STA .DDse
cees A9 es LDA ...es
eee7 SD lS De STA .DelS
eeeA AD 11 DS LDA .Dell
ceeD e9 2e ORA ...2e
ceeF SD 11 DS STA .Dell
ce12 6e RTS

89
19. NRM
This is the complementary routine to graph. It turns the high
res screen off and returns to the normal text screen.

To use type SYS 49174.

PAL (C)1979 BRAD TEMPLETON


2
21: Cl16 .OPT P,OO
31: Cl16 *= .Cl16
; NORM COMMAND
~I: Cl16 A9 15 LDA .. 21
61: Cl18 8D 18 DI STA 53272
71: CllB A9 lS LDA .. 27
81: CllD 8D 11 DI STA 53265
91: Cl21 A9 17 LDA .. 23
111: Cl22 8D 11 DD STA 56576
111: Cl2~ 61 RTS
lCl16-Cl26

READY.

B*
PC SR AC XR YR SP
.197FE 72 IS IS 11 F6

Cl16 A9 1~ LDA ... 15


Cl18 8D 18 De STA .Dl18
CllB A9 lB LDA ... lB
CllD 8D 11 DI STA .Dlll
Cl21 A9 17 LDA ... 17
Cl22 8D 11 DD STA .DDII
Cl25 61 RTS

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.

To use type SYS 49190, drawing colour, background colour.

PAL (C) 1979 BRAD TEMPLETON


2
2": C"26 .OPT P,OO
3": C026
CLG COMMAND
SC"26 *=
50: C"26 20 FD AE JSR .AEFD
60: C"29 2" 8A AD JSR SAD8A
7": C"2C 20 F7 B7 JSR .B7F7
8": C"2F A5 15 LDA .13
80: C"31 F0 03 BEG! MORE
80: C033 4C 48 B2 :IMP .B248
90: C"36 A3 14 MORE LDA .14
90: C038 8D 85 CB STA FIN
10": C03B 20 FD AE JSR .AEFD
110: C03E 20 8A AD JSR .AD8A
120: CB41 20 F7 B7 JSR SB7F7
130: C044 A3 15 LDA 515
13": CB46 F0 03 BEG! MOREl
130: C048 4C 48 B2 JMP 5B248
14": C04B A5 14 MOREl LDA 514
140: Ce4D 0A ASL A
14": C04E 0A ASL A
140: C04F "A ASL A
140: C030 0A ASL A
140: C031 0D 85 C0 ORA FIN
14B: CB54 8D 85 CB STA FIN

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.

The syntax is SYS 49286,X coord, Y coord.

PAL (C) 1979 BRAD TEMPLETON


2
20: C0SA .OPT P,OO
3a: CaSA *= $C0SA
40: CmSA XCOORD = $14

;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

15m: cmSF 2m FD AE JSR CHECKC


OM
16m: cm92 2m EB B7 JSR COORD
17m: cm95 E0 CS CPX tt2mm
lsm: cm97 B0 5E BCS TOOBIG

19m: cm99 A5 14 LDA XCOORD

20m: cm9B C9 40 CMP tt<32m


21m: cm9D A5 15 LDA XCOORD
+1

94
220: C09F E9 01 SBC tt>320
230: C0Al B0 54 BCS TOOBIG

240: C0A3 8A TXA


250: C0A4 4A LSR
260: C0A5 4A LSR
270: C0A6 4A LSR
280: C0A7 0A ASL
290: C0A8 A8 TAY
300: C0A9 B9 F8 C0 LDA TABLE,
Y ;MULTIPLY PUT IN
310: C0AC 85 FD STA TEMP
320: C0AE B9 F9 C0 LDA TABLE+
1, Y
330: C0Bl 85 FE STA TEMP+l

340: C0B3 8A TXA


350: C0B4 29 07 AND #%0000
0111
360: C0B6 18 CLC
370: C0B7 65 FD ADC TEMP
380: C0B9 85 FD STA TEMP
390: C0BB A5 FE LDA TEMP+l

400: C0BD 69 00 ADC #0


410: C0BF 85 FE STA TEMP+l

420: C0Cl A5 14 LDA XCOORD

430: C0C3 29 07 AND #'.0000


0111
440: C0C5 A8 TAY
450: C0C6 A5 14 LDA XCOORD

460: C0C8 29 F8 AND #'.1111


1000
470: C0CA 18 CLC
480: C0CB 65 FD ADC TEMP
490: C0CD 85 FD STA TEMP
500: C0CF A5 FE LDA TEMP+l

95
510: C0Dl 65 15 ADC XCOORD
+1
520: C0D3 85 FE STA TEMP+l

530: C0D5 A5 FD LDA TEMP


540: C0D7 18 CLC
550: C0D8 69 00 ADC tt<SCRE
EN
560: C0DA 85 FD STA TEMP
570: C0DC A5 FE LDA TEMP+1

580: C0DE 69 60 ADC tt>SCRE


EN
590: C0E0 85 FE STA TEMP+1

600: C0E2 A2 00 LDX .. 0


610: C0E4 A1 FD LDA <TEMP,
X)
620: C0E6 2C 3A C1 BIT RSFLAG

630: C0E9 10 06 BPL SET2


640: C0EB 39 32 C1 AND ANDMAS
K,Y
650: C0EE 4C F4 C0 JMP SET3
660: C0F1 19 2A C1 SET2 ORA ORMASK
,Y
670: C0F4 81 FD SET3 STA (TEMP,
X)
680: C0F6 60 RTS
690: C0F7 60 TOOBIG RTS
700: C0F8 N = 320
710: C0F8 00 00 4" TABLE .WORD0*N,1*
N,2*N,3*N,4*N
72": C1"2 40 06 80 .WORD5*N,6*
N,7*N,8*N,9*N
73": C1"C 80 0C C0 .WORD10*N,1
1*N, 12*N, 13*N,14*N
74": C116 C0 12 00 .WORD15*N,1
6*N, 17*N, 18*N, 19*N
75": C120 00 19 40 .WORD20*N,2
1*N,22*N,23*N,24*N

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

86": C132 7F ANDMASI< .BYT 'YofOllll


111
87": C133 BF .BYT %1"111
111
88"= C134 DF .BYT %11fOll
111
89": C135 EF .BYT %111fOl
111
9"": C136 F7 .BYT %1111"
111
91": C137 FB .BYT %11111
"11
92": C138 FD .BYT %11111
1"1
93": C139 FE .BYT %11111
11"

95": C13A RSFLAG


]C"8A-C13B "" .BYT "

READY.

97
B*
PC SR AC XR YR SP
; 97FE 72 flJflJ flJflJ flJl F6

CflJSA A9 flJflJ LDA ..SflJflJ


CflJSC SD JA Cl STA SC13A
CflJSF 2flJ FD AE JSR SAEFD
CflJ92 2flJ EB B7 JSR $B7EB
CflJ95 EflJ CS CPX "SCS
CflJ97 BflJ SE BCS SCflJF7
CflJ99 A5 14 LDA S14
CflJ9B C9 4flJ CMP ..S4flJ
CflJ9D A5 15 LDA S15
CflJ9F E9 flJ1 SBC ..SflJl
CflJAl BflJ 54 BCS SCflJF7
CflJA3 SA TXA
CflJA4 4A LSR
CflJA5 4A LSR
CflJA6 4A LSR
CflJA7 flJA ASL
CflJAS AS TAY
CflJA9 B9 FS CflJ LDA .CflJFS,Y
CflJAC S5 FD STA SFD
CflJAE B9 F9 CflJ LDA SCflJF9,Y
CflJB1 S5 FE STA SFE
CflJB3 SA TXA
CflJB4 29 flJ7 AND "$flJ7
CflJB6 lS CLC
CflJB7 65 FD ADC SFD
CflJB9 S5 FD STA .FD
CflJBB A5 FE LDA .FE
CflJBD 69 aflJ ADC .. SflJflJ
CflJBF S5 FE STA SFE
CflJCl A5 14 LDA $14
CflJC3 29 flJ7 AND ..SflJ7
CflJC5 AS TAY
CflJC6 A5 14 LDA S14
CflJCS 29 FS AND ... FS
CflJCA 1S CLC
CflJCB 65 FD ADC .FD
CflJeD S5 FD STA SFD

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

: CIlJF8 IlJIlJ IlJIlJ 41lJ "1 81lJ 1lJ2 IlJJ


CIlJ
: C11lJ1lJIlJIlJ 1lJ5 41lJ 1lJ6 8" 1lJ7 08
CIlJ
: C11lJ8 IlJIlJ IlJA 41lJ IlJB 80 IlJC 0D
CIlJ
.:C111lJ IlJIlJ IlJF 41lJ 11lJ 81lJ 11 12
CIlJ
: C118 00 14 41lJ 15 81lJ 16 C0 17
: C121lJ IlJIlJ 19 40 lA 81lJ lB C0 lC
: C128 IlJIlJ lE 81lJ 41lJ 21lJ 11lJ 1lJ8 1lJ4
: C1 JIlJ 1lJ2 IlJl 7F SF DF EF F7 FB
: C138 FD FE 01lJ C2 C9 F0 08 21lJ

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.

To use type SYS 49286,X,Y

30' *=SC0S6
40' LDA .. SFF
50' BNE SET1

READY.

PC SR AC XR YR SP
.,97FE 72 0'0' 0'0' 0'1 F6

CBS6 A9 FF LDA ttSFF


cess De flJ2 BNE scesc

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).

The syntax is SYS 49467,X,Y,char code

PAL (C)1979 BRAD TEMPLETON


2
20: C13B .OPT P,OO
30: C13B *= SC13B

;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.

The syntax is SYS 828, bank (0-3)

where bank 0 is 0-16383,1 is 16384 to 32767 and so on.

PAL (C) 1979 BRAD TEMPLETON


2
2.0: .033C .OPT P,OO
3.0: f(J33C *= 828

ROUTINE TO CHANGE
BANK FOR
VIC II CHIP

SYNTAX

SYS 828, BANK (.0-3)

13f(J: f(J33C 2f(J FD AE JSR SAEFD


14.0: .033F 2.0 9E B7 JSR SB79E
15.0: f(J342 8A TXA
16.0: .0343 C9 .05 CMP #5
17f(J: .0345 9f(J .03 BCC MORE
18.0: .0347 4C 48 B2 JMP SB248

2f(Jf(J: .034A AA MORE TAX


21.0: .034B BD 63 .03 LOA L53272,X
22.0: .034E 80 18 0.0 STA 53272
23.0: .0351 BD 67 .03 LOA L648,X
24.0: f(J354 80 88 .02 STA 648

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

31.0: .0363 15 15 15 L53272 .BYT 21,21,21,21


32.0: .0367 .04 .04 .04 L648 .BYT 4,4,4,4
33.0: .036B 47 46 45 L56576 .BYT 71,7.0,69,68
l.033C-.036F

READY.

B*
PC SR AC XR YR SP
; 97FE 72 .0.0 .0.0 .01 F6

.033C 2.0 FD AE JSR SAEFD


.033F 2.0 9E B7 JSR SB79E
.0342 8A TXA
.0343 C9 .05 CMP #S.05
.0345 9.0 .03 Bce S.034A
.0347 4C 48 B2 JMP SB248
.034A AA TAX
.034B BD 63 .03 LDA S.0363,X
.034E 8D 18 D.0 STA SD.018
.0351 BD 67 .03 LDA S.0367,X
.0354 8D 88 .02 STA S.0288
.0357 BD 6B .03 LDA S.036B,X
.035A 8D .0ta DD STA SDD.0.0
.035D A9 93 LDA #S93
.035F 2.0 D2 FF JSR SFFD2
.0362 6.0 RTS

.:.0363 15 15 15 15 34 .04 .04 .04


.:.036B 47 46 45 44 3D 2.0 74 .03

109
25. Invert
This routine inverts all or some of the high res screen (it can
invert any part of memory).

The syntax is SYS 49746,start,invert

PAL (C) 1979 BRAD TEMPLETON


2
216: C252 .OPT P,OO
316: C252
;FILL ROUTINE
SC252 *=
;USES SFB AND .FC
;STORE TOP ADDRESS
;IN 828 AND 829
;SCAN PAST COMMA
916: C252 216 FD AE JSR SAEFD
;READ 16 BIT NUMBER
lee: C255 216 8A AD JSR SAD8A
;PUT INTO S14 AND S15
1116: C258 216 F7 B7 JSR $B7F7
1216: C25B A5 14 LDA $14
1216: C25D 85 FB STA SFB
1316: C25F A5 15 LDA S15
1316: C261 85 FC STA SFC

1516: C263 216 FD AE JSR SAEFD


;SCAN PAST NEXT COMMA
1616: C266 216 8A AD JSR SAD8A
1716: C269 216 F7 B7 JSR SB7F7
1816: C26C A5 14 LDA 514
1816: C26E 8D 3C 163 STA 828
1916: C271 A5 15 LDA S15
1916: C273 8D 3D 163 STA 829

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.

The keys used are as follows:

qwertyuiop@* t
and the space bar to turn the notes off

To turn on the organ type SYS 49152.

PAL (C)1979 BRAD TEMPLETON


2
29: Cf21f21f21 .OPT P,OO
3121: C99f21 *= $C9f219

5121: C99f21 78 SEI


59: Cf21f211 A9 1F LDA #<MAIN

5121: C9f213 8D 14 93 STA 788


69: Cf21f216 A9 C9 LDA #>MAIN

6121: Cf2198 8D 15 93 STA 789


79: Cf21f21B A9 f21F LDA #15
7121: C99D 8D 18 D4 STA 54296
79: Cf211f21 A9 21 LDA #33
7121: Cf21l2 8D 1214 D4 STA 54276
79: Cf2115 A9 38 LDA #<56
7121: C9l7 8D 95 D4 STA 54277
79: Cf21lA 8D 1216 D4 STA 54278
7121: C9lD 58 CLI
79: Cf211E 6121 RTS

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

180: C"34 PLAYNOTE = *NOTETA


19": C"34 B9 51 C" LDA
BLE,Y
19": C"37 8D "1 D4 STA 54273
19": cm3A B9 52 C" LDA NOTETA
BLE+l,Y
C"3D 8D D4 STA 54272
19":
20": cm4" 4C
3E
31 ""
EA JMP $EA31
21": C"43 "9 "E KEYDATA .BYT 62,9,1
4,17,22,25,3",33,38,41
22": cm4D 2E 31 36 .BYT 46,49,
54,6"

24": C"51 11 25 13 NOTETABLE.BYT 17,37,


19,63,21,154,22,227
25": C"59 19 Bl lC .BYT 25,177
,28,214,32,94,34,75,38,126,43,52
26": cm65 2D C6 33 .BYT 45,198
,51,97,57,172,",m
lc""m-C"6D

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 syntax is SYS 16384,voice,volume,frequency,waveform.


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.

To produce a rising tone the following routine could be used.

FOR A = TO 65535 STEP100 :


SYS16384, 1, 15,A,33:NEXT:SYS16384, 1,0,0,33

The last statement turns off the sound.

PAL (C) 1979 BRAD TEMPLETON


2
20: 4000 .OPT P,OO
30: 40016 *= S4000

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

190: 4012 20 FD AE JSR $AEFD


200: 40H5 20 8A AD JSR $AD8A
210: 4018 20 F7 B7 JSR $B7F7
220: 401B A5 15 LDA $15
230: 401D D0 2D BNE IGIERR
240: 401F A5 14 LDA $14
250: 4021 8D DB 40 STA VOLUME

270: 4024 20 FD AE JSR $AEFD


280: 4027 20 8A AD JSR $AD8A
290: 402A 20 F7 B7 JSR $B7F7
300: 402D A5 14 LDA $14
310: 402F 8D DD 40 STA FREGI
320: 4032 A5 15 LDA $15
330: 4034 8D DE 40 STA FREGI+1

350: 4037 20 FD AE JSR $AEFD


360: 403A 20 8A AD JSR $AD8A
370: 403D 20 F7 B7 JSR $B7F7
380: 4040 A5 15 LDA $15
390: 4042 D0 08 BNE IGIERR
400: 4044 A5 14 LDA $14
410: 4046 8D DC 40 STA WAVE
420: 4049 4C 4F 40 JMP DO
430: 404C 4C 48 B2 IGIERR JMP $B248

450: 404F A2 00 DO LDX *0


450: 4051 AD DC 40 LDA WAVE
460: 4054 DD DF 40 LOP CMP WAVETABLE,X
470: 4057 F0 08 BEGI MORE
480: 4059 E8 INX
480: 405A E0 04 CPX *4
490: 405C D0 F6 BNE LOP
500: 405E 4C 4C 40 JMP IGIERR
510: 4061 AD DA 40 MORE LDA VOICE

117
52": 4"64 F" E6 BEGI IGiERR
53": 4"66 C9 "4 CMP .. 4
54": 4"68 B" E2 BCS IGiERR

56": 4"6A AD DB 4" LDA VOLUME


5''': 4"6D C9 10 CMP .. 16
58": 4"6F B" DB BCS IGiERR

60": 40'1 AD DB 4" LDA VOLUME


61": 4"'4 8D 18 D4 STA 54296

63": 40" AD DA 40 LDA VOICE

650: 40'A C9 "1 CMP .. 1


660: 40'C F0 "7 BEGl VOICEl
6'0: 40'E C9 02 CMP .. 2
680: 4080 F0 20 BEGl VOICE2
698: 4882 4C BF 48 JMP VOICE3

'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

1030: 48D9 60 FINISH RTS


104.0: 40DA .0.0 VOICE .BYT .0
1.050: 40DB 00 VOLUME .BYT 0
1060: 40DC 00 WAVE .BYT 0
1070: 40DD 00 00 FRE6I .WORD0
1080: 40DF 11 21 41 WAVETABLE.BYT 17,33,65,129
l4000-40E3

READY.

B*
PC SR AC XR YR SP
97FE 72 0.0 0.0 01 F6

4000 20 FD AE JSR .AEFD


4003 20 8A AD JSR SAD8A
4006 20 F7 B7 JSR SB7F7
4009 A5 H5 LDA .H5
400B D0 3F BNE S404C
400D A5 14 LDA S14
400F 8D DA 40 STA S40DA
4012 20 FD AE JSR SAEFD
401~ 20 8A AD JSR SAD8A
4018 20 F7 B7 JSR .B7F7
401B A~ 15 LDA .1~
401D D0 2D BNE S404C
401F A5 14 LDA S14

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.

The syntax is SYS 16384, voice, volume, waveform, frequency,


attack, decay, sustain, release.

PAL (C)1979 BRAD TEMPLETON


2
28: 4888 .OPT P,OO
38: 4888 *= .4888

; 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

470: 4051 20 24 41 JSR GETPARAM


480: 4034 A3 13 LDA .13
490: 4036 D0 1C BNE IQERR
580: 4038 A3 14 LDA $14
318: 403A C9 10 CMP .. 16
328: 403C B8 16 BCS I6'lERR
330: 403E 8D 33 41 STA SUSTAIN

330: 4061 20 24 41 JSR GETPARAM


360: 4064 A5 13 LDA .13
370: 4066 D0 0C BNE I6'lERR
580: 4068 A3 14 LDA $14
398: 406A C9 10 CMP .. 16
608: 406C B8 86 BCS I6'lERR
610: 406E 8D 36 41 STA RELEASE

630: 4071 4C 77 40 JMP DO


I
630: 4074 4C 48 B2 IQERR JMP SB248

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

740: 4081 AD 34 41 LDA DECAY


751: 4084 4A LSR A
760: 4085 4A LSR A
770: 4086 4A LSR A
780: 4087 4A LSR A
790: 4088 18 CLC
801: 4089 6D 33 41 ADC ATTACK
810: 408C 8D 37 41 STA AD

831: 408F AD 36 41 LDA RELEASE


841: 4092 4A LSR A
851: 4093 4A LSR A
860: 4094 4A LSR A
870: 4095 4A LSR A
880: 4096 18 CLC
891: 4097 6D 35 41 ADC SUSTAIN
900: 409A 8D 38 41 STA SR

921: 409D A2 00 LDX .. 0


930: 409F AD 30 41 LDA WAVE
941: 40A2 DD 39 41 LOOP CMP WAVETABLE,X
951: 40A5 F0 08 BEG! MORE
960: 40A7 E8 INX
960: 40A8 E0 04 CPX .. 4
970: 40AA D0 F6 BNE LOOP
980: 40AC 4C 48 B2 IG!ERRl JMP $B248 ; I G!ERR

1010: 40AF AD 2E 41 MORE LDA VOICE


1010: 40B2 F0 F8 BEG! IG!ERRl
1920: 40B4 C9 04 CMP .. 4
1030: 40B6 B0 F4 BCS IG!ERRl

1050: 40B8 C9 01 CMP .. 1

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

1120: 40C3 AD 30 41 VOICEl LDA WAVE


1130: 40C6 8D 04 D4 STA 54276
1140: 40C9 AD 37 41 LDA AD
1150: 40CC 8D 05 D4 STA 54277
1160: 40CF AD 38 41 LDA SR
1170: 40D2 8D 06 D4 STA 54278
1180: 40D5 AD 31 41 LDA FREGI
1190: 40D8 8D 00 D4 STA 54272
1200: 40DB AD 32 41 LDA FREGI+l
1210: 40DE 8D 01 D4 STA 54273
1220: 40El 4C 23 41 JMP FINISH

1240: 40E4 AD 30 41 VOICE2 LDA WAVE


1250: 40E7 8D 0B D4 STA 54283
1260: 40EA AD 37 41 LDA AD
1270: 40ED 8D 0C D4 STA 54284
1280: 40F0 AD 38 41 LDA SR
1290: 40F3 8D 0D D4 STA 54285
1300: 40F6 AD 31 41 LDA FREGI
1310: 40F9 8D 07 D4 STA 54279
1320: 40FC AD 32 41 LDA FREGI+l
1330: 40FF 8D 08 D4 STA 54280
1340: 4102 4C 23 41 JMP FINISH

1360: 4105 AD 30 41 VOICE3 LDA WAVE


1370: 4108 8D 12 D4 STA 54290
1380: 410B AD 37 41 LDA AD
1390: 410E 8D 13 D4 STA 54291
1400: 4111 AD 38 41 LDA SR
1410: 4114 8D 14 D4 STA 54292
1420: 4117 AD 31 41 LDA FREGI
1430: 411A 8D 0E D4 STA 54286
1440: 411D AD 32 41 LDA FREGI+l
1450: 4120 8D 0F D4 STA 54287

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

4SSS 2S 24 41 JSR $4124


4"S3 A5 15 LDA .15
4SS5 DS 6D BNE .4874
4SS7 A5 14 LDA .14
4S"9 8D 2E 41 STA $412E
4SSC 2" 24 41 JSR $4124
4S"F A5 15 LDA $15
4S11
4S13
D" 61
A5 14
BNE
LDA
$4874
$14
4S15 8D 2F 41 STA $412F
4S18 2S 24 41 JSR .4124

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

.:412E "" "" "" "" ".0 "" ".0 ""


.:4136 "" "" "" 11 21 41 81 "4

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.

The syntax is SYS 16384,drive

where drive is 0 or 1, or 2 if both drives are to be read.

PAL (C)1979 BRAD TEMPLETON


2
2": 3FFD .OPT P,OO
3": 3FFD *= 16381
4": 3FFD FNLENGTH = $B7
3": 3FFD SECADR = $B9
6": 3FFD DEVNUM = SBA
7(1: 3FFD FNADD = $BB
8(1: 3FFD FNLEN = $FD
9": 3FFD TEMP = $FB
1"(1: 3FFD ST = S9"
11(1: 3FFD SENDFNAM = $F3DS
12": 3FFD CLOSEFIL = SF642
13": 3FFD SENDSEC = $FF96
14": 3FFD IECTALK = $FFB4
13(1: 3FFD IECINP = $FFAS
16": 3FFD LINENO = $BDCD
17": 3FFD PRINT = SFFD2
18": 3FFD CR = 13
I
2(1(1: 3FFD 4C 48 B2 IGlERR JMP $B248
;DIR SYNTAX SYS 16384
22(1: 4"(1(1 2(1 FD AE JSR $AEFD
23": 4""3 2" 9E B7 JSR $B79E
24": 4"(16 SA TXA

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

369: 491E ZERO = *tt"9


379: 491E A9 39 LDA N

389: 4929 85 FC STA .FC


399: 4922 A9 92 LDA tt2
499: 4924 85 FD STA FNLEN
419: 4926 4C 2D 48 JMP DIR
429: 4929 A9 91 BOTH LDA ttl
4311: 482B 85 FD STA FNLEN

458: 492D A9 99 DIR LDA tt9


469: 492F 85 99 STA ST
479: 4931 A9 24 LDA tt"s
489: 4933 85 FB STA TEMP
499: 4935 A9 FB LDA tt<TEMP
599: 4937 85 BB STA FNADD
519: 4839 A9 89 LDA tt>TEMP
529: 493B 85 BC STA FNADD+l
539: 483D A5 FD LDA FNLEN
549: 493F 85 B7 STA FNLENGTH
559: 4941 A9 98 LDA tt8
569: 4943 85 BA STA DEVNUM
579: 4945 A9 69 LDA tt.69
589: 4847 85 B9 STA SECADR
599: 4849 29 D5 F3 JSR SENDFNAM
699: 494C A5 BA LDA DEVNUM
619: 494E 29 B4 FF JSR IECTALK
629: 4951 A5 B9 LDA SECADR
639: 4853 28 96 FF JSR SEND SEC
649: 4856 A4 99 LDY ST

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~

9"": 488F C9 3F CMP #63


9"": 4891 F" "4 BE61 DLIST4
91": 4"93 A" "4 LDY #4
92": 4"9~ D8 C3 BNE DLISTl
93": 4"97 2" 42 F6 DLIST4 JSR CLOSEFIL
948: 489A 6" RTS
l3FFD-4"9B

READY.

132
B*
PC SR AC XR YR SP
; 9'FE '2 fIIfII fIIfII fill F6

4f11f11f11 2f11 FD AE JSR .AEFD


4f11f113 2f11 9E B' JSR .B'9E
4f11f116 8A TXA
4f11f11' C9 f113 CMP ...fII3
4f11f119 BfII F2 BCS .3FFD
4f11f11B C9 fIIfII CMP ...fIIfII
4f11f11D FfII fIIF BEQ .4f111E
4f11f11F C9 fill CMP ...flll
4f1111 DfII 16 BNE .4f1129
4f1113 A9 31 LDA ...31
4f11H5 85 FC STA .FC
4f111' A9 f112 LDA ...fII2
4f1119 85 FD STA .FD
4f111B 4C 2D 4f11 JMP .482D
4f111E A9 3f11 LDA ...3f11
4f112f11 85 FC STA .FC
4f1122 A9 f112 LDA ...fII2
4f1124 85 FD STA .FD
4f1126 4C 2D 4f11 JMP .4f112D
4f1129 A9 fill LDA ...flll
4f112B 85 FD STA .FD
4f112D A9 16f11 LDA ...fIIfII
4f112F 85 9f11 STA .9f11
4f1131 A9 24 LDA ...24
4f1133 85 FB STA .FB
4f1135 A9 FB LDA ...FB
4f113' 85 BB STA .BB
4f1139 A9 16f11 LDA ...1616
4f113B 85 BC STA .BC
4f113D A5 FD LDA .FD
4163F 85 B' STA .B'
4f1141 A9
168 LDA ...fII8
41643 BA85 STA .BA
41645 A9
616 LDA ...616
4164' B985 STA SB9
4f1149 216 D5 F3 JSR .F3D5
4f114C A5 BA LDA .BA

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.

The syntax is as follows:

SV.S 16384," name" ,device, 1,start, finish + 1

PAL (C) 1979 BRAD TEMPLETON


2
20: 4000 .OPT P,OO
30: 4S00 *= .4000

~S: 4000 20 FD AE JSR .AEFD


60: 4S03 20 D4 El JSR SEID4
70: 4S06 20 FD AE JSR SAEFD
80: 4009 20 8A AD JSR .AD8A
90: 400C 20 F7 B7 JSR .B7F7
100: 400F A~ 14 LDA .14
110: 4011 48 PHA
120: 4012 A~ 15 LDA .15
130: 4S14 48 PHA
140: 4015 20 FD AE JSR SAEFD
150: 4S18 20 8A AD JSR .AD8A
160: 401B 20 F7 B7 JSR SB7F7
170: 4S1E A6 14 LDX .14
180: 4020 A4 H5 LDY .15
190: 4022 68 PLA
200: 4S23 85 FC STA .FC
210: 4025 68 PLA
220: 4S26 85 FB STA SFB

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

400f1 20 FD AE JSR SAEFD


4f1f13 216 D4 E1 JSR SE1D4
4f1S6 20 FD AE JSR SAEFD
416169 216 8A AD JSR SAD8A
4f1f1C 216 F' B' JSR SB'F'
40f1F A~ 14 LDA S14
41611 48 PHA
4f112 A~ 1~ LDA Sl~
4014 48 PHA
4f11~ 216 FD AE JSR SAEFD
41618 20 8A AD JSR SAD8A
4f11B 20 F' B' JSR SB'F'
4S1E A6 14 LDX S14
416216 A4 13 LDY Sl~
4022 68 PLA
4f123 8~ FC STA SFC
4S2~ 68 PLA
4f126 8~ FB STA SFB
4028 A9 FB LDA ..SFB
4f12A 4C ~F E1 JMP SE1~F

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.

The syntax for M LOAD is as follows:

SYS 16394,"name",device, 1,start address

The syntax for MVERIFY is as follows:

SYS 16384,"name",device,1,start

PAL (C) 1979 BRAD TEMPLETON


2
2": 4""" .OPT P,OO
3": 4"""
28 FD AE MVERIFY
*= S4"""
JSR SAEFD
4": 4"""
S": 4""3 A9 81 LDA 11'.
6": 4""S 8~ 8A STA SA
7": 4""7 4C 11 4" JMP LO
8": 4""A 2" FD AE MLOAD JSR SAEFD
9":
1"":
4""D
4""F
A9 8"
8S 8A
LDA
STA SA
I"
11": 4"11 2" D4 El LO JSR SEID4
12": 4"14 2" FD AE JSR SAEFD
13": 4"17 2" 8A AD JSR SAD8A
14": 4"lA 2" F7 B7 JSR SB7F7
15": 4"lD A5 "A LDA SA
16": 4"lF A6 14 LDX S14
17": 4"21 A4 15 LDY S15
18": 4"23 4C 75 El JMP SE175
]4"""-4"26

READY.

137
B*
PC SR AC XR YR SP
.197FE 72 00 00 01 F6

4000 20 FD AE JSR $AEFD


4003 A9 01 LDA "$01
4005 85 0A STA $0A
4007 4C 11 40 JMP S4011
4B0A 20 FD AE JSR $AEFD
40BD A9 B0 LDA "$0B
40BF 85 BA STA SBA
4B11 20 D4 El JSR $EID4
4014 2B FD AE JSR SAEFD
4017 20 8A AD JSR SAD8A
401A 2B F7 B7 JSR $B7F7
401D A5 0A LDA S0A
4B1F A6 14 LDX $14
4B21 A4 15 LDY $15
4B23 4C 75 El JMP $E175

138
32. Disk
This routine allows you to send a command to the command
channel of the disk drive, e.g. initialise or format.

It replaces the following in Basic:

OPEN15,8,15,"COMMAND"

The syntax is as follows:

SYS 16384,"command"

PAL (C) 1979 BRAD TEMPLETON


2
2": 4""" .OPT P,OO
3": 4""" *= S4"""
SYNTAX SYS16384,
"COMMAND"
6": 4""" CLOSE = SFFC3
7": 4""" OPEN = SFFC"
8": 4""" GETNAME ... SE257
9": 4""" NEXTGJ ... SE2"6
1"": 4""" SETFNA ... SFFBD
11": 4""" SETFPA ... SFFBA
12": 4""" GIVERR = SE"F9
14": 4""" 2" FD AE JSR SAEFD
15": 4""3 A9 "F LDA tU5
16": 4""5 2" C3 FF J.SR CLOSE
17": 4""8 2" 16 4" JSR GETFPAR
18": 4""B 2" ce FF JSR OPEN
19": 4""E B" 1A BCS ERROR
2"": 4"1" A9 "F LDA tU5
21": 4,:112 2" C3 FF JSR CLOSE

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

4000 20 FD AE JSR SAEFD


4003 A9 0F LDA ..S0F
4005 20 C3 FF JSR SFFC3
4008 20 16 40 JSR .4016
400B 20 C0 FF JSR SFFC0
400E B0 1A BCS .402A
4010 A9 0F LDA ...0F
4012 20 C3 FF JSR SFFC3
4015 60 RTS
4016 A9 00 LDA .. S00
4018 20 BD FF JSR SFFBD
401B A9 0F LDA ...0F
401D A8 TAY
401E A2 08 LDX ...08
4020 20 BA FF JSR SFFBA
4023 20 06 E2 JSR SE206
4026 20 57 E2 JSR SE2S7
4029 60 RTS
402A 4C F9 E0 JMP SE0F9

140
33. DERROR
This routine allows you to read the disk error channel in direct
mode or during a program.

It replaces the following BASIC program:

10 OPEN15,8,15
20 INPUT # 15,A$,B$,C$,O$,E$
30 PRINT A$;B$;C$;O$;E$
40 CLOSE15

The syntax is SYS 16384

PAL (C) 1979 BRAD TEMPLETON


2
20: 41600 .OPT P,OO
30: 41600 *= 54000
40:
~0:
41600
41600
ST
DEVNUM .
= $90
SBA
60:
70:
41600
41600
SECADR
IECTALK ..
= SB9
5FFB4
80: 41600 SEND SEC = SFF96
90: 41600 IECINP = 5FFA~
100: 41600 PRINT = SFFD2
110: 41600 UNTALI< = SFFAB
J
;DERROR COMMAND
J
150: 41600 A9 00 LDA #0
160: 41602 85 90 STA ST
170: 41604 A9 08 LDA #8
180: 41606 85 BA STA DEVNUM
190: 41608 20 B4 FF JSR IECTALK
200: 4160B A9 6F LDA #S6F

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

4BBB A9 BB LDA ISBB


4BB2 85 9B STA S9B
4BB4 A9 B8 LDA ISB8
4""6 85 BA STA SBA
4BB8 2" B4 FF JSR SFFB4
4"BB A9 6F LDA IS6F
4"BD 85 B9 STA SB9
4"BF 2" 96 FF JSR SFF96
4B12 A4 9B LDY S9B
4B14 DB BA BNE S4B2"
4B16 2B A5 FF JSR SFFA5
4B19 2B D2 FF JSR SFFD2
4B1C C9 "D CMP IS"D
4B1E DB F2 BNE 54B12
4B2B 2B AB FF JSR SFFAB
4B23 6B RTS

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.

The text to be scrolled across can be a ny length from 1 charac-


ter onwards. The text must end with a $FF (255) byte to tell
the routine to start from the beginning again.

Three parameters are required by the routine: the start location


of the text in memory, the rate of scrolling and the colour of
the text. If for example you wanted one new letter to appear
on the screen once every sixth of a second then the rate would
be 10 (as 10/60 is one sixth).

The syntax is as follows:

SYS 16384,start of text,rate,colour

PAL (C) 1979 BRAD TEMPLETON


2
2m: 4m"" .OPT P,OO
3": 4m"" *= $4"""

5": 4""" 2" FD AE JSR $AEFD

6": 4""3 2" 8A AD JSR $AD8A

7": 4m"6 2" F7 B7 JSR $B7F7

90: 4m"9 A5 14 LDA $14


1m,,: 4""B 85 FB STA $FB

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

140: 4017 20 FD AE JSR SAEFD

150: 401A 20 9E B7 JSR SB79E

160: 401D 8A TXA


170: 401E 8D 95 40 STA TEMP
180: 4021 8D 94 40 STA COUNT
ER
190: 4024 20 FD AE JSR SAEFD

200: 4027 20 9E B7 JSR SB79E

210: 402A 8E 98 40 STX COLOU


R

230: 402D 78 SEI


240: 402E A9 3A LDA .. <MAl
N
250: 4030 8D 14 03 STA 788
260: 4033 A9 40 LDA .. >MAI
N
270: 4035 8D 15 03 STA 789
280: 4038 58 CLI
290: 4039 60 RTS

320: 403A CE 94 40 MAIN DEC COUNT


ER
330: 403D D0 38 BNE FINIS
H

350: 403F AD 95 40 LDA TEMP


360: 4042 8D 94 40 STA COUNT
ER

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

460: 4058 A0 00 LDY #0


470: 405A B1 FB LDA ($FB)
,Y
480: 405C C9 3F CMP #63
481 : 405E B0 03 BCS SUBTR

482: 4060 4C 66 40 JMP PUTON

483: 4063 38 SUBTR SEC


484: 4064 E9 40 SBC #64
500: 4066 8D BF 07 PUTON STA 1983
510: 4069 20 7A 40 JSR INCRE
MENT
520: 406C A5 FC LDA $FC
530: 406E 18 CLC
540: 406F 69 D4 ADC #212
550: 4071 AD 98 40 LDA COLOU
R
560: 4074 8D BF DB STA 1983+
54272

580: 4077 4C 31 EA FINISH JMP $EA31

590: 407A E6 FB INCREMENTINC $FB


600: 407C D0 02 BNE CHECK

610: 407E E6 FC INC $FC

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

670: 4.088 60 RTS


680: 4089 AD 96 40 RESET LDA TEMPF
B
690: 4.08C 85 FB STA .FB
7.00: 4.08E AD 97 4.0 LDA TEMPF
C
710: 4091 85 FC STA .FC
720: 4.093 6.0 RTS
730: 4.094 .0.0 COUNTER .BYT 0
740: 4095 00 TEMP .BYT 0
750: 4096 .0.0 TEMPFB .BYT 0
760: 4.097 0.0 TEMPFC .BYT 0
77.0: 4098 .00 COLOUR .BYT 0
7~0: 4099 48 45 4C .ASC "HELL
0 I AM A CBM 64 MICRO-"
790: 40B3 43 4F 4D .ASC "COMP
UTER AND I AM 64 "
8.00: 40C8 FF .BYT .FF
J40.00-4.0C9

B*
PC SR AC XR YR SP
; 97FE 72 .0.0 .0.0 40 F6

4.0.0.0 2.0 FD AE JSR .AEFD


4.0.03 2.0 8A AD JSR $AD8A
40.06 2.0 F7 B7 JSR .B7F7
4.0.09 A5 14 LDA .14
40.0B 85 FB STA .FB
4.0.0D 8D 96 40 STA $4.096
4.01.0 A5 15 LDA 515
4.012 85 FC STA SFC

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

: 4S94 SS SS SS Sta flJta 4S 45 4C


: 4S9C 4C 4F 2S 49 2ta 41 4D 2ta
: 4taA4 41 2ta 43 42 4D 2ta 36 34
: 4SAC 2ta 4D 49 43 :52 4F 2D 43
: 4taB4 4F 4D 5ta 55 :54 45 52 2S
: 4SBC 41 4E 44 2ta 49 2ta 41 4D
: 4taC4 2ta 36 34 2ta FF AD 37 41

148
35. Flash screen

This routine allows you to flash the screen colour from one colour
to another at a specified rate.

The syntax is as follows:

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.

PAL (C) 1979 BRAD TEMPLETON


2
2B: 4BBB .OPT P,OO
3B: 4BBB *= S4BBB
~YNTAX
SYSFLASH,COLOUR1,
COLOUR2,NO OF
CHANGES A SECOND
5B: 4BflJB 2B FD AE JSR SAEFD
7B: 4BflJ3 2B 8A AD JSR SAD8A
8flJ: 4flJflJ6 2flJ F7 B7 JSR SB7F7
9flJ: 4 flJflJ 9 A5 15 LDA S15
9B: 4BflJB FB B3 BEG! MORE
9B: 4flJBD 4C 48 B2 JMP SB248
IBB: 4flJIB A5 14 MORE LDA S14
IB1: 4flJ12 8D 8E 4B STA TEMP
IflJ2: 4B15 2B FD AE JSR SAEFD
llB: 4flJ18 2B 8A AD JSR SAD8A
12flJ: 4flJIB 2B F7 B7 JSR SB7F7
13flJ: 4flJIE A5 15 LDA S15

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

4"B" 2" FD AE JSR $AEFD


4""3 2" 8A AD JSR $AD8A
4""6 2B F7 B7 JSR SB7F7
4BB9 A5 15 LDA S15
4BBB FB B3 BEG! S4B1B
4BBD 4C 48 B2 JMP SB248
4B1" A5 14 LDA S14
4"12 8D 8E 4" STA S4B8E
4"15 2B FD AE JSR SAEFD
4"18 2B 8A AD JSR SAD8A
4"1B 2B F7 B7 JSR SB7F7
4"1E A5 15 LOA S15
4B2" FB "3 BEG! S4B25
4B22 4C 48 B2 JMP SB248
4B25 A5 14 LDA $14
4"27 8D 8F 4" STA S4"8F
4B2A 2B FD AE JSR SAEFD
4B2D 2B 8A AO JSR SAD8A
4B3B 2B F7 B7 JSR SB7F7
4"33 A5 15 LOA .15
4B35 FB "3 BEG! S4B3A
4B37 4C 48 B2 JMP SB248

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.

The syntax is as follows:

SYS16384,colour1,colour2,rate

Setting the rate to 0 turns off the flash.

PAL (C) 1979 BRAD TEMPLETON


2
20: 4000 .OPT P,OO
30: 4SSS S4S0S *=
SYNTAX
3YSFLASH,COLOUR1,
COLOUR2,NO OF
CHANGES A SECOND
50: 4SSS 2S FD AE JSR SAEFD
70: 4SS3 2S 8A AD JSR SAD8A
80: 4SS6 2S F7 B7 JSR SB7F7
9S: 4S09 A5 15 LDA S15
90: 4SSB FS 03 BEG! MORE
90: 4SSD 4C 48 B2 JMP SB248
100: 4S1S A5 14 MORE LDA S14
101 : 4S12 8D 8E 4S STA TEMP
102: 4S15 2S FD AE JSR SAEFD
l1S: 4018 20 8A AD JSR SAD8A
120: 4S1B 20 F7 B7 JSR SB7F7
130: 4S1E A5 15 LDA S15
140: 4S2S FS 03 BEG! MOREl
15S: 4S22 4C 48 B2 JMP SB248

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

4888 28 FD AE JSR SAEFD


4883 28 8A AD JSR SAD8A
48.96 28 F7 B7 JSR SB7F7
4889 A5 15 LDA SH5
488B F8 83 BEG! $4818
488D 4C 48 B2 JMP $B248
4818 A5 14 LDA $14
4812 8D 8E 48 STA S488E
4"15 28 FD AE JSR SAEFD
4818 28 8A AD JSR $AD8A
481B 28 F7 B7 JSR $B7F7
481E A5 15 LDA $15
4828 F8 83 BEG! $4825
4822 4C 48 B2 JMP $B248
4825 A5 14 LDA $14
4827 8D 8F 48 STA $488F
482A 28 FD AE JSR $AEFD
482D 28 8A AD JSR $AD8A
4838 28 F7 B7 JSR $B7F7
4833 A5 15 LDA $15
4835 F8 83 BEG! $483A
4837 4C 48 B2 JMP $B248
483A A5 14 LDA $14
483C F8 43 BEG! S4881
483E 8D 98 48 STA S4898

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.

The syntax is as follows:

SYS 16384,rate

Setting the rate to 0 turns off the flash.

PAL (C) 1979 BRAD TErrlPLETON


2
20: 4000 .OPT P,OO
30: 4000 *= $4000

;SYNTAX FLASH 1 OR
;0

70: 4000 20 FD AE JSR $AEFD

80: 4003 20 8A AD JSR $AD8A

90: 4006 20 F7 B7 JSR $B7F7

100: 4009 AS 14 LDA $14


110: 400B F0 13 BEG! RESET

120: 400D 8D 67 40 STA TEMP


120: 4010 8D 68 40 STA TEMP+
1
130: 4013 78 SEl
140: 4014 A9 2D LDA .. <MAl
N

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

320: 4035 AD 67 40 MORE LDA TEMP


330: 4.038 8D 68 40 STA TEMP+
1

; INVERT CHARACTERS

370: 403B A2 00 LDX H0


380: 403D BD 00 04 LOOP LDA 1024,
X
390: 4040 18 CLC
400: 4041 69 80 ADC H128
410: 4043 9D 00 04 STA 1024,
X

430: 4046 BD FF 04 LDA 1024+


255,X
440: 4049 18 CLC
450: 404A 69 80 ADC H128
460: 404C 9D FF 04 STA 1024+
255,X

480: 404F BD FE 05 LDA 1024+

158
255+255, X
490: 4052 18 CLC
500: 4053 69 80 ADC #128
510: 4055 9D FE 05 STA 1024+
255+255, X

530: 4058 BD FD 06 LDA 1024+


255+255+255,X
540: 405B 18 CLC
550: 405C 69 80 ADC #128
560: 405E 9D FD 06 STA 1024+
255+255+255,X
570: 4061 E8 INX
580: 4062 D0 D9 BNE LOOP
590: 4064 4C 31 EA JMP SEA31

600: 4067 TEMP = it-


]4000-4067

READY.

B*
PC SR AC XR YR SP
.197FE 72 1616 f6flJ 416 F6

4flJflJf6 216 FD AE JSR $AEFD


4f6flJ3 216 8A AD JSR SAD8A
4flJflJ6 2flJ F7 B7 JSR $B7F7
40flJ9 A5 14 LDA S14
4f6flJB FflJ 13 BE6I S4flJ2flJ
4f6flJD 8D 67 4flJ STA S4flJ67
4flJlflJ 8D 68 4flJ STA S4flJ68
41613 78 SEI
41614 A9 2D LDA #S2D
4flJ16 8D 14 flJ3 STA SflJ314
4flJ19 A9 4flJ LDA ttS4flJ
4flJIB 8D 15 flJ3 STA SflJ315
4flJIE 58 eLI

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.

The syntax is as follows:

SYS 16384,colourl,colour2,rate

A rate of zero turns off the flash.

PAL IC) 1979 BRAD TEMPLETON


2
20: 4000 .OPT P,OO
3": 400" *= S40"0

; SYNTAX
SYSFLASH,COLOURI
,COLOUR2,NO OF
CHANGES A SECOND

80: 4000 20 FD AE .JSR SAEFD

90: 4003 20 8A AD .JSR SAD8A

100: 4006 20 F7 B7 .JSR SB7F7

110: 4009 A5 15 LDA S15


110: 400B F0 03 BEQ MORE
110: 400D 4C 48 B2 .JMP SB248

120: 4010 A5 14 MORE LDA S14


130: 4012 aD A5 40 STA TEMP
140: 4015 20 FD AE .JSR SAEFD

161
15": 4"18 2" 8A AD JSR $AD8A

16": 4"lB 2" F7 B7 JSR $B7F7

17": 4"lE A5 15 LDA $15


18": 4"2m F" m3 BEQ MOREl

19": 4m22 4C 48 B2 JMP $B248

2"": 4m25 A5 14 MOREl LDA $14


21": 4"27 8D A6 4" STA TEMP+
1
22m: 4"2A 2m FD AE JSR $AEFD

23": 4m2D 2" 8A AD JSR $AD8A

24": 4m3m 2" F7 B7 JSR $B7F7

25": 4m33 A5 15 LDA $15


26": 4m35 Fm "3 BEQ MORE2

27m: 4m37 4C 48 B2 JMP $B248

28": 4m3A A5 14 MORE2 LDA $14


28": 4m3C Fm 59 BEQ RESET

29m: 4"3E 8D A7 4" STA TEMP+


2
29": 4"41 78 SEI
3"": 4.042 A9 54 LDA #<MAI
N
31": 4.044 8D 14 m3 STA 788
32.0: 4.047 A9 4m LDA #>MAI
N
33": 4"49 8D 15 m3 STA 789
34.0: 4m4C 58 CLI
35m: 4.04D AD A7 4" LDA TEMP+
2
35": 4.05.0 8D A8 4" STA TEMP+
3
36": 4.053 6.0 RTS

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

410: 405C CD A6 40 CMP TEMP+


1
42": 405F F0 12 BEG! D00

440: 4061 AD A6 40 LDA TEMP+


1
450: 4.064 8D A4 40 STA STORE

460: 4.067 20 85 40 JSR FILL


470: 4.06A AD A7 40 LDA TEMP+
2
480: 4.06D 8D A8 40 STA TEMP+
3
490: 4.070 4C 82 40 JMP FINIS
H

510: 4.073 AD A5 40 D00 LDA TEMP


520: 4.076 8D A4 40 STA STORE

530: 4.079 20 85 40 JSR FILL


540: 4.07C AD A7 40 LDA TEMP+
2
550: 4.07F 8D A8 40 STA TEMP+
3

570: 4082 4C 31 EA FINISH JMP $EA31

590: 4S85 A2 00 FILL LDX tt0


600: 4S87 9D 00 D8 LOOP STA 55296
,X
610: 4S8A 9D FF D8 STA 55296
+255,X
620: 4S8D 9D FE D9 STA 55296

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

69.0: 4.097 78 RESET SEI


7.0.0: 4.098 A9 31 LDA #49
71.0: 4.09A 8D 14 .03 STA 788
72.0: 4.09D A9 EA LDA #234
73.0: 4.09F 8D 15 .03 STA 789
74.0: 4.0A2 58 eLI
75.0: 4.0A3 6.0 RTS
76.0: 4.0A4 .0.0 STORE .BYT .0
77.0: 4.0A5 TEMP =
14.0.0.0-4.0A5 *
READY.

B*
PC SR AC XR YR SP
,97FE 72 flJta flJta 4ta F6

4flJ.0flJ 28 FD AE JSR SAEFD


4883 2flJ 8A AD JSR SAD8A
4886 2flJ F7 B7 JSR SB7F7
4889 A5 15 LDA S15
48flJB F8 flJ3 BEG! S4.018
488D 4C 48 B2 JMP SB248
4818 A5 14 LDA S14
4812 8D A5 48 STA S48A5
4815 28 FD AE JSR SAEFD
4818 28 8A AD JSR SAD8A
481B 28 F7 B7 JSR SB7F7
481E A5 15 LDA S15
482ta F8 83 BEG! S4825

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.

The syntax is as follows:

SYS960,X, Y, "text"

X is the column to start at and is between 0 and 39. Y is the


row to start at and is between 0 and 24. The text can be text
in quotes, strings, numbers, variables or any other legal print
statement.

PAL (C)1979 BRAD TEMPLETON


2
2.0: ,03C,0 .OPT P,OO
3.0: ,03C,0
;
*- 96.0

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

S3C0 20 FD AE JSR SAEFD


03C3 20 9E B7 JSR SB79E
03C6 8A lXA
03C7 48 PHA
03C8 20 FD AE JSR SAEFD
03CB 20 9E B7 JSR SB79E
03CE 8A lXA
03CF A8 lAY
03D0 68 PLA
03D! AA lAX
03D2 18 CLC
03D3 20 F0 FF JSR SFFF0
03D6 20 FD AE JSR SAEFD
03D9 4C A0 AA JMP SAAA0
03DC 00 BRK

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.

The syntax is as follows:

SYS 16384, line for change, option

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.

PAL (C) 1979 BRAD TEMPLETON


2
20: 4000 .OPT P,OO
30: 4000 *= .4000
;
;RASTER TO ALLOW SPLIT
;SCREENS
; SYNTAX

;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

150: 4009 A5 15 LDA .15


160: 400B D0 2B BNE I GlERR
170: 400D A5 14 LDA .14
180: 400F D0 03 BNE MOR
180: 4011 4C A5 40 JMP RESET

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

250: 401F 20 FD AE JSR 'AEFD


260: 4022 20 8A AD JSR .AD8A
270: 4025 20 F7 B7 JSR .B7F7
280: 4028 A5 15 LDA .15
290: 402A D0 0C BNE IGiERR
300: 402C A5 14 LDA .14
310: 402E C9 02 CMP tt2
320: 4030 B0 06 BCS IG!ERR
330: 4032 8D FF 40 STA TEMP+l
340: 4035 4C 3B 40 JMP MORE
350: 4038 4C 48 B2 IG!ERR JMP .B248
360: 403B AD FE 40 MORE LDA TEMP
370: 403E 8D F8 40 STA RASTER
380: 4041 AD FF 40 LDA TEMP+l
390: 4044 C9 01 CMP ttl
400: 42146 F0 17 BEG! TEXTTOP
410: 4048 A9 0S LDA tt8
410: 404A A2 15 LDX tt21
420: 404C SD FA 40 STA TEXT
420: 404F 8E FB 40 STX TEXT+l
430: 4052 A9 3B LDA tt59
430: 4054 A2 IB LDX tt27
440: 4056 8D FC 40 STA HIRES
440: 4059 8E FD 40 STX HIRES+l
450: 405C 4C 73 40 JMP SETUP
460: 4"5F A9 15 TEXT TOP LDA tt21
460: 4061 A2 0S LDX tts
470: 4063 8D FA 40 STA TEXT
470: 4066 8E FB 40 STX TEXT+l
4S0: 4069 A9 IB LDA tt27
4S0: 406B A2 3B LDX tt59
490: 406D 8D FC 40 STA HIRES
490: 4070 8E FD 40 STX HIRES+l
;
510: 4073 SETUP = *
170
529: 4973 78 SEI
539: 4974 A9 7F LDA .. S7F
549: 4976 8D 9D DC STA SDC9D
559: 4"79 A9 91 LDA ..S91
569: 497B 8D lA D9 STA SD91A
579: 497E A9 92 LDA ...92
589: 4989 85 FB STA SFB
599: 4982 AD F8 49 LDA RASTER
699: 4985 8D 12 D9 STA SD912
619: 4988 A9 18 LDA ... 18
629: 498A 8D 11 D9 STA SD911
639: 498D AD 14 93 LDA S9314
649: 4999 8D F6 49 STA FIN-2
659: 4993 AD 15 93 LDA S9315
669: 4996 8D F7 49 STA FIN-l
679: 4999 A9 C6 LDA .. <MAIN
689: 499B 8D 14 93 STA 788
699: 499E A9 49 LDA .. >MAIN
799: 49A9 8D 15 93 STA 789
719: 49A3 58 CLI
729: 49A4 69 RTS
739: 49A5 78 RESET SEI
739: 49A6 A9 31 LDA .. 49
749: 49A8 8D 14 93 STA 788
759: 49AB A9 EA LDA .. 234
759: 49AD 8D 15 93 STA 789
769: 49B9 A9 15 LDA .. 21
769: 49B2 8D 18 D9 STA 53272
779: 49B5 A9 lB LDA .. 27
779: 49B7 8D 11 D9 STA 53265
789: 49BA A9 99 LDA ..9
789: 49BC 8D lA D9 STA .D91A
799: 49BF A9 89 LDA .. 128
799: 49Cl 8D 9D DC STA 56333
899: 4BC4 58 CLI
899: 49C5 69 RTS
819: 4BC6 AD 19 DB MAIN LDA SD919
829: 4BC9 8D 19 DB STA SD919
839: 49CC 29 91 AND ..S91
849: 49CE F9 IF BEG! LOOP
859: 49D9 C6 FB DEC SFB

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.

4000 2" FD AE JSR SAEFD


40"3 2" 8A AD JSR $AD8A
4"06 2" F' B' JSR $B'F'
4""9 A5 15 LDA S15
4""B D0 2B BNE 54"38
400D AS 14 LDA $14
400F D" 03 BNE $4014
4011 4C A5 40 JMP 54"A5
4014 C9 31 CMP #531

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.

We publish many other books and


cassettes, including Exploring
Adventures on the 64, Advanced Basic
& Machine Code for the 64 and
Impossible Routines for the 64.

Write in for a catalogue


DUCKWORTH
The Old Piano Factory
43 Gloucester Crescent
LondonNWl
Telephone: 01 485 3484

Potrebbero piacerti anche