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 scored 6th place at the 2004 ABBUC Software contest
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
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)
/* -*- 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); }
.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
; 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 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"