!!!Greed
General Information
Author: Carsten Strotmann, Winfried Piegsda \\
Language: C \\
Compiler/Interpreter: CC65 \\
Published: ABBUC 2004 \\
Download: [Greed/agreed2.atr]
Title Tune: [Greed/greed.mp3] [Greed/greed.mid.mov]
!!! Atari Greed
Atari Greed scored 6th place at the 2004 ABBUC Software contest
[{Image src='agreed1.jpeg' width='..' height='..' align='left|center|right' style='..' class='..' }]
[{Image src='agreed2.jpeg' width='..' height='..' align='left|center|right' style='..' class='..' }]
%%tabbedSection
%%tab-english
! Instructions
ATARI Greed
based on the UNIX game "Greed"
by Matthew T. Day and Eric S. Raymond.
Written for the 2004 ABBUC Software contest by Winfried Piegsda and Carsten Strotmann.
Goal:
Numbers from 1 t 9 will be shown in an area of 38 x 18 fields. The round spot is the pawn in the game. The player
must try to collect as many numbers as possible before running out of moves. For every field moved the score will increase by one.
The pawn can be moved by Joystick or Keyboard in six directions. The range of the move will be calculated by the
first number to be collected. All possible moves can be displayed by pressing the 'P' key.
There is a time running out for each level. To enter the next level, a predefinded amount (percentage) of the area must be
cleaned. The remaining percentage will be displayed in the lower right corner near the score and highscore.
Will the level treshold overshoot a bonus will be added to the score.
The menu can be displayed with the 'ESC' Key.
have fun with Atari Greed
Winfried Piegsda and
Carsten Strotmann
/%
%%tab-german
! Anleitung
ATARI Greed
basierend auf dem UNIX Spiel "Greed"
von Matthew T. Day und Eric S. Raymond.
Programmiert fuer den ABBUC Programmier-
wettbewerb 2004 von Winfried Piegsda
und Carsten Strotmann.
Ziel des Spiels:
Auf einer Flaeche von maximal 38 x 18
Zellen werden Zahlen von 1 bis 9 dargestellt.
Ein runder Ball in dieser Flaeche stellt die
Spielfigur da. Der Spieler muss versuchen
moeglichst viel Punkte zu sammeln, den dem er
Felder ueberquert und loescht. Fuer jedes
geloeschte Feld wird die Punktzahl erhoeht.
Mit dem Joystick oder der Tastatur kann die
Spielfigur in sechs Richtungen bewegt werden.
Die Schreittweite in jede Richtung wird durch
die direkt an die Spielfigur angrenzende Zahl
bestimmt. Die moeglichen Zuege koennen mit der
Vorschaufunktion (p - Preview) angezeigt werden.
Fuer jeden Level stehen eine bestimmte Zeit in
Minuten zur Verfuegung. Um in einen neuen Level
zu wechseln, muss die Mindestanzahl an Feldern
abgeraumt werden. Die Prozentzahl der noch zu
loeschenden Felder wird in der Statuszeile rechts
neben den Punkten und der Hoechstpunktzahl an-
gezeigt.
Wir diese Prozentzahl untersschritten so wird ein
Bonus am Ende des Levels auf die Punktzahl addiert.
Mit der 'ESC' Taste kann das Menue aufgerufen
werden.
Viel Spass mit Atari Greed wuenschen
Winfried Piegsda
Carsten Strotmann
/%
/%
1.1 Make Scripts
{{{
export CC65_LIB=~/develop/cc65/libsrc
export CC65_INC=~/develop/cc65/include
cl65 -l -O --add-source -m agreed.map -t atari agreed.c dli1.s
cp agreed ~/atari/Atari800MacX/Harddrive1/agreed.com
}}}
{{{
export CC65_LIB=~/develop/cc65/libsrc
export CC65_INC=~/develop/cc65/include
ca65 -t none level00.s
cl65 -t none level00.o -o ~/atari/Atari800MacX/Harddrive1/level00.agl
ca65 -t none level01.s
cl65 -t none level01.o -o ~/atari/Atari800MacX/Harddrive1/level01.agl
ca65 -t none level02.s
cl65 -t none level02.o -o ~/atari/Atari800MacX/Harddrive1/level02.agl
ca65 -t none level03.s
cl65 -t none level03.o -o ~/atari/Atari800MacX/Harddrive1/level03.agl
ca65 -t none level04.s
cl65 -t none level04.o -o ~/atari/Atari800MacX/Harddrive1/level04.agl
ca65 -t none level05.s
cl65 -t none level05.o -o ~/atari/Atari800MacX/Harddrive1/level05.agl
ca65 -t none level06.s
cl65 -t none level06.o -o ~/atari/Atari800MacX/Harddrive1/level06.agl
ca65 -t none level07.s
cl65 -t none level07.o -o ~/atari/Atari800MacX/Harddrive1/level07.agl
ca65 -t none level08.s
cl65 -t none level08.o -o ~/atari/Atari800MacX/Harddrive1/level08.agl
ca65 -t none level09.s
cl65 -t none level09.o -o ~/atari/Atari800MacX/Harddrive1/level09.agl
}}}
{{{
Modules list:
-------------
atari.o:
CODE Offs = 000000 Size = 00008F
BSS Offs = 000000 Size = 000004
DATA Offs = 000000 Size = 00001A
EXEHDR Offs = 000000 Size = 000006
AUTOSTRT Offs = 000000 Size = 000006
agreed.o:
CODE Offs = 00008F Size = 002534
RODATA Offs = 000000 Size = 0004DD
BSS Offs = 000004 Size = 0003A8
DATA Offs = 00001A Size = 00010D
dli1.o:
CODE Offs = 0025C3 Size = 000C1F
/Users/cas/develop/cc65/libsrc/atari.lib(cgetc.o):
CODE Offs = 0031E2 Size = 000051
/Users/cas/develop/cc65/libsrc/atari.lib(clock.o):
CODE Offs = 003233 Size = 000023
/Users/cas/develop/cc65/libsrc/atari.lib(close.o):
CODE Offs = 003256 Size = 00001E
/Users/cas/develop/cc65/libsrc/atari.lib(ctype.o):
RODATA Offs = 0004DD Size = 000100
/Users/cas/develop/cc65/libsrc/atari.lib(fdtable.o):
CODE Offs = 003274 Size = 0001BA
BSS Offs = 0003AC Size = 000006
/Users/cas/develop/cc65/libsrc/atari.lib(getfd.o):
CODE Offs = 00342E Size = 000029
DATA Offs = 000127 Size = 00002C
/Users/cas/develop/cc65/libsrc/atari.lib(graphics.o):
CODE Offs = 003457 Size = 000081
RODATA Offs = 0005DD Size = 000043
/Users/cas/develop/cc65/libsrc/atari.lib(graphuse.o):
DATA Offs = 000153 Size = 000001
/Users/cas/develop/cc65/libsrc/atari.lib(mul40.o):
CODE Offs = 0034D8 Size = 000020
BSS Offs = 0003B2 Size = 000001
/Users/cas/develop/cc65/libsrc/atari.lib(open.o):
CODE Offs = 0034F8 Size = 0000B7
/Users/cas/develop/cc65/libsrc/atari.lib(read.o):
CODE Offs = 0035AF Size = 00002C
/Users/cas/develop/cc65/libsrc/atari.lib(rwcommon.o):
CODE Offs = 0035DB Size = 000056
/Users/cas/develop/cc65/libsrc/atari.lib(ucase_fn.o):
CODE Offs = 003631 Size = 000061
/Users/cas/develop/cc65/libsrc/atari.lib(write.o):
CODE Offs = 003692 Size = 000028
/Users/cas/develop/cc65/libsrc/atari.lib(_fdesc.o):
CODE Offs = 0036BA Size = 00001C
/Users/cas/develop/cc65/libsrc/atari.lib(_file.o):
DATA Offs = 000154 Size = 000016
/Users/cas/develop/cc65/libsrc/atari.lib(_fopen.o):
CODE Offs = 0036D6 Size = 000080
BSS Offs = 0003B3 Size = 000002
/Users/cas/develop/cc65/libsrc/atari.lib(_hextab.o):
RODATA Offs = 000620 Size = 000010
/Users/cas/develop/cc65/libsrc/atari.lib(_oserror.o):
BSS Offs = 0003B5 Size = 000001
/Users/cas/develop/cc65/libsrc/atari.lib(_printf.o):
CODE Offs = 003756 Size = 0003A1
BSS Offs = 0003B6 Size = 00002B
DATA Offs = 00016A Size = 000003
/Users/cas/develop/cc65/libsrc/atari.lib(errno.o):
BSS Offs = 0003E1 Size = 000002
/Users/cas/develop/cc65/libsrc/atari.lib(fclose.o):
CODE Offs = 003AF7 Size = 000026
/Users/cas/develop/cc65/libsrc/atari.lib(fopen.o):
CODE Offs = 003B1D Size = 00001D
/Users/cas/develop/cc65/libsrc/atari.lib(fread.o):
CODE Offs = 003B3A Size = 000092
BSS Offs = 0003E3 Size = 000002
/Users/cas/develop/cc65/libsrc/atari.lib(fwrite.o):
CODE Offs = 003BCC Size = 000082
BSS Offs = 0003E5 Size = 000002
/Users/cas/develop/cc65/libsrc/atari.lib(ltoa.o):
CODE Offs = 003C4E Size = 0000AF
RODATA Offs = 000630 Size = 00000C
/Users/cas/develop/cc65/libsrc/atari.lib(memcpy.o):
CODE Offs = 003CFD Size = 00003A
/Users/cas/develop/cc65/libsrc/atari.lib(memmove.o):
CODE Offs = 003D37 Size = 00003C
/Users/cas/develop/cc65/libsrc/atari.lib(memset.o):
CODE Offs = 003D73 Size = 00003F
/Users/cas/develop/cc65/libsrc/atari.lib(rand.o):
CODE Offs = 003DB2 Size = 00004C
DATA Offs = 00016D Size = 000004
/Users/cas/develop/cc65/libsrc/atari.lib(sprintf.o):
CODE Offs = 003DFE Size = 00002B
BSS Offs = 0003E7 Size = 000001
/Users/cas/develop/cc65/libsrc/atari.lib(strlen.o):
CODE Offs = 003E29 Size = 000016
/Users/cas/develop/cc65/libsrc/atari.lib(strlower.o):
CODE Offs = 003E3F Size = 000028
/Users/cas/develop/cc65/libsrc/atari.lib(strupper.o):
CODE Offs = 003E67 Size = 000028
/Users/cas/develop/cc65/libsrc/atari.lib(vsprintf.o):
CODE Offs = 003E8F Size = 000076
DATA Offs = 000171 Size = 000008
/Users/cas/develop/cc65/libsrc/atari.lib(zerobss.o):
CODE Offs = 003F05 Size = 000023
/Users/cas/develop/cc65/libsrc/atari.lib(add.o):
CODE Offs = 003F28 Size = 00001A
/Users/cas/develop/cc65/libsrc/atari.lib(addeqsp.o):
CODE Offs = 003F42 Size = 000011
/Users/cas/develop/cc65/libsrc/atari.lib(addysp.o):
CODE Offs = 003F53 Size = 00000E
/Users/cas/develop/cc65/libsrc/atari.lib(and.o):
CODE Offs = 003F61 Size = 000010
/Users/cas/develop/cc65/libsrc/atari.lib(aslax3.o):
CODE Offs = 003F71 Size = 00000E
/Users/cas/develop/cc65/libsrc/atari.lib(axlong.o):
CODE Offs = 003F7F Size = 000012
/Users/cas/develop/cc65/libsrc/atari.lib(bneg.o):
CODE Offs = 003F91 Size = 00000E
/Users/cas/develop/cc65/libsrc/atari.lib(callmain.o):
CODE Offs = 003F9F Size = 000017
BSS Offs = 0003E8 Size = 000004
/Users/cas/develop/cc65/libsrc/atari.lib(condes.o):
CODE Offs = 003FB6 Size = 000038
BSS Offs = 0003EC Size = 000001
DATA Offs = 000179 Size = 000007
/Users/cas/develop/cc65/libsrc/atari.lib(decax1.o):
CODE Offs = 003FEE Size = 000007
/Users/cas/develop/cc65/libsrc/atari.lib(decsp1.o):
CODE Offs = 003FF5 Size = 000009
/Users/cas/develop/cc65/libsrc/atari.lib(decsp2.o):
CODE Offs = 003FFE Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(decsp3.o):
CODE Offs = 00400B Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(decsp4.o):
CODE Offs = 004018 Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(decsp5.o):
CODE Offs = 004025 Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(decsp6.o):
CODE Offs = 004032 Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(decsp8.o):
CODE Offs = 00403F Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(div.o):
CODE Offs = 00404C Size = 000018
/Users/cas/develop/cc65/libsrc/atari.lib(enter.o):
CODE Offs = 004064 Size = 00000E
/Users/cas/develop/cc65/libsrc/atari.lib(ge.o):
CODE Offs = 004072 Size = 00000A
/Users/cas/develop/cc65/libsrc/atari.lib(icmp.o):
CODE Offs = 00407C Size = 00002C
/Users/cas/develop/cc65/libsrc/atari.lib(incax1.o):
CODE Offs = 0040A8 Size = 000007
/Users/cas/develop/cc65/libsrc/atari.lib(incax2.o):
CODE Offs = 0040AF Size = 000007
/Users/cas/develop/cc65/libsrc/atari.lib(incax3.o):
CODE Offs = 0040B6 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incax5.o):
CODE Offs = 0040BB Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incax6.o):
CODE Offs = 0040C0 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incax7.o):
CODE Offs = 0040C5 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incaxy.o):
CODE Offs = 0040CA Size = 00000B
/Users/cas/develop/cc65/libsrc/atari.lib(incsp1.o):
CODE Offs = 0040D5 Size = 000007
/Users/cas/develop/cc65/libsrc/atari.lib(incsp2.o):
CODE Offs = 0040DC Size = 000016
/Users/cas/develop/cc65/libsrc/atari.lib(incsp3.o):
CODE Offs = 0040F2 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incsp4.o):
CODE Offs = 0040F7 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incsp5.o):
CODE Offs = 0040FC Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incsp6.o):
CODE Offs = 004101 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incsp7.o):
CODE Offs = 004106 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(incsp8.o):
CODE Offs = 00410B Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(ldaxi.o):
CODE Offs = 004110 Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(ldaxsp.o):
CODE Offs = 00411D Size = 000009
/Users/cas/develop/cc65/libsrc/atari.lib(leasp.o):
CODE Offs = 004126 Size = 000009
/Users/cas/develop/cc65/libsrc/atari.lib(leave.o):
CODE Offs = 00412F Size = 00001D
/Users/cas/develop/cc65/libsrc/atari.lib(lpush.o):
CODE Offs = 00414C Size = 00001E
/Users/cas/develop/cc65/libsrc/atari.lib(lsub.o):
CODE Offs = 00416A Size = 000021
/Users/cas/develop/cc65/libsrc/atari.lib(lt.o):
CODE Offs = 00418B Size = 00000A
/Users/cas/develop/cc65/libsrc/atari.lib(ludiv.o):
CODE Offs = 004195 Size = 000074
/Users/cas/develop/cc65/libsrc/atari.lib(makebool.o):
CODE Offs = 004209 Size = 000031
/Users/cas/develop/cc65/libsrc/atari.lib(mod.o):
CODE Offs = 00423A Size = 000014
/Users/cas/develop/cc65/libsrc/atari.lib(mul.o):
CODE Offs = 00424E Size = 00002C
/Users/cas/develop/cc65/libsrc/atari.lib(mulax5.o):
CODE Offs = 00427A Size = 000014
/Users/cas/develop/cc65/libsrc/atari.lib(mulax7.o):
CODE Offs = 00428E Size = 000019
/Users/cas/develop/cc65/libsrc/atari.lib(neg.o):
CODE Offs = 0042A7 Size = 00000E
/Users/cas/develop/cc65/libsrc/atari.lib(popsreg.o):
CODE Offs = 0042B5 Size = 000010
/Users/cas/develop/cc65/libsrc/atari.lib(push1.o):
CODE Offs = 0042C5 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(push2.o):
CODE Offs = 0042CA Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(push3.o):
CODE Offs = 0042CF Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(push6.o):
CODE Offs = 0042D4 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(push7.o):
CODE Offs = 0042D9 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(pusha.o):
CODE Offs = 0042DE Size = 000016
/Users/cas/develop/cc65/libsrc/atari.lib(pushaff.o):
CODE Offs = 0042F4 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(pushax.o):
CODE Offs = 0042F9 Size = 00001A
/Users/cas/develop/cc65/libsrc/atari.lib(pushc0.o):
CODE Offs = 004313 Size = 000005
/Users/cas/develop/cc65/libsrc/atari.lib(pushw.o):
CODE Offs = 004318 Size = 00000F
/Users/cas/develop/cc65/libsrc/atari.lib(pushwsp.o):
CODE Offs = 004327 Size = 00001C
/Users/cas/develop/cc65/libsrc/atari.lib(return0.o):
CODE Offs = 004343 Size = 000004
/Users/cas/develop/cc65/libsrc/atari.lib(shelp.o):
CODE Offs = 004347 Size = 00001E
/Users/cas/develop/cc65/libsrc/atari.lib(shl.o):
CODE Offs = 004365 Size = 000036
/Users/cas/develop/cc65/libsrc/atari.lib(shrax1.o):
CODE Offs = 00439B Size = 000008
/Users/cas/develop/cc65/libsrc/atari.lib(staspidx.o):
CODE Offs = 0043A3 Size = 000016
/Users/cas/develop/cc65/libsrc/atari.lib(staxsp.o):
CODE Offs = 0043B9 Size = 00000B
/Users/cas/develop/cc65/libsrc/atari.lib(staxspi.o):
CODE Offs = 0043C4 Size = 00001B
/Users/cas/develop/cc65/libsrc/atari.lib(sub.o):
CODE Offs = 0043DF Size = 000015
/Users/cas/develop/cc65/libsrc/atari.lib(subeqsp.o):
CODE Offs = 0043F4 Size = 000015
/Users/cas/develop/cc65/libsrc/atari.lib(subysp.o):
CODE Offs = 004409 Size = 00000D
/Users/cas/develop/cc65/libsrc/atari.lib(toslong.o):
CODE Offs = 004416 Size = 000038
/Users/cas/develop/cc65/libsrc/atari.lib(udiv.o):
CODE Offs = 00444E Size = 000036
/Users/cas/develop/cc65/libsrc/atari.lib(umod.o):
CODE Offs = 004484 Size = 000011
/Users/cas/develop/cc65/libsrc/atari.lib(zeropage.o):
ZEROPAGE Offs = 000000 Size = 00001A
/Users/cas/develop/cc65/libsrc/atari.lib(_cursor.o):
BSS Offs = 0003ED Size = 000001
Segment list:
-------------
Name Start End Size
--------------------------------------------
EXEHDR 000000 000005 000006
ZEROPAGE 000082 00009B 00001A
CODE 002E00 007294 004495
RODATA 007295 0078D6 000642
DATA 0078D7 007A56 000180
BSS 007A57 007E44 0003EE
AUTOSTRT 007E45 007E4A 000006
Exports list:
-------------
__BSS_LOAD__ 007A57 RLA __BSS_RUN__ 007A57 RLA
__BSS_SIZE__ 0003EE REA __CODE_LOAD__ 002E00 RLA
__CONSTRUCTOR_COUNT__ 000002 REA __CONSTRUCTOR_TABLE__ 0078D1 RLA
__DESTRUCTOR_COUNT__ 000001 REA __DESTRUCTOR_TABLE__ 0078D5 RLA
__clocks_per_sec 006046 RLA __ctype 007772 RLA
__do_oserror 006419 RLA __errno 007E38 RLA
__fdesc 0064BA RLA __filetab 007A2B RLA
__fopen 0064D6 RLA __graphmode_used 007A2A RLA
__hextab 0078B5 RLA __inviocb 006427 RLA
__oserror 007E0C RLA __printf 006649 RLA
__rwsetup 0063DB RLA __seterrno 006420 RLA
_cgetc 005FE2 RLA _clock 006033 RLA
_close 006056 RLA _dli01 005E44 RLA
_exit 002E5B RLA _fclose 0068F7 RLA
_fnt14 005743 RLA _fnt7 0053C3 RLA
_fopen 00691D RLA _fread 00693A RLA
_fwrite 0069CC RLA _graphics 006257 RLA
_ltoa 006A6A RLA _main 0051C8 RLA
_memcpy 006AFD RLA _memmove 006B37 RLA
_memset 006B7B RLA _menuflg 005E43 RLA
_open 0062F8 RLA _rand 006BB2 RLA
_read 0063AF RLA _sprintf 006BFE RLA
_srand 006BEF RLA _strlen 006C29 RLA
_strlower 006C3F RLA _strupr 006C67 RLA
_ultoa 006AC1 RLA _vsprintf 006CC6 RLA
_write 006492 RLA addeq0sp 006D42 RLA
addeqysp 006D44 RLA addysp 006D54 RLA
addysp1 006D53 RLA aslax3 006D71 RLA
axlong 006D86 RLA axulong 006D7F RLA
bnegax 006D91 RLA boolge 00701F RLA
boollt 007017 RLA booluge 00702F RLA
callmain 006D9F RLA closeallfiles 0063A0 LAI
clriocb 0060BB RLA cursor 007E44 RLA
decax1 006DEE RLA decsp1 006DF5 RLA
decsp2 006DFE RLA decsp3 006E0B RLA
decsp4 006E18 RLA decsp5 006E25 RLA
decsp6 006E32 RLA decsp8 006E3F RLA
donelib 006DBF RLA enter 006E64 RLA
fd_index 0079FE RLA fd_table 007A0A RLA
fddecusage 0060FC RLA fdt_to_fdi 00622E RLA
fdtoiocb 0060C8 RLA fdtoiocb_down 006074 RLA
findfreeiocb 0060E7 RLA getfd 006245 RLA
incax1 006EA8 RLA incax2 006EAF RLA
incax3 006EB6 RLA incax4 006ECA RLA
incax5 006EBB RLA incax6 006EC0 RLA
incax7 006EC5 RLA incaxy 006ECC RLA
incsp1 006ED5 RLA incsp2 006EE4 RLA
incsp3 006EF2 RLA incsp4 006EF7 RLA
incsp5 006EFC RLA incsp6 006F01 RLA
incsp7 006F06 RLA incsp8 006F0B RLA
initlib 006DB6 RLA initscrmem 0062BD LAI
initsp 002E86 LAI ldax0sp 006F1D RLA
ldaxi 006F10 RLA ldaxysp 006F1F RLA
leaasp 006F26 RLA leave 006F3C RLA
leavey 006F39 RLA memcpy_getparams 006B1D RLA
memcpy_upwards 006B00 RLA mul40 0062D8 RLA
mulax5 00707A RLA mulax7 00708E RLA
negax 0070A7 RLA newfd 00612A RLA
popax 006EDC RLA popsargs 007147 RLA
popsreg 0070B5 RLA ptr1 00008A RLZ
ptr2 00008C RLZ ptr3 00008E RLZ
ptr4 000090 RLZ push0 0070F9 RLA
push1 0070C5 RLA push2 0070CA RLA
push3 0070CF RLA push6 0070D4 RLA
push7 0070D9 RLA pusha 0070E2 RLA
pusha0 0070FB RLA pushaFF 0070F4 RLA
pushax 0070FD RLA pushc0 007113 RLA
pusheax 006F52 RLA pushw 007118 RLA
pushw0sp 007127 RLA pushwysp 007129 RLA
regbank 000096 RLZ regsave 000086 RLZ
return0 007143 RLA shlax3 006D71 RLA
shrax1 00719B RLA sp 000082 RLZ
sreg 000084 RLZ staspidx 0071A3 RLA
stax0sp 0071B9 RLA staxspidx 0071C4 RLA
staxysp 0071BB RLA subeqysp 0071F6 RLA
subysp 007209 RLA tmp1 000092 RLZ
tmp2 000093 RLZ tmp3 000094 RLZ
tmp4 000095 RLZ tosadda0 006D28 RLA
tosaddax 006D2A RLA tosandax 006D63 RLA
tosaslax 007167 RLA tosdiva0 006E4C RLA
tosgea0 006E74 RLA tosicmp 006E7C RLA
toslong 007234 RLA toslta0 006F8D RLA
tosmoda0 00703A RLA tosmula0 00704E RLA
tosmulax 007050 RLA tossuba0 0071DF RLA
tossubax 0071E1 RLA tossubeax 006F6A RLA
tosudivax 007250 RLA tosudiveax 006F95 RLA
tosumoda0 007284 RLA tosumula0 00704E RLA
tosumulax 007050 RLA ucase_fn 006431 RLA
udiv16 00725F RLA zerobss 006D05 RLA
Imports list:
-------------
__BSS_LOAD__ ([linker generated]):
atari.o crt0.s(18)
__BSS_RUN__ ([linker generated]):
zerobss.o zerobss.s(8)
__BSS_SIZE__ ([linker generated]):
zerobss.o zerobss.s(8)
__CODE_LOAD__ ([linker generated]):
atari.o crt0.s(18)
__CONSTRUCTOR_COUNT__ ([linker generated]):
condes.o condes.s(18)
__CONSTRUCTOR_TABLE__ ([linker generated]):
condes.o condes.s(18)
__DESTRUCTOR_COUNT__ ([linker generated]):
condes.o condes.s(19)
__DESTRUCTOR_TABLE__ ([linker generated]):
condes.o condes.s(19)
__clocks_per_sec (clock.o):
agreed.o agreed.s(26)
__ctype (ctype.o):
strupper.o strupper.s(12)
strlower.o strlower.s(12)
__do_oserror (rwcommon.o):
open.o open.s(19)
write.o write.s(5)
read.o read.s(8)
close.o close.s(9)
graphics.o graphics.s(14)
__errno (errno.o):
_fopen.o errno.inc(7)
fwrite.o errno.inc(7)
fread.o errno.inc(7)
fopen.o errno.inc(7)
fclose.o errno.inc(7)
rwcommon.o errno.inc(7)
__fdesc (_fdesc.o):
fopen.o fopen.s(10)
__filetab (_file.o):
_fdesc.o _file.inc(24)
atari.o crt0.s(17)
__fopen (_fopen.o):
fopen.o fopen.s(10)
__graphmode_used (graphuse.o):
graphics.o graphics.s(19)
__hextab (_hextab.o):
ltoa.o ltoa.s(10)
__inviocb (rwcommon.o):
write.o write.s(5)
read.o read.s(8)
close.o close.s(10)
__oserror (_oserror.o):
open.o errno.inc(7)
write.o write.s(5)
read.o read.s(8)
close.o close.s(9)
rwcommon.o errno.inc(7)
graphics.o graphics.s(14)
__printf (_printf.o):
vsprintf.o vsprintf.s(9)
__rwsetup (rwcommon.o):
write.o write.s(5)
read.o read.s(8)
__seterrno (rwcommon.o):
open.o open.s(19)
graphics.o graphics.s(14)
_cgetc (cgetc.o):
agreed.o agreed.s(13)
_clock (clock.o):
agreed.o agreed.s(27)
_close (close.o):
open.o open.s(15)
fclose.o fclose.s(10)
_dli01 (dli1.o):
agreed.o agreed.s(28)
_exit (atari.o):
agreed.o agreed.s(16)
_fclose (fclose.o):
agreed.o agreed.s(17)
_fnt14 (dli1.o):
agreed.o agreed.s(31)
_fnt7 (dli1.o):
agreed.o agreed.s(30)
_fopen (fopen.o):
agreed.o agreed.s(18)
_fread (fread.o):
agreed.o agreed.s(19)
_fwrite (fwrite.o):
agreed.o agreed.s(20)
_graphics (graphics.o):
agreed.o agreed.s(12)
_ltoa (ltoa.o):
_printf.o _printf.s(11)
_main (agreed.o):
callmain.o callmain.s(11)
_memcpy (memcpy.o):
vsprintf.o vsprintf.s(9)
agreed.o agreed.s(23)
_memmove (memmove.o):
agreed.o agreed.s(24)
_memset (memset.o):
agreed.o agreed.s(25)
_menuflg (dli1.o):
agreed.o agreed.s(29)
_open (open.o):
_fopen.o _fopen.s(10)
_rand (rand.o):
agreed.o agreed.s(14)
_read (read.o):
fread.o fread.s(10)
_sprintf (sprintf.o):
agreed.o agreed.s(21)
_srand (rand.o):
agreed.o agreed.s(15)
_strlen (strlen.o):
_printf.o _printf.s(12)
agreed.o agreed.s(22)
_strlower (strlower.o):
_printf.o _printf.s(12)
_strupr (strupper.o):
ucase_fn.o ucase_fn.s(25)
_ultoa (ltoa.o):
_printf.o _printf.s(11)
_vsprintf (vsprintf.o):
sprintf.o sprintf.s(8)
_write (write.o):
fwrite.o fwrite.s(10)
addeq0sp (addeqsp.o):
agreed.o agreed.s(768)
agreed.o agreed.s(904)
agreed.o agreed.s(1082)
agreed.o agreed.s(1280)
agreed.o agreed.s(3514)
agreed.o agreed.s(4211)
agreed.o agreed.s(4778)
agreed.o agreed.s(6132)
addeqysp (addeqsp.o):
agreed.o agreed.s(891)
agreed.o agreed.s(1069)
agreed.o agreed.s(1380)
agreed.o agreed.s(1627)
agreed.o agreed.s(1914)
agreed.o agreed.s(2158)
agreed.o agreed.s(2583)
agreed.o agreed.s(3988)
agreed.o agreed.s(4442)
agreed.o agreed.s(4688)
agreed.o agreed.s(5650)
agreed.o agreed.s(6126)
addysp (addysp.o):
open.o open.s(20)
leave.o leave.s(13)
incsp8.o incsp8.s(8)
incsp7.o incsp7.s(8)
incsp6.o incsp6.s(8)
incsp5.o incsp5.s(8)
incsp4.o incsp4.s(8)
incsp3.o incsp3.s(8)
sprintf.o sprintf.s(8)
fwrite.o fwrite.s(11)
fread.o fread.s(11)
agreed.o agreed.s(1417)
agreed.o agreed.s(1806)
agreed.o agreed.s(2900)
agreed.o agreed.s(3839)
addysp1 (addysp.o):
sub.o sub.s(8)
ludiv.o ludiv.s(8)
lsub.o lsub.s(11)
and.o and.s(8)
aslax3 (aslax3.o):
agreed.o agreed.s(1668)
agreed.o agreed.s(2452)
axlong (axlong.o):
_printf.o _printf.s(9)
axulong (axlong.o):
_printf.o _printf.s(9)
agreed.o agreed.s(3045)
bnegax (bneg.o):
agreed.o agreed.s(5450)
agreed.o agreed.s(6372)
boolge (makebool.o):
ge.o ge.s(8)
boollt (makebool.o):
lt.o lt.s(8)
booluge (makebool.o):
agreed.o agreed.s(1325)
agreed.o agreed.s(1652)
callmain (callmain.o):
atari.o crt0.s(15)
clriocb (fdtable.o):
open.o open.s(16)
graphics.o graphics.s(16)
cursor (_cursor.o):
cgetc.o cgetc.s(10)
decax1 (decax1.o):
agreed.o agreed.s(3572)
agreed.o agreed.s(6362)
agreed.o agreed.s(6699)
decsp1 (decsp1.o):
agreed.o agreed.s(642)
agreed.o agreed.s(2268)
agreed.o agreed.s(3139)
agreed.o agreed.s(3326)
decsp2 (decsp2.o):
toslong.o toslong.s(8)
agreed.o agreed.s(450)
agreed.o agreed.s(1146)
agreed.o agreed.s(1823)
agreed.o agreed.s(1932)
agreed.o agreed.s(1967)
agreed.o agreed.s(3605)
agreed.o agreed.s(3866)
agreed.o agreed.s(4506)
agreed.o agreed.s(6490)
decsp3 (decsp3.o):
agreed.o agreed.s(705)
agreed.o agreed.s(1882)
agreed.o agreed.s(2045)
agreed.o agreed.s(3661)
agreed.o agreed.s(6393)
decsp4 (decsp4.o):
lpush.o lpush.s(11)
sprintf.o sprintf.s(8)
agreed.o agreed.s(802)
agreed.o agreed.s(951)
agreed.o agreed.s(2921)
decsp5 (decsp5.o):
agreed.o agreed.s(2643)
decsp6 (decsp6.o):
_printf.o _printf.s(9)
agreed.o agreed.s(1319)
agreed.o agreed.s(3038)
agreed.o agreed.s(4823)
agreed.o agreed.s(6066)
decsp8 (decsp8.o):
agreed.o agreed.s(1623)
donelib (condes.o):
atari.o crt0.s(15)
enter (enter.o):
agreed.o agreed.s(701)
agreed.o agreed.s(798)
agreed.o agreed.s(947)
agreed.o agreed.s(1142)
agreed.o agreed.s(2245)
agreed.o agreed.s(2639)
agreed.o agreed.s(2917)
agreed.o agreed.s(3565)
agreed.o agreed.s(3601)
agreed.o agreed.s(3856)
agreed.o agreed.s(4287)
agreed.o agreed.s(4496)
agreed.o agreed.s(5127)
agreed.o agreed.s(6355)
fd_index (getfd.o):
fdtable.o fdtable.s(10)
fd_table (getfd.o):
fdtable.o fdtable.s(10)
fddecusage (fdtable.o):
open.o open.s(17)
graphics.o graphics.s(15)
fdt_to_fdi (getfd.o):
fdtable.o fdtable.s(11)
fdtoiocb (fdtable.o):
rwcommon.o rwcommon.s(10)
graphics.o graphics.s(17)
fdtoiocb_down (fdtable.o):
close.o close.s(10)
findfreeiocb (fdtable.o):
open.o open.s(18)
graphics.o graphics.s(13)
getfd (getfd.o):
atari.o crt0.s(17)
incax1 (incax1.o):
agreed.o agreed.s(744)
agreed.o agreed.s(1180)
agreed.o agreed.s(1386)
agreed.o agreed.s(1532)
agreed.o agreed.s(1584)
agreed.o agreed.s(1748)
agreed.o agreed.s(1843)
agreed.o agreed.s(2510)
agreed.o agreed.s(3695)
agreed.o agreed.s(6097)
agreed.o agreed.s(6368)
agreed.o agreed.s(6408)
agreed.o agreed.s(6698)
incax2 (incax2.o):
agreed.o agreed.s(865)
agreed.o agreed.s(1014)
agreed.o agreed.s(1207)
incax3 (incax3.o):
agreed.o agreed.s(847)
agreed.o agreed.s(996)
agreed.o agreed.s(4550)
incax4 (incaxy.o):
agreed.o agreed.s(1167)
incax5 (incax5.o):
agreed.o agreed.s(726)
agreed.o agreed.s(1155)
agreed.o agreed.s(4542)
incax6 (incax6.o):
agreed.o agreed.s(714)
agreed.o agreed.s(823)
agreed.o agreed.s(972)
incax7 (incax7.o):
agreed.o agreed.s(811)
agreed.o agreed.s(960)
incaxy (incaxy.o):
incax7.o incax7.s(8)
incax6.o incax6.s(8)
incax5.o incax5.s(8)
incax3.o incax3.s(8)
agreed.o agreed.s(456)
agreed.o agreed.s(2393)
agreed.o agreed.s(2724)
agreed.o agreed.s(4174)
agreed.o agreed.s(4433)
agreed.o agreed.s(5164)
incsp1 (incsp1.o):
agreed.o agreed.s(433)
agreed.o agreed.s(2330)
agreed.o agreed.s(3309)
agreed.o agreed.s(3486)
incsp2 (incsp2.o):
staxspi.o staxspi.s(8)
staspidx.o staspidx.s(8)
popsreg.o popsreg.s(8)
agreed.o agreed.s(684)
agreed.o agreed.s(2028)
agreed.o agreed.s(3548)
agreed.o agreed.s(6338)
incsp3 (incsp3.o):
agreed.o agreed.s(475)
agreed.o agreed.s(3718)
incsp4 (incsp4.o):
open.o open.s(19)
_fopen.o _fopen.s(11)
rwcommon.o rwcommon.s(8)
agreed.o agreed.s(6806)
incsp5 (incsp5.o):
agreed.o agreed.s(1459)
agreed.o agreed.s(1502)
agreed.o agreed.s(1892)
agreed.o agreed.s(6465)
incsp6 (incsp6.o):
fwrite.o fwrite.s(11)
fread.o fread.s(11)
agreed.o agreed.s(1524)
agreed.o agreed.s(1576)
agreed.o agreed.s(3058)
agreed.o agreed.s(4201)
agreed.o agreed.s(4767)
agreed.o agreed.s(6174)
incsp7 (incsp7.o):
agreed.o agreed.s(2228)
incsp8 (incsp8.o):
agreed.o agreed.s(1835)
agreed.o agreed.s(1948)
agreed.o agreed.s(1983)
agreed.o agreed.s(5110)
initlib (condes.o):
atari.o crt0.s(15)
ldax0sp (ldaxsp.o):
rwcommon.o rwcommon.s(8)
agreed.o agreed.s(466)
agreed.o agreed.s(1236)
agreed.o agreed.s(1519)
agreed.o agreed.s(1571)
agreed.o agreed.s(1830)
agreed.o agreed.s(1949)
agreed.o agreed.s(1984)
agreed.o agreed.s(3507)
agreed.o agreed.s(3709)
agreed.o agreed.s(3910)
agreed.o agreed.s(4519)
ldaxi (ldaxi.o):
agreed.o agreed.s(745)
agreed.o agreed.s(866)
agreed.o agreed.s(1015)
agreed.o agreed.s(1198)
agreed.o agreed.s(2394)
agreed.o agreed.s(4183)
agreed.o agreed.s(4543)
agreed.o agreed.s(6369)
ldaxysp (ldaxsp.o):
open.o open.s(20)
fwrite.o fwrite.s(11)
fread.o fread.s(11)
rwcommon.o rwcommon.s(8)
agreed.o agreed.s(1342)
agreed.o agreed.s(1529)
agreed.o agreed.s(1581)
agreed.o agreed.s(1667)
agreed.o agreed.s(1825)
agreed.o agreed.s(1890)
agreed.o agreed.s(1939)
agreed.o agreed.s(1974)
agreed.o agreed.s(2015)
agreed.o agreed.s(2047)
agreed.o agreed.s(2376)
agreed.o agreed.s(2677)
agreed.o agreed.s(2851)
agreed.o agreed.s(2975)
agreed.o agreed.s(3095)
agreed.o agreed.s(3868)
agreed.o agreed.s(4348)
agreed.o agreed.s(4508)
agreed.o agreed.s(5518)
agreed.o agreed.s(6402)
leaasp (leasp.o):
agreed.o agreed.s(713)
agreed.o agreed.s(810)
agreed.o agreed.s(959)
agreed.o agreed.s(1154)
agreed.o agreed.s(2391)
agreed.o agreed.s(2805)
agreed.o agreed.s(3082)
agreed.o agreed.s(3571)
agreed.o agreed.s(3738)
agreed.o agreed.s(4180)
agreed.o agreed.s(4333)
agreed.o agreed.s(4541)
agreed.o agreed.s(4900)
agreed.o agreed.s(5163)
agreed.o agreed.s(6361)
leave (leave.o):
agreed.o agreed.s(3584)
agreed.o agreed.s(6376)
leavey (leave.o):
agreed.o agreed.s(781)
agreed.o agreed.s(930)
agreed.o agreed.s(1125)
agreed.o agreed.s(1302)
agreed.o agreed.s(2622)
agreed.o agreed.s(2760)
agreed.o agreed.s(2998)
agreed.o agreed.s(3644)
agreed.o agreed.s(4225)
agreed.o agreed.s(4479)
agreed.o agreed.s(4797)
agreed.o agreed.s(6049)
memcpy_getparams (memcpy.o):
memmove.o memmove.s(10)
memcpy_upwards (memcpy.o):
memmove.o memmove.s(10)
mul40 (mul40.o):
cgetc.o cgetc.s(10)
mulax5 (mulax5.o):
agreed.o agreed.s(6426)
mulax7 (mulax7.o):
agreed.o agreed.s(1444)
negax (neg.o):
shelp.o shelp.s(11)
mod.o mod.s(11)
div.o div.s(11)
newfd (fdtable.o):
open.o open.s(17)
graphics.o graphics.s(18)
popax (incsp2.o):
ltoa.o ltoa.s(9)
_printf.o _printf.s(9)
shelp.o shelp.s(11)
vsprintf.o vsprintf.s(8)
memset.o memset.s(17)
memcpy.o memcpy.s(12)
popsargs (shelp.o):
mod.o mod.s(11)
div.o div.s(11)
popsreg (popsreg.o):
umod.o umod.s(8)
udiv.o udiv.s(8)
shl.o shl.s(8)
mul.o mul.s(8)
ptr1 (zeropage.o):
strupper.o strupper.s(13)
strlower.o strlower.s(13)
ltoa.o ltoa.s(11)
_printf.o _printf.s(13)
_fopen.o _fopen.s(12)
umod.o umod.s(9)
udiv.o udiv.s(9)
staxspi.o staxspi.s(9)
staspidx.o staspidx.s(9)
pushw.o pushw.s(9)
mulax7.o mulax7.s(9)
mulax5.o mulax5.s(8)
mod.o mod.s(12)
ludiv.o ludiv.s(9)
ldaxi.o ldaxi.s(8)
zerobss.o zerobss.s(9)
vsprintf.o vsprintf.s(10)
strlen.o strlen.s(8)
sprintf.o sprintf.s(9)
memset.o memset.s(18)
memmove.o memmove.s(11)
memcpy.o memcpy.s(13)
fwrite.o fwrite.s(14)
fread.o fread.s(14)
fclose.o fclose.s(11)
agreed.o agreed.s(10)
ptr2 (zeropage.o):
strupper.o strupper.s(13)
strlower.o strlower.s(13)
ltoa.o ltoa.s(11)
_printf.o _printf.s(13)
ludiv.o ludiv.s(9)
memmove.o memmove.s(11)
memcpy.o memcpy.s(13)
agreed.o agreed.s(10)
ptr3 (zeropage.o):
ltoa.o ltoa.s(11)
ludiv.o ludiv.s(9)
memset.o memset.s(18)
memmove.o memmove.s(11)
memcpy.o memcpy.s(13)
ptr4 (zeropage.o):
ucase_fn.o ucase_fn.s(24)
fdtable.o fdtable.s(9)
umod.o umod.s(9)
udiv.o udiv.s(9)
shelp.o shelp.s(12)
mul.o mul.s(9)
ludiv.o ludiv.s(9)
memmove.o memmove.s(11)
push0 (pushax.o):
agreed.o agreed.s(752)
agreed.o agreed.s(2002)
agreed.o agreed.s(2061)
agreed.o agreed.s(3503)
agreed.o agreed.s(3609)
agreed.o agreed.s(4242)
agreed.o agreed.s(4330)
agreed.o agreed.s(5878)
agreed.o agreed.s(6070)
push1 (push1.o):
_printf.o _printf.s(9)
agreed.o agreed.s(1935)
agreed.o agreed.s(1970)
agreed.o agreed.s(3080)
agreed.o agreed.s(4331)
agreed.o agreed.s(4875)
agreed.o agreed.s(5856)
agreed.o agreed.s(6364)
agreed.o agreed.s(6486)
push2 (push2.o):
agreed.o agreed.s(2799)
agreed.o agreed.s(2931)
agreed.o agreed.s(3519)
agreed.o agreed.s(4885)
push3 (push3.o):
agreed.o agreed.s(3166)
agreed.o agreed.s(3353)
push6 (push6.o):
agreed.o agreed.s(3751)
push7 (push7.o):
agreed.o agreed.s(6452)
pusha (pusha.o):
pushc0.o pushc0.s(8)
agreed.o agreed.s(453)
agreed.o agreed.s(1440)
agreed.o agreed.s(1482)
agreed.o agreed.s(1549)
agreed.o agreed.s(1601)
agreed.o agreed.s(1640)
agreed.o agreed.s(1860)
agreed.o agreed.s(2213)
agreed.o agreed.s(2335)
agreed.o agreed.s(2709)
agreed.o agreed.s(3141)
agreed.o agreed.s(3328)
agreed.o agreed.s(3531)
agreed.o agreed.s(4186)
agreed.o agreed.s(4302)
agreed.o agreed.s(4851)
agreed.o agreed.s(5745)
agreed.o agreed.s(6554)
pusha0 (pushax.o):
push7.o push7.s(8)
push6.o push6.s(8)
push3.o push3.s(8)
push2.o push2.s(8)
push1.o push1.s(8)
agreed.o agreed.s(420)
agreed.o agreed.s(710)
agreed.o agreed.s(807)
agreed.o agreed.s(956)
agreed.o agreed.s(1151)
agreed.o agreed.s(1321)
agreed.o agreed.s(1485)
agreed.o agreed.s(1648)
agreed.o agreed.s(1904)
agreed.o agreed.s(2004)
agreed.o agreed.s(2075)
agreed.o agreed.s(2252)
agreed.o agreed.s(2669)
agreed.o agreed.s(2812)
agreed.o agreed.s(2968)
agreed.o agreed.s(3079)
agreed.o agreed.s(3147)
agreed.o agreed.s(3334)
agreed.o agreed.s(3753)
agreed.o agreed.s(3973)
agreed.o agreed.s(4244)
agreed.o agreed.s(4306)
agreed.o agreed.s(4673)
agreed.o agreed.s(4855)
agreed.o agreed.s(6156)
agreed.o agreed.s(6580)
pushaFF (pushaff.o):
agreed.o agreed.s(3862)
agreed.o agreed.s(4502)
pushax (pushax.o):
_printf.o _printf.s(9)
pushw.o pushw.s(8)
pushaff.o pushaff.s(8)
callmain.o callmain.s(11)
fwrite.o fwrite.s(11)
fread.o fread.s(11)
fopen.o fopen.s(11)
agreed.o agreed.s(708)
agreed.o agreed.s(805)
agreed.o agreed.s(954)
agreed.o agreed.s(1149)
agreed.o agreed.s(1340)
agreed.o agreed.s(1452)
agreed.o agreed.s(1495)
agreed.o agreed.s(1537)
agreed.o agreed.s(1589)
agreed.o agreed.s(1676)
agreed.o agreed.s(1848)
agreed.o agreed.s(2007)
agreed.o agreed.s(2054)
agreed.o agreed.s(2255)
agreed.o agreed.s(2646)
agreed.o agreed.s(2806)
agreed.o agreed.s(2938)
agreed.o agreed.s(3041)
agreed.o agreed.s(3171)
agreed.o agreed.s(3358)
agreed.o agreed.s(3508)
agreed.o agreed.s(3608)
agreed.o agreed.s(3677)
agreed.o agreed.s(3739)
agreed.o agreed.s(3869)
agreed.o agreed.s(4247)
agreed.o agreed.s(4295)
agreed.o agreed.s(4509)
agreed.o agreed.s(4863)
agreed.o agreed.s(5135)
agreed.o agreed.s(6069)
agreed.o agreed.s(6319)
agreed.o agreed.s(6405)
agreed.o agreed.s(6519)
pushc0 (pushc0.o):
agreed.o agreed.s(2682)
agreed.o agreed.s(4300)
agreed.o agreed.s(4832)
agreed.o agreed.s(6191)
pusheax (lpush.o):
_printf.o _printf.s(9)
agreed.o agreed.s(3043)
pushw (pushw.o):
agreed.o agreed.s(3573)
agreed.o agreed.s(6363)
agreed.o agreed.s(6403)
pushw0sp (pushwsp.o):
agreed.o agreed.s(751)
agreed.o agreed.s(872)
agreed.o agreed.s(3675)
agreed.o agreed.s(4546)
agreed.o agreed.s(6114)
pushwysp (pushwsp.o):
fwrite.o fwrite.s(11)
fread.o fread.s(11)
agreed.o agreed.s(874)
agreed.o agreed.s(1050)
agreed.o agreed.s(1368)
agreed.o agreed.s(1435)
agreed.o agreed.s(1477)
agreed.o agreed.s(1539)
agreed.o agreed.s(1591)
agreed.o agreed.s(1850)
agreed.o agreed.s(1888)
agreed.o agreed.s(1934)
agreed.o agreed.s(1969)
agreed.o agreed.s(2023)
agreed.o agreed.s(2060)
agreed.o agreed.s(2414)
agreed.o agreed.s(2664)
agreed.o agreed.s(2838)
agreed.o agreed.s(2963)
agreed.o agreed.s(3069)
agreed.o agreed.s(4142)
agreed.o agreed.s(4401)
agreed.o agreed.s(4538)
agreed.o agreed.s(5713)
agreed.o agreed.s(6116)
regbank (zeropage.o):
_printf.o _printf.s(13)
regsave (zeropage.o):
agreed.o agreed.s(10)
return0 (return0.o):
_fopen.o _fopen.s(11)
_fdesc.o _fdesc.s(9)
shl.o shl.s(8)
fwrite.o fwrite.s(11)
fread.o fread.s(11)
shlax3 (aslax3.o):
agreed.o agreed.s(1707)
shrax1 (shrax1.o):
agreed.o agreed.s(2017)
sp (zeropage.o):
ucase_fn.o ucase_fn.s(24)
_printf.o _printf.s(13)
_fopen.o _fopen.s(12)
fdtable.o fdtable.s(9)
toslong.o toslong.s(9)
subysp.o subysp.s(9)
subeqsp.o subeqsp.s(8)
sub.o sub.s(9)
staxspi.o staxspi.s(9)
staxsp.o staxsp.s(8)
staspidx.o staspidx.s(9)
pushwsp.o pushwsp.s(8)
pushax.o pushax.s(8)
pusha.o pusha.s(8)
popsreg.o popsreg.s(9)
ludiv.o ludiv.s(9)
lsub.o lsub.s(12)
lpush.o lpush.s(12)
leave.o leave.s(14)
leasp.o leasp.s(8)
ldaxsp.o ldaxsp.s(8)
incsp2.o incsp2.s(8)
incsp1.o incsp1.s(8)
icmp.o icmp.s(9)
enter.o enter.s(8)
decsp8.o decsp8.s(8)
decsp6.o decsp6.s(8)
decsp5.o decsp5.s(8)
decsp4.o decsp4.s(8)
decsp3.o decsp3.s(8)
decsp2.o decsp2.s(8)
decsp1.o decsp1.s(8)
and.o and.s(9)
addysp.o addysp.s(8)
addeqsp.o addeqsp.s(8)
add.o add.s(11)
vsprintf.o vsprintf.s(10)
sprintf.o sprintf.s(9)
memset.o memset.s(18)
agreed.o agreed.s(10)
atari.o zeropage.inc(11)
sreg (zeropage.o):
ltoa.o ltoa.s(11)
_printf.o _printf.s(13)
udiv.o udiv.s(9)
shl.o shl.s(9)
shelp.o shelp.s(12)
popsreg.o popsreg.s(9)
mul.o mul.s(9)
ludiv.o ludiv.s(9)
lsub.o lsub.s(12)
lpush.o lpush.s(12)
icmp.o icmp.s(9)
div.o div.s(12)
axlong.o axlong.s(8)
clock.o clock.s(10)
agreed.o agreed.s(10)
staspidx (staspidx.o):
agreed.o agreed.s(2090)
agreed.o agreed.s(3687)
agreed.o agreed.s(6668)
stax0sp (staxsp.o):
agreed.o agreed.s(457)
agreed.o agreed.s(732)
agreed.o agreed.s(836)
agreed.o agreed.s(985)
agreed.o agreed.s(1173)
agreed.o agreed.s(1327)
agreed.o agreed.s(1826)
agreed.o agreed.s(1941)
agreed.o agreed.s(1976)
agreed.o agreed.s(2048)
agreed.o agreed.s(2471)
agreed.o agreed.s(2970)
agreed.o agreed.s(3616)
agreed.o agreed.s(3664)
agreed.o agreed.s(3909)
agreed.o agreed.s(4518)
agreed.o agreed.s(5643)
agreed.o agreed.s(6098)
agreed.o agreed.s(6513)
staxspidx (staxspi.o):
agreed.o agreed.s(2483)
staxysp (staxsp.o):
agreed.o agreed.s(830)
agreed.o agreed.s(979)
agreed.o agreed.s(1359)
agreed.o agreed.s(1534)
agreed.o agreed.s(1586)
agreed.o agreed.s(1670)
agreed.o agreed.s(1845)
agreed.o agreed.s(1886)
agreed.o agreed.s(2374)
agreed.o agreed.s(2651)
agreed.o agreed.s(2825)
agreed.o agreed.s(2950)
agreed.o agreed.s(3050)
agreed.o agreed.s(4346)
agreed.o agreed.s(5151)
agreed.o agreed.s(6080)
agreed.o agreed.s(6397)
agreed.o agreed.s(6761)
subeqysp (subeqsp.o):
agreed.o agreed.s(2116)
agreed.o agreed.s(2443)
agreed.o agreed.s(4053)
agreed.o agreed.s(4753)
agreed.o agreed.s(5727)
subysp (subysp.o):
ucase_fn.o ucase_fn.s(25)
agreed.o agreed.s(2250)
agreed.o agreed.s(2778)
agreed.o agreed.s(3736)
agreed.o agreed.s(4292)
agreed.o agreed.s(5132)
tmp1 (zeropage.o):
ltoa.o ltoa.s(11)
_printf.o _printf.s(13)
fdtable.o fdtable.s(9)
staxspi.o staxspi.s(9)
staspidx.o staspidx.s(9)
shrax1.o shrax1.s(8)
shelp.o shelp.s(12)
mul.o mul.s(9)
mod.o mod.s(12)
incaxy.o incaxy.s(8)
div.o div.s(12)
aslax3.o aslax3.s(8)
memset.o memset.s(18)
memmove.o memmove.s(11)
memcpy.o memcpy.s(13)
fread.o fread.s(14)
graphics.o graphics.s(20)
getfd.o getfd.s(10)
agreed.o agreed.s(10)
tmp2 (zeropage.o):
ucase_fn.o ucase_fn.s(22)
open.o open.s(22)
fdtable.o fdtable.s(9)
shelp.o shelp.s(12)
div.o div.s(12)
rwcommon.o rwcommon.s(7)
graphics.o graphics.s(20)
tmp3 (zeropage.o):
ucase_fn.o ucase_fn.s(24)
open.o open.s(24)
fdtable.o fdtable.s(9)
ludiv.o ludiv.s(9)
rwcommon.o rwcommon.s(7)
graphics.o graphics.s(20)
tmp4 (zeropage.o):
open.o open.s(22)
ludiv.o ludiv.s(9)
mul40.o mul40.s(8)
tosadda0 (add.o):
agreed.o agreed.s(731)
agreed.o agreed.s(828)
agreed.o agreed.s(977)
agreed.o agreed.s(1172)
tosaddax (add.o):
agreed.o agreed.s(721)
agreed.o agreed.s(818)
agreed.o agreed.s(967)
agreed.o agreed.s(1162)
agreed.o agreed.s(1346)
agreed.o agreed.s(1682)
agreed.o agreed.s(4185)
tosandax (and.o):
agreed.o agreed.s(6371)
tosaslax (shl.o):
agreed.o agreed.s(6370)
tosdiva0 (div.o):
agreed.o agreed.s(3071)
tosgea0 (ge.o):
agreed.o agreed.s(3902)
agreed.o agreed.s(4590)
agreed.o agreed.s(6764)
tosicmp (icmp.o):
lt.o lt.s(8)
ge.o ge.s(8)
agreed.o agreed.s(746)
agreed.o agreed.s(867)
agreed.o agreed.s(1016)
agreed.o agreed.s(1199)
agreed.o agreed.s(1372)
agreed.o agreed.s(1891)
agreed.o agreed.s(2262)
agreed.o agreed.s(3057)
agreed.o agreed.s(4544)
agreed.o agreed.s(5755)
agreed.o agreed.s(6582)
toslong (toslong.o):
agreed.o agreed.s(3047)
toslta0 (lt.o):
agreed.o agreed.s(2379)
agreed.o agreed.s(3510)
agreed.o agreed.s(3871)
agreed.o agreed.s(4351)
agreed.o agreed.s(4511)
agreed.o agreed.s(5137)
agreed.o agreed.s(6321)
agreed.o agreed.s(6625)
tosmoda0 (mod.o):
agreed.o agreed.s(3098)
agreed.o agreed.s(3679)
agreed.o agreed.s(6407)
agreed.o agreed.s(6697)
tosmula0 (mul.o):
agreed.o agreed.s(1326)
agreed.o agreed.s(1653)
agreed.o agreed.s(2257)
agreed.o agreed.s(3792)
agreed.o agreed.s(3939)
agreed.o agreed.s(4373)
agreed.o agreed.s(4639)
agreed.o agreed.s(5584)
agreed.o agreed.s(6646)
tosmulax (mul.o):
agreed.o agreed.s(4184)
tossuba0 (sub.o):
agreed.o agreed.s(1279)
agreed.o agreed.s(6456)
tossubax (sub.o):
agreed.o agreed.s(2018)
agreed.o agreed.s(3797)
tossubeax (lsub.o):
agreed.o agreed.s(3048)
tosudivax (udiv.o):
fwrite.o fwrite.s(12)
fread.o fread.s(12)
agreed.o agreed.s(2261)
agreed.o agreed.s(3796)
tosudiveax (ludiv.o):
agreed.o agreed.s(3046)
tosumoda0 (umod.o):
agreed.o agreed.s(2319)
tosumula0 (mul.o):
agreed.o agreed.s(422)
agreed.o agreed.s(720)
agreed.o agreed.s(817)
agreed.o agreed.s(966)
agreed.o agreed.s(1161)
agreed.o agreed.s(1487)
agreed.o agreed.s(4888)
agreed.o agreed.s(6606)
tosumulax (mul.o):
fwrite.o fwrite.s(12)
fread.o fread.s(12)
ucase_fn (ucase_fn.o):
open.o open.s(25)
udiv16 (udiv.o):
umod.o umod.s(8)
mod.o mod.s(11)
div.o div.s(11)
zerobss (zerobss.o):
atari.o crt0.s(16)
}}}
!! CC65 Sourcecode
{{{
/* -*- C -*- ****************************************************************
*
* ATARI Greed
* Copyright 2003-2004 Carsten Strotmann, Winfried Piegsda.
* based on greed for Unix,
* written by Matthew T. Day and Eric S. Raymond
*
*
*
*
* System : Atari 800XL/130XL/800XE
* Module :
* Object Name : $RCSfile: GameAtariGreed.txt,v $
* Revision : $Revision: 1.3 $
* Date : Fri Oct 30 12:00:00 2004
* Author : Carsten Strotmann, Winfried Piegsda
* Created By : <unknown>
* Created : Sun Dec 7 15:50:35 2003
* Last Modified : <040425.2127>
*
* Description A version of the game "greed" for the cc65 6502 C-Compiler,
* for ATARI 8-bit Microcomputer
*
* Notes
* greed homepage: http://catb.org/~esr/greed/
*
*
****************************************************************************
*/
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#define MAXSCORE 10 /* max number of highscore entries */
#define rnd(x) (int) ((rand() % (x))+1) /* rnd() returns random num between 1 and x */
#define MK 20 /* marker of current screen location */
#define MAXX 38
#define MAXY 18
#define LEVELLINE 1
#define MENULINE 161
#define STATUSLINE 152
#define XOFFSET 1
#define YOFFSET 1
#define SOUNDBASE 8A00
#define TITLEBASE 0xD800
#define SAVEBASE 0xED60
#define SCORENAME 8
#define SCOREFILESIZE (MAXSCORE * (SCORENAME + 1 + sizeof(int))) /* total byte size of high score file */
#define LEVELFILESIZE 130
#define MAXMINUTES 8 // minutes for level
#define GET_WORD(p) (*(p) + ((unsigned) (p)[1] << 8))
extern void dli01(void); /* is provided in dli.s */
extern void dli02(void); /* is provided in dli.s */
extern void dli03(void); /* is provided in dli.s */
extern void dli04(void); /* is provided in dli.s */
extern void dli05(void); /* is provided in dli.s */
extern char menuflg;
extern char fnt7;
extern char fnt14;
static unsigned char dllist[] = { 0x70, 0x70, // 2 * 8 Scanlines of black
0x80, // one scanline with DLI (white line)
0x00, // 1 black Scanline
0x4f, 80, 161, // Gr.8 + load Address
0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, // seven Lines Gr.8 for 6x5 font
0xA0, // two empty scanlines with DLI (fade)
0x70, 0x00, // 9 Scanlines
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 1
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 2
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 3
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 4
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 5
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 6
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 7
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 8
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 9
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 10
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, // 6 Gr.8 Lines, Playfield row 11
0x4f ,0, 176, // 1 Gr.8+Load Memory, Playfield row 11
0x0f, // 1 Gr.8 Lines, Playfield row 11
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 12
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 13
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 14
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 15
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 16
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 17
0x0f, 0x0f, 0x0f, 0x8f,
0x0f, 0x0f, 0x0f, 0x0f, // 8 Gr.8 Lines, Playfield row 18
0x70, // 8 Scanlines
0x00, // 1 Scanline (empty)
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, // 7 Gr.8 Lines, MENULINE 6x5 font
0x70, 0x20, // 11 Scanlines
0x80, // 1 Scanline with DLI (fade)
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f,
0x8f, 0x0f, 0x0f, 0x0f, // 14 Gr.8 Lines, Menu 7x14 font
0x00, // 1 Scanline
0x70, // 8 Scanlines
0x41, 0x00, 0x28 // Jump to start
};
static char highscorefile[]= "D:AGREED.HIG";
static char continuemsg[] = "press key to continue...";
static char helpmsg[] = "Hit '?' for help";
static char fourdigitform[] = " %04d ";
static char levelbuf[130];
static int allmoves = 0;
static int score = 0;
static int levelscore;;
static int highscore = 0;
static unsigned int maxvalue;
static char level = 0, oldlevel = 0;
static char grid[MAXY][MAXX];
static int x,y;
static char havebotmsg = 0;
static char soundflg = 0;
static char exitflg = 0;
static int oldtime, maxtime;
static char scorelist[SCOREFILESIZE];
char* getscorename(char pos)
{
return (&scorelist[pos * (SCORENAME + 1 + sizeof(int))]);
}
int getscorevalue(char pos)
{
char* p;
p = getscorename(pos) + 9;
return (*(p) + ((unsigned) (p)[1] << 8));
}
/* ATARI specific stuff */
void waitvbi(void) // sync with vertical blank interrupt
{
while (!*(char*) 0xD40B)
continue;
}
void enable_os(void)
{
if (*(char*) 0x2A00 == 0x4c) // OS Switch Routine loaded??
{
__asm__( "jsr $2a00" );
}
}
void disable_os(void)
{
if (*(char*) 0x2A00 == 0x4c) // OS Switch Routine loaded??
{
__asm__( "jsr $2a04" );
}
}
void startmusic(void)
{
if (*(char*) 0x8A00 == 0x68) // sound loaded??
{
__asm__( "jsr $8A01" );
}
soundflg = 1;
}
void stopmusic(void)
{
if (*(char*) 0x8A00 == 0x68) // sound loaded??
{
__asm__( "jsr $8A08" );
}
soundflg = 0;
}
static char Asc2Int(unsigned char c)
{
unsigned char x;
x = c & 0x7f;
if (x < 0x20 && x >= 1) c += 0x40;
else if (x > 0x1f && x < 0x60) c -= 0x20;
return c;
}
void clearblock(x, y, xl, yl)
char x;
char y;
char xl;
char xl;
{
char yy;
unsigned char *mptr;
mptr = (char*) ((*(unsigned int*)0x58) + (40 * y) + x);
for (yy = 0; yy < yl; yy++)
{
memset(mptr, 0, xl);
mptr += 40;
}
}
void saveblock(x, y, xl, yl)
char x;
char y;
char xl;
char xl;
{
unsigned char *mptr, *dptr;
mptr = (char*) ((*(unsigned int*)0x58) + (40 * y) + x);
dptr = (char*) SAVEBASE;
disable_os();
for (y = 0; y < yl; y++)
{
memcpy(dptr, mptr, xl);
mptr += 40;
dptr += xl;
}
enable_os();
}
void restoreblock(x, y, xl, yl)
char x;
char y;
char xl;
char xl;
{
unsigned char *mptr, *dptr;
mptr = (char*) ((*(unsigned int*)0x58) + (40 * y) + x);
dptr = (char*) SAVEBASE;
disable_os();
for (y = 0; y < yl; y++)
{
for (y = 0; y < yl; y++)
{
memcpy(mptr, dptr, xl);
mptr += 40;
dptr += xl;
}
}
enable_os();
}
void invertblock(x, y, xl, yl)
char x;
char y;
char xl;
char xl;
{
unsigned char *mptr;
mptr = (char*) ((*(unsigned int*)0x58) + (40 * y) + x);
for (y = 0; y < yl; y++)
{
for (x = 0; x < xl; x++)
{
*mptr ^= 0xFF;
mptr++;
}
mptr += (40 - xl);
}
}
static void gputcxyvar(int x, int y, unsigned char c, unsigned char* chptr, char maxlines )
{
unsigned char *mptr;
int ch;
int inv;
inv = (0xff * (c > 0x7f));
c = c & 0x7f;
mptr = (char*) ((*(unsigned int*)0x58) + y * 40 + x);
for (ch = 0; ch < maxlines; ch++)
{
mptr += 40;
chptr++;
*mptr = (*chptr ^ inv);
}
}
static void gputcxy7(int x, int y, unsigned char c)
{
gputcxyvar(x,y,c, (char*) (&fnt7 + c * 7), 6);
}
static void gputcxy14(int x, int y, unsigned char c)
{
gputcxyvar(x,y,c, (char*) (&fnt14 + c * 14), 13);
}
void gprintxy14 (int x, int y, char* str)
{
while (*str != '\0')
{
gputcxy14(x++,y,*str++);
}
}
void gprintxy7 (int x, int y, char* str)
{
while (*str != '\0')
{
gputcxy7(x++,y,*str++);
}
}
static void gputcxy(int x, int y, unsigned char c)
{
unsigned char *chptr, *mptr, *sptr;
char ch, inv;
x += XOFFSET;
y += YOFFSET;
c = Asc2Int(c);
inv = (0xff * (c > 0x7f));
c = c & 0x7f;
y = y * 8;
sptr = mptr = (char*) ((*(unsigned int*)0x58) + y * 40 + x);
chptr = (char*) ((*(unsigned char*)0x2f4) * 0x100 + (c * 8));
for (ch = 0; ch < 8; ch++)
{
*mptr = (*chptr ^ inv);
mptr += 40;
chptr++;
}
if (inv) // round edges
{
*sptr = (*sptr ^ 0x81);
sptr += 40*7;
*sptr = (*sptr ^ 0x81);
}
}
void gprintxy (int x, int y, char* str)
{
char* s;
s = str;
while (*s != '\0')
{
gputcxy(x++,y,*s++);
}
}
void pause(int ticks)
{
int i;
char rtclk3;
for (i = 0; i < ticks; ++i)
{
rtclk3 = *(char*) 0x14;
while (rtclk3 == *(char*) 0x14) {}
}
}
/* File IO Functions */
int Fread (FILE* F, void* Buf, unsigned Size)
{
size_t Res;
Res = fread (Buf, 1, Size, F);
return Res > 0? Res : 0;
}
int Fwrite (FILE* F, const void* Buf, unsigned Size)
{
size_t Res;
Res = fwrite (Buf, 1, Size, F);
return Res > 0? Res : 0;
}
void statusline(char* str)
{
gprintxy7(0,STATUSLINE," ");
gprintxy7(20 - strlen(str) / 2,STATUSLINE,str);
}
void getname(char x, char y, char* nameptr)
{
char i;
char* str;
str = nameptr;
statusline("please enter your name:");
memset(nameptr,0,8);
i = 0;
gprintxy7(x,y,"_");
while ((*nameptr = cgetc()) != 155)
{
if (++i > 7)
{
--i;
--nameptr;
}
if ((*nameptr) == 126)
{
if (i)
{
--i;
--nameptr;
}
}
else
++nameptr;
*nameptr = '_';
gprintxy7(x,y," ");
gprintxy7(x,y,str);
}
gputcxy7(x+i,y,' ');
*nameptr = '\0';
}
void topscores(newscore)
int newscore;
{
int i, j;
char buf[8];
int* p;
if (levelbuf[2] <= (levelscore * 100 / maxvalue))
{
char c;
c = (levelscore * 100 / maxvalue);
sprintf(levelbuf,"next level! %d bonus!", c);
statusline(levelbuf);
score += c;
level = (++level % 9); // next level
c = cgetc();
}
saveblock(3,12,33,116);
clearblock(3,12,33,116);
gprintxy7(13,16,"highscores");
for (i = 0; i < MAXSCORE; ++i)
{
if (getscorevalue(i) < newscore)
{
if (i < MAXSCORE)
{
for (j = MAXSCORE-1; j >= i; --j)
{
memcpy(getscorename(j+1),getscorename(j), 11);
}
}
getname(13,28+i*8,getscorename(i));
p = (int*) (getscorename(i) + 9);
*p = newscore;
newscore = 0;
}
sprintf(buf,"%2d.",i + 1);
gprintxy7(8,28+i*8,buf);
gprintxy7(13,28+i*8,getscorename(i));
sprintf(buf,fourdigitform,getscorevalue(i));
gprintxy7(25,28+i*8,buf);
}
statusline("Press a key...");
i = cgetc();
restoreblock(3,12,33,116);
statusline(helpmsg);
}
void loadscore()
{
FILE* file;
int rc;
char i;
file = fopen(highscorefile,"r");
if (file)
{
rc = Fread (file, scorelist, SCOREFILESIZE);
fclose(file);
highscore = getscorevalue(0);
}
else
{
statusline("No Highscorefile, creating new file!");
for (i = 0; i <= MAXSCORE; ++i)
{
memset(getscorename(i), ' ',8);
*(getscorename(i) + 9) = 0;
*(getscorename(i) + 10) = 0;
}
i = cgetc();
}
}
void loadlevel(char level)
{
FILE* file;
char filename[14];
int rc;
char i, s;
s = soundflg;
if (s)
stopmusic();
*(char*) 0x22f = 0;
pause(2);
sprintf(filename,"LEVEL%02d.AGL", level);
file = fopen(filename,"r");
if (file)
{
rc = Fread (file, levelbuf, LEVELFILESIZE);
fclose(file);
*(char*) 0x22f = 0x22;
oldlevel = level;
}
else
{
*(char*) 0x22f = 0x22;
statusline("Could not load level!");
i = cgetc();
}
if (s)
startmusic();
}
void savescore()
{
FILE* file;
int rc;
stopmusic();
*(char*) 0x22f = 0;
pause(2);
statusline("Saving Highscorefile...");
file = fopen(highscorefile,"w");
if (file)
{
rc = Fwrite (file, scorelist, SCOREFILESIZE);
fclose(file);
}
else
statusline("Error saving Highscorefile!");
*(char*) 0x22f = 0x22;
}
void resettime(void)
{
*(int*) 0x13 = 0; // reset RTCLOK to zero
}
void showtime(void)
{
int time;
char buf[4];
time = maxtime - (clock() / _clocks_per_sec()); // time in seconds
if (time != oldtime)
{
sprintf(buf," %02d", time / 60); // minutes
gprintxy7(32,LEVELLINE,buf);
sprintf(buf,":%02d", time % 60); // seconds
gprintxy7(35,LEVELLINE,buf);
oldtime = time;
}
}
void help(void)
{
char c;
saveblock(3,12,33,116);
clearblock(3,12,33,116);
gprintxy7(3,20," ATARI greed help ");
gprintxy7(3,28," 'M' = toggle music ");
gprintxy7(3,36," 'Q' = quit game ");
gprintxy7(3,44," 'P' = show possible moves ");
gprintxy7(3,52," 'ESC' = toggle menu ");
gprintxy7(3,64," use joystick or keys to move ");
gprintxy7(3,72," W E R ");
gprintxy7(3,80," \\ | / ");
gprintxy7(3,88," S - + - D ");
gprintxy7(3,96," / | \\ ");
gprintxy7(3,104," Z X C ");
statusline(continuemsg);
c = cgetc();
restoreblock(3,12,33,116);
statusline(helpmsg);
}
void info(void)
{
char c;
saveblock(3,12,33,116);
clearblock(3,12,33,116);
gprintxy7(3,20," ATARI greed ");
gprintxy7(3,28," based on the UNIX game 'greed' ");
gprintxy7(3,36," written by matthew t. day ");
gprintxy7(3,44," and eric s. raymond ");
gprintxy7(3,60," programmed on an apple mac ");
gprintxy7(3,68," by carsten strotmann ");
gprintxy7(3,76," using the cc65 crosscompiler ");
gprintxy7(3,92," sound made by winfried piegsda ");
gprintxy7(3,100," using the pegasus soundmonitor ");
gprintxy7(3,108," graphic design by w. piegsda ");
statusline(continuemsg);
c = cgetc();
restoreblock(3,12,33,116);
statusline(helpmsg);
}
void showmarker(void)
{
int i = 0;
for (; i < 10; ++i);
{
pause(2);
gputcxy(x,y,MK + 0x80);
gputcxy(x,y,MK);
}
}
void botmsg(msg)
char *msg;
{
statusline(msg);
havebotmsg = 1;
}
void quit() {
int ch;
botmsg("Really quit?",0);
if ((ch = cgetc()) != 'y' && ch != 'Y') {
return;
}
exitflg = 1;
}
void earthquake(void)
{
char i;
char *p;
p = (char*) 0x2800;
for (i=0; i < 20; ++i)
{
*p = rnd(7) * 0x10;
pause(rnd(3));
}
*p = 0x70;
}
void showscore(void)
{
char buf[8];
char perc;
sprintf(buf,fourdigitform, score);
gprintxy14(6,MENULINE,buf);
sprintf(buf,fourdigitform, highscore);
gprintxy14(22,MENULINE,buf);
perc = levelbuf[2] - ((levelscore * 100) / maxvalue);
if (perc > 100)
perc = 0;
sprintf(buf,"%3d%%",perc);
gprintxy14(36,MENULINE,buf);
}
void showmoves(on)
int on;
{
int dy = -1;
int dx;
for (; dy <= 1; ++dy) {
if (y+dy < 0 || y+dy >= MAXY) continue;
for (dx = -1; dx <= 1; ++dx) {
int j=y, i=x, d=grid[y+dy][x+dx];
if (!d) continue;
do {
j += dy;
i += dx;
if (j < 0 || i < 0 || j >= MAXY || i >= MAXX || !grid[j][i]) break;
} while (--d);
if (!d) {
int j=y, i=x, d=grid[y+dy][x+dx];
/* The next section chooses inverse-video *
* or not, and then "walks" chosen valid *
* move, reprinting characters with new mode */
do {
j += dy;
i += dx;
gputcxy(i, j, grid[j][i] + '0' + (0x80 * on)); /* print possible moves inverted */
} while (--d);
}
}
}
}
void printscoreline(void)
{
gprintxy14(0,MENULINE,"Score:");
gprintxy14(12,MENULINE,"Highscore:");
gprintxy14(29,MENULINE,"Finish:");
}
void refresh()
{
int y,x;
char levelname[33];
statusline("refreshing screen...");
clearblock(0,8,39,MAXY*8);
memcpy(levelname,(char*) (levelbuf + 3),32);
levelname[32] = '\0';
gprintxy7(0,LEVELLINE,levelname);
printscoreline();
for (y=0; y < MAXY; ++y)
for (x=0; x < MAXX; ++x)
if (grid[y][x])
gputcxy(x,y,grid[y][x] + '0');
showmarker();
showmoves(allmoves);
showscore();
statusline("hit esc for menu");
}
int othermove(bady, badx)
int bady, badx;
{
int dy = -1;
int dx;
for (; dy <= 1; ++dy)
for (dx = -1; dx <= 1; ++dx)
if ((!dy && !dx) || (dy == bady && dx == badx) || y+dy < 0 && x+dx < 0 && y+dy >= MAXY && x+dx >= MAXX)
continue;
else
{
int j = y;
int i = x;
int d = grid[y+dy][x+dx];
if (!d) continue;
do {
j += dy;
i += dx;
if (j < 0 || i < 0 || j >= MAXY || i >= MAXX || !grid[j][i]) break;
} while (--d);
if (!d) return 1;
}
return 0;
}
void menu(void)
{
char c;
char mlen[] = {8,9,4,4,4};
char mchoice = 0;
char moffset = 0;
// set and enable DLI
waitvbi();
menuflg = 1; // switch DLI colors
clearblock(0, MENULINE, 40, 14);
statusline("Choose Menu...");
while (c != 27)
{
gprintxy14(1,MENULINE,"Continue Highscore Info Help Quit");
invertblock((2 * mchoice) + moffset + 1, MENULINE + 1, mlen[mchoice], 14);
c = cgetc();
switch(c)
{
case 30: // cursor left
if (mchoice > 0)
{
--mchoice;
moffset -= mlen[mchoice];
}
break;
case 31: // cursor right
if (mchoice < 4)
{
moffset += mlen[mchoice];
++mchoice;
}
break;
case 155: // enter
switch (mchoice)
{
case 0:
c = 27; // exit menu
break;
case 1:
topscores(score);
break;
case 2:
info();
break;
case 3:
help();
break;
case 4:
quit();
c = 27;
break;
}
break;
}
}
waitvbi();
menuflg = 0;
clearblock(0, MENULINE, 40, 14);
printscoreline();
statusline(helpmsg);
showscore();
}
int tunnel(cmd)
char cmd;
{
int dy, dx, distance;
int i,j,d;
if (oldtime <= 0)
{
statusline ("T I M E O U T !!");
i = cgetc();
return(0); // timeout
}
switch(cmd)
{
case 27: /* ESC */
menu();
if (exitflg)
return(0);
else
return(1);
break;
case 't':
case 'T': /* top scores */
topscores(score);
return(1);
break;
case 'm': /* sound off */
case 'M':
if (soundflg)
{
stopmusic();
statusline("music off");
}
else
{
startmusic();
statusline("music on");
}
return(1);
break;
case 's': /* key left */
case 'S':
case '4':
dy = 0;
dx = -1;
break;
case 'x': /* key down */
case 'X':
case '2':
dy = 1;
dx = 0;
break;
case 'e': /* key up */
case 'E':
case '8':
dy = -1;
dx = 0;
break;
case 'd': /* key right */
case 'D':
case '6':
dy = 0;
dx = 1;
break;
case 'z': /* key left/down */
case 'Z':
case '1':
dy = 1;
dx = -1;
break;
case 'c': /* key right/down */
case 'C':
case '3':
dy = dx = 1;
break;
case 'w': /* key left/up */
case 'W':
case '7':
dy = dx = -1;
break;
case 'r': /* key right/up */
case 'R':
case '9':
dy = -1;
dx = 1;
break;
case 'p':
case 'P':
allmoves = !allmoves;
showmoves(allmoves);
return(1);
case 'q':
case 'Q':
quit();
if (exitflg)
return(0);
else
return(1);
case 'o':
case 'O':
earthquake();
return(1);
case '?':
help();
return(1);
case 'i':
case 'I':
info();
return(1);
case 'a':
case 'A':
refresh();
/* refresh; falls through to return */
default:
return(1);
}
distance = (y + dy >= 0 && x + dx >= 0 && y + dy < MAXY && x + dx < MAXX) ? grid[y+dy][x+dx] : 0;
j = y;
i = x;
d = distance;
do {
j += dy;
i += dx;
if (j >= 0 && i >= 0 && j < MAXY && i < MAXX && grid[j][i])
;
else if (!othermove(dy, dx)) { /* no other good move */
j -= dy;
i -= dx;
gputcxy(x,y,' ');
while (y != j || x != i) {
y += dy;
x += dx;
++score;
++levelscore;
if (score > highscore)
highscore = score;
gputcxy(x,y,' ');
}
gputcxy(x,y,'*');
showscore();
topscores(score);
return(0);
}
else
{
botmsg("Bad move!",1);
return(1);
}
} while (--d);
if (allmoves) showmoves(0);
if (havebotmsg) { /* if old bottom msg exists */
printscoreline();
statusline(helpmsg);
havebotmsg = 0;
}
gputcxy(x,y,' ');
do {
y += dy;
x += dx;
++score;
++levelscore;
if (score > highscore)
highscore = score;
grid[y][x] = 0;
gputcxy(x,y,' ');
} while (--distance);
gputcxy(x,y,MK);
if (allmoves) showmoves(1);
showscore();
return(1);
}
void intro(void)
{
char y;
char x;
unsigned char *chptr;
unsigned char *mptr;
memset((char*) (*(unsigned int*)0x58), 0, 40 * 8); // clear levelname
chptr = (char*) TITLEBASE;
mptr = (char*) ((*(unsigned int*)0x58) + (40*8)+1);
disable_os();
for (y = 0; y < 144; ++y)
{
memcpy(mptr,chptr,MAXX);
chptr += MAXX;
mptr += 40;
}
enable_os();
statusline("ATARI greed version 0.91");
pause(90);
statusline("press key to start game...");
x = cgetc();
}
char getcommand(void)
{
char c = 0;
char j = 0;
while (c == 0)
{
if ((*(char*) 0x2fc) != 0xFF) // key pressed?
{
c = cgetc();
}
j = *(char*) 0x278;
if (j != 0xf) // Joystick?
{
switch(j)
{
case 14:
c = 'e'; // up
break;
case 7:
c = 'd'; // right
break;
case 13:
c = 'x'; // down
break;
case 11:
c = 's'; // left
break;
case 9:
c = 'z'; // left/down
break;
case 5:
c = 'c'; // right/down
break;
case 10:
c = 'w'; // left/up
break;
case 6:
c = 'r'; // right/up
break;
}
}
showtime();
if (oldtime <= 0) c = ' ';
}
return(c);
}
int bittest(val,bit)
int val, bit;
{
return !(val & (1 << bit));
}
char getplayfield(char x, char y)
{
int* p;
char c;
p = (int*) (levelbuf + 35);
while (bittest(*p, c = rnd(9)))
;
p = (int*) (levelbuf + 40 + (y * 5 ) + (x / 8));
return(bittest(*p, 7 - (x % 8)) ? 0 : c);
}
int main(void) {
int val = 1;
int dllist_old;
graphics(8);
highscore = 0;
*(char*) 0x02c6 = 0;
*(char*) 0x02c5 = 0xF;
dllist_old = *(int*) 0x230;
memmove((char*) 0x2800, &dllist, sizeof(dllist));
*(int*) 0x230 = (int) 0x2800;
// set and enable DLI
*(int*) 0x200 = (int) &dli01;
*(char*) 0xd40e = 0xc0;
loadscore();
loadlevel(level);
startmusic();
while(!exitflg)
{
intro();
statusline("starting new game...");
if (level != oldlevel)
loadlevel(level);
score = levelscore = maxvalue = 0;
maxtime = levelbuf[39] * 60; // timeout minutes
srand(*(int*) 0xD20A); /* initalize seed with random number, ATARI specific */
for (y=0; y < MAXY; ++y)
for (x=0; x < MAXX; ++x)
if (grid[y][x] = getplayfield(x,y))
++maxvalue;
while (!getplayfield(y = rnd(MAXY)-1, x = rnd(MAXX)-1))
; /* random initial location */
grid[y][x] = 0; /* eat initial square */
refresh();
resettime();
while((val = tunnel(getcommand())) > 0)
continue;
}
topscores(score);
stopmusic();
savescore();
// disable DLI
*(char*) 0xd40e = 0x60; // NMIEN VBI and RESET on
graphics(0);
exit(0);
}
}}}
!! Assembler Code (ca65)
!!! Display List Interrupts
{{{
.include "/Users/cas/develop/cc65/asminc/atari.inc"
.export _dli01
.export _dli02
.export _dli03
.export _dli04
.export _dli05
.export _menuflg
.export _fnt7
.export _fnt14
_fnt7: .incbin "seven.fnt"
_fnt14: .incbin "fourteen.fnt"
_menuflg: .byte 0
.proc _dli01
pha
txa
pha
nop
nop
ldx DLI02cnt2
L1:
lda DLI02fade2-1,x
sta WSYNC
sta COLBK
sta COLPF2
nop
dex
bne L1
lda #<_dli02
ldx #>_dli02
sta VDSLST
stx VDSLST+1
pla
tax
pla
rti
.endproc
DLI02fade: .byte $9E, $9C, $9A, $98, $96, $94, $92, $90
DLI02fadem: .byte $0E, $0C, $0A, $08, $06, $04, $02, $00
DLI02cnt: .byte 8
DLI02fade2: .byte $00, $02, $04, $06, $0E
DLI02fade2m: .byte $90, $92, $94, $96, $9E
DLI02fadepm: .byte $98, $98, $9A, $9C, $9E
DLI02cnt2: .byte 5
.proc _dli02
pha
txa
pha
ldx DLI02cnt
dex
L1:
lda _menuflg
beq X1
lda DLI02fadem-1,x
bne X2
X1:
lda DLI02fade-1,x
X2:
sta WSYNC
sta COLBK
sta COLPF2
dex
bne L1
sta WSYNC
sta COLPM0
sta COLPM1
lda #$2C
sta HPOSP0
lda #$CC
sta HPOSP1
lda #$FF
sta GRAFP0
sta GRAFP1
lda %00000010
sta GRACTL
ldx DLI02cnt2
L2:
lda DLI02fade2-1,x
sta WSYNC
sta COLPF2
lda DLI02fadepm-1,x
sta COLPM0
sta COLPM1
dex
bne L2
lda #<_dli03
ldx #>_dli03
sta VDSLST
stx VDSLST+1
pla
tax
pla
rti
.endproc
DLI03fade: .byte $90, $92, $94, $96, $98, $9A, $9C, $9E
DLI03fadem: .byte $00, $02, $04, $06, $08, $0A, $0C, $0E
DLI03cnt: .byte 8
DLI03fade2m: .byte $9E, $96, $94, $92, $90
DLI03fadepm: .byte $9E, $9C, $9A, $98, $98
DLI03fade2: .byte $0E, $06, $04, $02, $01
DLI03cnt2: .byte 5
.proc _dli03
pha
txa
pha
ldx DLI03cnt2
L1:
lda DLI03fade2-1,x
sta WSYNC
sta COLPF2
lda DLI03fadepm-1,x
sta COLPM0
sta COLPM1
dex
bne L1
sta WSYNC
lda #0
sta HPOSP0
sta HPOSP0
lda #$0
sta GRAFP0
sta GRAFP1
ldx DLI03cnt
dex
L2:
lda _menuflg
beq X1
lda DLI03fadem-1,x
bne X2
X1:
lda DLI03fade-1,x
X2:
sta WSYNC
sta COLBK
sta COLPF2
dex
bne L2
sta WSYNC
stx COLBK
stx COLPF2
lda #<_dli04
sta VDSLST
lda #>_dli04
sta VDSLST+1
pla
tax
pla
rti
.endproc
.proc _dli04
pha
txa
pha
ldx DLI02cnt2
L4:
lda _menuflg
beq X1
lda DLI02fade2m-1,x
bne X2
X1:
lda DLI02fade2-1,x
X2:
sta WSYNC
sta COLBK
sta COLPF2
dex
bne L4
stx WSYNC
stx COLBK
stx COLPF2
lda #<_dli05
sta VDSLST
lda #>_dli05
sta VDSLST+1
pla
tax
pla
rti
.endproc
.proc _dli05
pha
txa
pha
ldx DLI03cnt2
L4:
lda _menuflg
bne X1
lda DLI03fade2-1,x
bne X2
X1:
nop
nop
lda DLI03fade2m-1,x
X2:
sta WSYNC
sta COLBK
sta COLPF2
dex
bne L4
sta WSYNC
stx COLBK
stx COLPF2
lda #<_dli01
sta VDSLST
lda #>_dli01
sta VDSLST+1
pla
tax
pla
rti
.endproc
}}}
!! Access RAM under OS
{{{
; RAMXL
; routines to access RAM under OS-ROM
.word $FFFF
.word $2a00
.word end-1
.org $2a00
intv = $FFF0
nmiv = $FFFA
resv = $FFFC
irqv = $FFFE
portb = $D301
nmien = $D40E
on: jmp os_on
x_save: .byte $00
off: jmp os_off
;
doirq: stx x_save
tax ; a - irq #
jsr os_on
lda intv,x
sta jmpvec+1
lda intv+1,x
sta jmpvec+2
lda #>return
pha
lda #<return
pha
cli
php
;
jmpvec: jmp $FFFF ; -- will be overwritten
;
return: jsr os_off
ldx x_save
pla
rti
;
nmi_han: pha
lda #$0A
jmp doirq
;
irq_han: pha
lda #$0E
jmp doirq
;
os_on: lda portb
ora #$01 ; toggle OS bit on
sta portb
rts
;
os_off: lda portb
and #$FE ; toggle OS bit off
sta portb
rts
;
install: lda #0
sta nmien
sei
jsr os_off
lda #<nmi_han
sta nmiv
lda #>nmi_han
sta nmiv+1
lda #<irq_han
sta irqv
lda #>irq_han
sta irqv+1
jsr os_on
cli
lda #$40
sta nmien
rts
memcpy:
src = $f0
dst = $f2
cnt = $f4
; src = $F0-$F1
; dst = $F2-$F3
; cnt = $F4-$F5
ldy #0
L1:
lda (src),y
sta (dst),y
inc src
bne L2
inc src+1
L2:
inc dst
bne L3
inc dst+1
L3:
dec cnt
bne L1
dec cnt+1
bpl L1
rts
movetitle:
lda #<titlestart
sta src
lda #>titlestart
sta src+1
lda #<$D800 ; $D800
sta dst
lda #>$D800
sta dst+1
lda #<5472
sta cnt
lda #>5472
sta cnt+1
jsr install
jsr os_off
jsr memcpy
jsr os_on
rts
end:
;---------------------------
.word $FFFF
.word $3000
.word end2-1
.org $3000
titlestart:
.incbin "titelbild.raw"
end2:
.word $FFFF
.word $02e2
.word end3-1
.org $02e2
.word movetitle
}}}
!! Level Files
!!! Level 1 (Example)
{{{
; level 0 for ATARI Greed
; Version 1.0
; total length 130 bytes
; Magic Code, 'AG'
magic: .byte "AG"
; percent needed to complete level
percent: .byte 65
; Level Title 32 Chars
title: .byte "aller anfang ist einfach..."
.res $20 - (* - title)
; Possible values (bitfield), 10 bits
; FEDCBA9876543210
values: .word %0000001111111111 ; 0-9
; Possible goodies (bitfield), 16 Bits
; FEDCBA9876543210
goodies: .word %0000000000000000 ; no goodies
; Time in minutes
time: .byte 8 ; 8 Minutes time
; levelmask 5 x 18 bytes (bitfield)
levelmask: .incbin "level00.raw"
}}}