commit ae702381be52f070f2cf345e2c0dfbdb15c174f1 Author: Pawel Kalinowski Date: Tue Jun 19 23:44:59 2018 +0200 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.project b/.project new file mode 100644 index 0000000..d65b7f3 --- /dev/null +++ b/.project @@ -0,0 +1,12 @@ + + + no_internet + + + Atari800 + + + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6bb8a29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..da785e6 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# no_internet diff --git a/art/CHAR.FNT b/art/CHAR.FNT new file mode 100644 index 0000000..d98e289 Binary files /dev/null and b/art/CHAR.FNT differ diff --git a/art/CHAR2.FNT b/art/CHAR2.FNT new file mode 100644 index 0000000..a9314a3 Binary files /dev/null and b/art/CHAR2.FNT differ diff --git a/art/CHAR3.FNT b/art/CHAR3.FNT new file mode 100644 index 0000000..4d7263d Binary files /dev/null and b/art/CHAR3.FNT differ diff --git a/art/CHAR4.FNT b/art/CHAR4.FNT new file mode 100644 index 0000000..67fa183 Binary files /dev/null and b/art/CHAR4.FNT differ diff --git a/art/CHAR5.FNT b/art/CHAR5.FNT new file mode 100644 index 0000000..77b1cb0 Binary files /dev/null and b/art/CHAR5.FNT differ diff --git a/art/CHAR6.FNT b/art/CHAR6.FNT new file mode 100644 index 0000000..463578b Binary files /dev/null and b/art/CHAR6.FNT differ diff --git a/art/CHAR6.FNT.cnv b/art/CHAR6.FNT.cnv new file mode 100644 index 0000000..abc6c71 --- /dev/null +++ b/art/CHAR6.FNT.cnv @@ -0,0 +1,40 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 23:13:09 CEST 2018 +converterDirection=FILES_TO_IMAGE +filesConverterParameters.converterId=com.wudsn.ide.gfx.converter.generic.CharSet1x1HiresConverter +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=1 +filesConverterParameters.sourceFiles.0.path=CHAR6.FNT +filesConverterParameters.sourceFiles.0.offset=0 +filesConverterParameters.imageFilePath=CHAR6.FNT.png +filesConverterParameters.columns=32 +filesConverterParameters.rows=4 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=2 +filesConverterParameters.paletteRGBs.0.red=0 +filesConverterParameters.paletteRGBs.0.green=0 +filesConverterParameters.paletteRGBs.0.blue=0 +filesConverterParameters.paletteRGBs.1.red=255 +filesConverterParameters.paletteRGBs.1.green=255 +filesConverterParameters.paletteRGBs.1.blue=255 +imageConverterParameters.converterId= +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath= +imageConverterParameters.targetFiles=0 +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script= diff --git a/art/CHAR6.FNT.png b/art/CHAR6.FNT.png new file mode 100644 index 0000000..ecdb176 Binary files /dev/null and b/art/CHAR6.FNT.png differ diff --git a/art/cact0.bmp b/art/cact0.bmp new file mode 100644 index 0000000..3b783e8 Binary files /dev/null and b/art/cact0.bmp differ diff --git a/art/cact0.bmp.cnv b/art/cact0.bmp.cnv new file mode 100644 index 0000000..05fd771 --- /dev/null +++ b/art/cact0.bmp.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Sun Jun 03 03:25:42 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=cact2.bmp +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=cact2.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=false +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= data.getImageDataHeight()-1; y >\= 0; y--) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/cact0.data b/art/cact0.data new file mode 100644 index 0000000..4582a4c Binary files /dev/null and b/art/cact0.data differ diff --git a/art/cact0.xcf b/art/cact0.xcf new file mode 100644 index 0000000..56822a0 Binary files /dev/null and b/art/cact0.xcf differ diff --git a/art/cact1.bmp b/art/cact1.bmp new file mode 100644 index 0000000..6db277f Binary files /dev/null and b/art/cact1.bmp differ diff --git a/art/cact1.data b/art/cact1.data new file mode 100644 index 0000000..46b3791 Binary files /dev/null and b/art/cact1.data differ diff --git a/art/cact1.xcf b/art/cact1.xcf new file mode 100644 index 0000000..18107cf Binary files /dev/null and b/art/cact1.xcf differ diff --git a/art/cact2.bmp b/art/cact2.bmp new file mode 100644 index 0000000..b1b7034 Binary files /dev/null and b/art/cact2.bmp differ diff --git a/art/cact2.bmp.cnv b/art/cact2.bmp.cnv new file mode 100644 index 0000000..05fd771 --- /dev/null +++ b/art/cact2.bmp.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Sun Jun 03 03:25:42 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=cact2.bmp +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=cact2.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=false +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= data.getImageDataHeight()-1; y >\= 0; y--) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/cact2.data b/art/cact2.data new file mode 100644 index 0000000..2fcdc55 Binary files /dev/null and b/art/cact2.data differ diff --git a/art/cact2.xcf b/art/cact2.xcf new file mode 100644 index 0000000..6c131c2 Binary files /dev/null and b/art/cact2.xcf differ diff --git a/art/dino.data b/art/dino.data new file mode 100644 index 0000000..3668783 Binary files /dev/null and b/art/dino.data differ diff --git a/art/dino.xcf b/art/dino.xcf new file mode 100644 index 0000000..6e50989 Binary files /dev/null and b/art/dino.xcf differ diff --git a/art/dino0.data b/art/dino0.data new file mode 100644 index 0000000..45e3cbc Binary files /dev/null and b/art/dino0.data differ diff --git a/art/dino0.png b/art/dino0.png new file mode 100644 index 0000000..dfcb9d2 Binary files /dev/null and b/art/dino0.png differ diff --git a/art/dino0.png.cnv b/art/dino0.png.cnv new file mode 100644 index 0000000..c7428a7 --- /dev/null +++ b/art/dino0.png.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 16:04:29 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=dino0.png +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=dino0.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= 0; y < data.getImageDataHeight(); y++) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/dino0.xcf b/art/dino0.xcf new file mode 100644 index 0000000..622c0bb Binary files /dev/null and b/art/dino0.xcf differ diff --git a/art/dino1.data b/art/dino1.data new file mode 100644 index 0000000..357cd36 Binary files /dev/null and b/art/dino1.data differ diff --git a/art/dino1.png b/art/dino1.png new file mode 100644 index 0000000..fe9f37a Binary files /dev/null and b/art/dino1.png differ diff --git a/art/dino1.png.cnv b/art/dino1.png.cnv new file mode 100644 index 0000000..cf82a3a --- /dev/null +++ b/art/dino1.png.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 16:04:28 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=dino1.png +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=dino1.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= 0; y < data.getImageDataHeight(); y++) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/dino1.xcf b/art/dino1.xcf new file mode 100644 index 0000000..acc7d48 Binary files /dev/null and b/art/dino1.xcf differ diff --git a/art/dino2.data b/art/dino2.data new file mode 100644 index 0000000..603ccc8 Binary files /dev/null and b/art/dino2.data differ diff --git a/art/dino2.png b/art/dino2.png new file mode 100644 index 0000000..f23babc Binary files /dev/null and b/art/dino2.png differ diff --git a/art/dino2.png.cnv b/art/dino2.png.cnv new file mode 100644 index 0000000..1f615e7 --- /dev/null +++ b/art/dino2.png.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 16:04:23 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=dino2.png +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=dino2.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= 0; y < data.getImageDataHeight(); y++) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/dino2.xcf b/art/dino2.xcf new file mode 100644 index 0000000..89ce0a4 Binary files /dev/null and b/art/dino2.xcf differ diff --git a/art/dino_mask0.data b/art/dino_mask0.data new file mode 100644 index 0000000..716f120 Binary files /dev/null and b/art/dino_mask0.data differ diff --git a/art/dino_mask0.png b/art/dino_mask0.png new file mode 100644 index 0000000..bf5a4a5 Binary files /dev/null and b/art/dino_mask0.png differ diff --git a/art/dino_mask0.png.cnv b/art/dino_mask0.png.cnv new file mode 100644 index 0000000..d24247f --- /dev/null +++ b/art/dino_mask0.png.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 16:04:32 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=dino_mask0.png +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=dino_mask0.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= 0; y < data.getImageDataHeight(); y++) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/dino_mask0.xcf b/art/dino_mask0.xcf new file mode 100644 index 0000000..fa078b1 Binary files /dev/null and b/art/dino_mask0.xcf differ diff --git a/art/dino_mask1.data b/art/dino_mask1.data new file mode 100644 index 0000000..5947284 Binary files /dev/null and b/art/dino_mask1.data differ diff --git a/art/dino_mask1.png b/art/dino_mask1.png new file mode 100644 index 0000000..6a6ab69 Binary files /dev/null and b/art/dino_mask1.png differ diff --git a/art/dino_mask1.png.cnv b/art/dino_mask1.png.cnv new file mode 100644 index 0000000..a8ac4f3 --- /dev/null +++ b/art/dino_mask1.png.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 16:04:31 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=dino_mask1.png +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path=dino_mask1.data +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= 0; y < data.getImageDataHeight(); y++) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/dino_mask1.xcf b/art/dino_mask1.xcf new file mode 100644 index 0000000..e21dd22 Binary files /dev/null and b/art/dino_mask1.xcf differ diff --git a/art/dino_mask2.data b/art/dino_mask2.data new file mode 100644 index 0000000..fc017b4 Binary files /dev/null and b/art/dino_mask2.data differ diff --git a/art/dino_mask2.png b/art/dino_mask2.png new file mode 100644 index 0000000..493e3e5 Binary files /dev/null and b/art/dino_mask2.png differ diff --git a/art/dino_mask2.png.cnv b/art/dino_mask2.png.cnv new file mode 100644 index 0000000..f7eec64 --- /dev/null +++ b/art/dino_mask2.png.cnv @@ -0,0 +1,42 @@ +#WUDSN IDE Converter Parameters +#Fri Jun 01 16:10:03 CEST 2018 +converterDirection=IMAGE_TO_FILES +filesConverterParameters.converterId= +filesConverterParameters.imageAspect.factorX=1 +filesConverterParameters.imageAspect.factorY=1 +filesConverterParameters.displayAspect.factorX=1 +filesConverterParameters.displayAspect.factorY=1 +filesConverterParameters.displayShrinkToFit=false +filesConverterParameters.displayZoomToFit=true +filesConverterParameters.sourceFiles=0 +filesConverterParameters.imageFilePath= +filesConverterParameters.columns=40 +filesConverterParameters.rows=24 +filesConverterParameters.spacingColor.red=0 +filesConverterParameters.spacingColor.green=0 +filesConverterParameters.spacingColor.blue=128 +filesConverterParameters.spacingWidth=0 +filesConverterParameters.palette=HIRES_1 +filesConverterParameters.paletteType=ATARI_DEFAULT +filesConverterParameters.paletteRGBs=0 +imageConverterParameters.converterId=com.wudsn.ide.gfx.converter.atari8bit.LinearBitMapGraphics8Converter +imageConverterParameters.imageAspect.factorX=1 +imageConverterParameters.imageAspect.factorY=1 +imageConverterParameters.displayAspect.factorX=1 +imageConverterParameters.displayAspect.factorY=1 +imageConverterParameters.displayShrinkToFit=false +imageConverterParameters.displayZoomToFit=true +imageConverterParameters.imageFilePath=dino_mask2.png +imageConverterParameters.targetFiles=10 +imageConverterParameters.targetFiles.0.path= +imageConverterParameters.targetFiles.1.path= +imageConverterParameters.targetFiles.2.path= +imageConverterParameters.targetFiles.3.path= +imageConverterParameters.targetFiles.4.path= +imageConverterParameters.targetFiles.5.path= +imageConverterParameters.targetFiles.6.path= +imageConverterParameters.targetFiles.7.path= +imageConverterParameters.targetFiles.8.path= +imageConverterParameters.targetFiles.9.path= +imageConverterParameters.useDefaultScript=true +imageConverterParameters.script=function convertToFileData(data) {\r\n\tvar bpsl \= (data.getImageDataWidth() + 7) / 8;\r\n\tvar bytes \= [];\r\n\tvar offset \= 0;\r\n\tfor (var y \= 0; y < data.getImageDataHeight(); y++) {\r\n\t for (var x \= 0; x < data.getImageDataWidth(); x \= x + 8) {\r\n\t\t\tvar b \= 0;\r\n\t\t\tfor (var p \= 0; p < 8; p++) {\r\n\t\t\t var color;\r\n\t\t\t color \= data.getPixel(x + p, y);\r\n\t\t\t if (color \!\= 0) {\r\n\t\t\t\t\tb \= b | 1 << 7 - p;\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\tbytes[offset++] \= b;\r\n\t }\r\n\t}\r\n\tdata.setTargetFileObject(0, bytes);\r\n} diff --git a/art/dino_mask2.xcf b/art/dino_mask2.xcf new file mode 100644 index 0000000..b9f607f Binary files /dev/null and b/art/dino_mask2.xcf differ diff --git a/art/gnd_0.data b/art/gnd_0.data new file mode 100644 index 0000000..5b237a3 Binary files /dev/null and b/art/gnd_0.data differ diff --git a/art/gnd_0.png b/art/gnd_0.png new file mode 100644 index 0000000..121b078 Binary files /dev/null and b/art/gnd_0.png differ diff --git a/art/gnd_1.data b/art/gnd_1.data new file mode 100644 index 0000000..a5d6475 Binary files /dev/null and b/art/gnd_1.data differ diff --git a/art/gnd_1.png b/art/gnd_1.png new file mode 100644 index 0000000..3eba67d Binary files /dev/null and b/art/gnd_1.png differ diff --git a/art/gnd_2.data b/art/gnd_2.data new file mode 100644 index 0000000..42b4715 Binary files /dev/null and b/art/gnd_2.data differ diff --git a/art/gnd_2.png b/art/gnd_2.png new file mode 100644 index 0000000..3032017 Binary files /dev/null and b/art/gnd_2.png differ diff --git a/art/ground.xcf b/art/ground.xcf new file mode 100644 index 0000000..cc2d79a Binary files /dev/null and b/art/ground.xcf differ diff --git a/artwork.asm b/artwork.asm new file mode 100644 index 0000000..03a11a6 --- /dev/null +++ b/artwork.asm @@ -0,0 +1,76 @@ +; @com.wudsn.ide.asm.mainsourcefile=ni.asm +;------------------------------------------------------------- + ;24x24 pix = 3x3 chars (3x24 bytes) + .rept 3, # +dino:1 + ins 'art/dino:1.data' + .endr + + .rept 3, # +dino_mask:1 + ins 'art/dino_mask:1.data' + .endr + +dino_tab_l + .rept 3, # + .by dino:1 + .endr + +dino_mask_tab_l + .rept 3, # + .by dino_mask:1 + .endr + +dino_back ; background save for dino sprite +:3*24 .by 0 +dino_save_y .by 0 + +;------------------------------ +; ground pictures, 8x16 px = 2x1 chars (2x8 bytes) + .rept 3, # +gnd_:1 + ins 'art/gnd_:1.data' + .endr +gnd_tab_l + .rept 3, # + .by gnd_:1 + .endr +scr_addrs_l +:sh .by <(screen+#*sw) +scr_addrs_h +:sh .by >(screen+#*sw) +;------------------------------ +; cacti pictures, height and width variable +; cactX.data is flipped vertically +cacti = 3 + + .rept cacti, # +cact:1 + ins 'art/cact:1.data' + .endr + +cact_widths ; widths of cactii in bytes + .by 4, 4, 8 +cact_heights ; heights of cactii in lines + .by 35,48,35 +cact_tab_l + .rept cacti, # + .by cact:1 + .endr + diff --git a/atari.asm b/atari.asm new file mode 100644 index 0000000..9258fe5 --- /dev/null +++ b/atari.asm @@ -0,0 +1,483 @@ +/* +scr48 = %00111111 ;screen 48b +scr40 = %00111110 ;screen 40b +scr32 = %00111101 ;screen 32b +*/ + +* --------------------------------------------------------------------------------------------- +* --- GTIA +* --------------------------------------------------------------------------------------------- +HPOSP0 = $D000 ; pozioma pozycja gracza 0 (Z) +HPOSP1 = $D001 ; pozioma pozycja gracza 1 (Z) +HPOSP2 = $D002 ; pozioma pozycja gracza 2 (Z) +HPOSP3 = $D003 ; pozioma pozycja gracza 3 (Z) +HPOSM0 = $D004 ; pozioma pozycja pocisku 0 (Z) +HPOSM1 = $D005 ; pozioma pozycja pocisku 1 (Z) +HPOSM2 = $D006 ; pozioma pozycja pocisku 2 (Z) +HPOSM3 = $D007 ; pozioma pozycja pocisku 3 (Z) +SIZEP0 = $D008 ; poziomy rozmiar gracza 0 (Z) +SIZEP1 = $D009 ; poziomy rozmiar gracza 1 (Z) +SIZEP2 = $D00A ; poziomy rozmiar gracza 2 (Z) +SIZEP3 = $D00B ; poziomy rozmiar gracza 3 (Z) +SIZEM = $D00C ; poziomy rozmiar pocisków (Z) +GRAFP0 = $D00D ; rejestr grafiki gracza 0 (Z) +GRAFP1 = $D00E ; rejestr grafiki gracza 1 (Z) +GRAFP2 = $D00F ; rejestr grafiki gracza 2 (Z) +GRAFP3 = $D010 ; rejestr grafiki gracza 3 (Z) +GRAFM = $D011 ; rejestr grafiki pocisków (Z) +COLPM0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z) +COLPM1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z) +COLPM2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z) +COLPM3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z) +COLPF0 = $D016 ; rejestr koloru pola gry 0 (Z) +COLPF1 = $D017 ; rejestr koloru pola gry 1 (Z) +COLPF2 = $D018 ; rejestr koloru pola gry 2 (Z) +COLPF3 = $D019 ; rejestr koloru pola gry 3 (Z) +COLBAK = $D01A ; rejestr koloru tła (Z) + +COLOR0 = colpf0 +COLOR1 = colpf1 +COLOR2 = colpf2 +COLOR3 = colpf3 + +KOLM0PF = $D000 ; kolizja pocisku 0 z polem gry (O) +KOLM1PF = $D001 ; kolizja pocisku 1 z polem gry (O) +KOLM2PF = $D002 ; kolizja pocisku 2 z polem gry (O) +KOLM3PF = $D003 ; kolizja pocisku 3 z polem gry (O) +KOLP0PF = $D004 ; kolizja gracza 0 z polem gry (O) +KOLP1PF = $D005 ; kolizja gracza 1 z polem gry (O) +KOLP2PF = $D006 ; kolizja gracza 2 z polem gry (O) +KOLP3PF = $D007 ; kolizja gracza 3 z polem gry (O) +KOLM0P = $D008 ; kolizja pocisku 0 z graczem (O) +KOLM1P = $D009 ; kolizja pocisku 1 z graczem (O) +KOLM2P = $D00A ; kolizja pocisku 2 z graczem (O) +KOLM3P = $D00B ; kolizja pocisku 3 z graczem (O) +KOLP0P = $D00C ; kolizja gracza 0 z innym graczem (O) +KOLP1P = $D00D ; kolizja gracza 1 z innym graczem (O) +KOLP2P = $D00E ; kolizja gracza 2 z innym graczem (O) +KOLP3P = $D00F ; kolizja gracza 3 z innym graczem (O) +TRIG0 = $D010 ; stan przycisku joysticka 0 (O) +TRIG1 = $D011 ; stan przycisku joysticka 1 (O) +TRIG3 = $D013 ; znacznik dołączenia cartridge-a (O) +PAL = $D014 ; znacznik systemu TV (O) + +GTICTL = $D01B ; rejestr kontroli układu GTIA +GTIACTL = gtictl + +VDELAY = $D01C ; licznik opóźnienia pionowego P/MG +PMCNTL = $D01D ; rejestr kontroli graczy i pocisków +HITCLR = $D01E ; rejestr kasowania rejestrów kolizji +CONSOL = $D01F ; rejestr stanu klawiszy konsoli Start (bit 0), Select (bit 1), Option (bit 2) + +* --------------------------------------------------------------------------------------------- +* --- POKEY +* --------------------------------------------------------------------------------------------- + +IRQENS = $0010 ; rejestr-cień IRQEN +IRQSTAT = $0011 ; rejestr-cień IRQST + +AUDF3 = $D204 ; częstotliwość pracy generatora 3 (Z) +AUDCTL = $D208 ; rejestr kontroli generatorów dźwięku (Z) +STIMER = $D209 ; rejestr zerowania liczników (Z) +KBCODE = $D209 ; kod ostatnio naciśniętego klawisza (O) +SKSTRES = $D20A ; rejestr statusu złącza szeregowego (Z) +RANDOM = $D20A ; rejestr liczby losowej (O) +SEROUT = $D20D ; szeregowy rejestr wyjściowy (Z) +SERIN = $D20D ; szeregowy rejestr wejściowy (O) +IRQEN = $D20E ; zezwolenie przerwań IRQ (Z) +IRQST = $D20E ; status przerwań IRQ (O) +SKCTL = $D20F ; rejestr kontroli złącza szeregowego (Z) +SKSTAT = $D20F ; rejestr statusu złącza szeregowego (O) + +* --------------------------------------------------------------------------------------------- +* --- PIA +* --------------------------------------------------------------------------------------------- +PORTA = $D300 ; port A układu PIA +PORTB = $D301 ; port B układu PIA +PACTL = $D302 ; rejestr kontroli portu A +PBCTL = $D303 ; rejestr kontroli portu B + +* --------------------------------------------------------------------------------------------- +* --- ANTIC +* --------------------------------------------------------------------------------------------- +DMACTL = $D400 ; rejestr kontroli dostępu do pamięci +CHRCTL = $D401 ; rejestr kontroli wyświetlania znaków +DLPTR = $D402 ; adres programu ANTIC-a +HSCROL = $D404 ; znacznik poziomego przesuwu obrazu +VSCROL = $D405 ; znacznik pionowego przesuwu obrazu +PMBASE = $D407 ; adres pamięci graczy i pocisków +CHBASE = $D409 ; adres zestawu znaków +WSYNC = $D40A ; znacznik oczekiwania na synchronizację poziomą +VCOUNT = $D40B ; licznik linii obrazu +LPENH = $D40C ; poziome położenie pióra świetlengo +LPENV = $D40D ; pionowe położenie pióra świetlnego +NMIEN = $D40E ; rejestr zezwoleń na przerwania NMI +NMIST = $D40F ; rejestr statusu przerwań NMI + +;------------------------------------- +;additional system variables +;------------------------------------- +COLPM0S = $02C0 ;- - rejestr-cień COLPM0 +COLPM1S = $02C1 ;- - rejestr-cień COLPM1 +COLPM2S = $02C2 ;- - rejestr-cień COLPM2 +COLPM3S = $02C3 ;- - rejestr-cień COLPM3 +COLPF0S = $02C4 ;- - rejestr-cień COLPF0 +COLPF1S = $02C5 ;- - rejestr-cień COLPF1 +COLPF2S = $02C6 ;- - rejestr-cień COLPF2 +COLPF3S = $02C7 ;- - rejestr-cień COLPF3 + +COLBAKS = $02C8 +GTICTLS = $026F ;- - rejestr-cień GTIACTL + +DMACTLS = $022F ;- - rejestr kontroli dostępu do pamięci - cień +DLPTRS = $0230 ;- - adres programu ANTIC-a - cień +CHBAS = $02F4 ;- - rejestr-cień CHBASE +KBCODES = $02FC ;- - rejestr-cień KBCODE + +SETVBV = $E45C +XITVBV = $E462 +SYSVBV = $E45F +RTCLOK = $0012 + +MEMTOP = $02E5 ;- - adres górnej granicy wolnej pamięci RAM +MEMLO = $02E7 ;- - adres dolnej granicy wolnej pamięci RAM + +JSTICK0 = $0278 ;- - położenie joysticka 0 +JSTICK1 = $0279 ;- JSTICK1 - położenie joysticka 1 +JSTICK2 = $027A ;- JSTICK2 - położenie joysticka 0 +JSTICK3 = $027B ;- JSTICK3 - położenie joysticka 1 +PTRIG0 = $027C ;- PTRIG0 - przycisk potencjometru 0 +PTRIG1 = $027D ;- PTRIG1 - przycisk potencjometru 1 +TRIG0S = $0284 ;- TRIG0S - przycisk joysticka 0, rejestr-cień TRIG0 +TRIG1S = $0285 ;- TRIG1S - przycisk joysticka 1, rejestr-cień TRIG1 +TRIG2S = $0286 ;- TRIG2S - rejestr-cień TRIG0 +TRIG3S = $0287 ;- TRIG3S - rejestr-cień TRIG1 + + +/* +Rejestry OS w pamięci RAM + + $08 - WARMST - znacznik gorącego startu + $0E - APPMHI - najwyższy adres RAM zajęty przez program + $10 - IRQENS - rejestr-cień IRQEN + $11 - IRQSTAT - rejestr-cień IRQST + $12 - RTCLOK - zegar czasu rzeczywistego + $15 - BUFADR - adres bufora dla operacji dyskowych + $17 - ICCOMT - rejestr przejściowy kodu operacji I/O + $20 - ZIOCB - zerostronicowy blok kontroli I/O + $20 - ICHIDZ - indeks wpisu urządzenia w HATABS + $21 - ICDNOZ - numer urządzenia + $22 - ICCOMZ - kod operacji wejścia/wyjścia + $23 - ICSTZ - status operacji wejścia/wyjścia + $24 - ICBAZ - adres bufora danych dla operacji I/O + $26 - ICPTZ - adres procedury obsługi dla operacji + $28 - ICBLZ - długość bufora danych dla operacji I/O + $2A - ICAX1Z - rejestr pomocniczy ZIOCB + $2B - ICAX2Z - rejestr pomocniczy ZIOCB + $2C - ICAX3Z - rejestr pomocniczy ZIOCB + $2D - ICAX4Z - rejestr pomocniczy ZIOCB + $2E - ICAX5Z - rejestr pomocniczy ZIOCB + $2F - ICAX6Z - rejestr pomocniczy ZIOCB + $30 - STATUS - status aktualnej operacji SIO + $31 - CHKSUM - suma kontrolna dla operacji SIO + $32 - BUFR - adres bufora danych dla SIO + $34 - BUFEN - adres końca bufora danych dla SIO + $36 - LTEMP - pomocniczy wektor odczytu listy liniowej + $38 - BUFRFL - znacznik zapełnienia bufora SIO + $39 - RECVND - znacznik końca odczytu + $3A - XMTDON - znacznik końca transmisji + $3B - CHKSNT - znacznik nadania sumy kontrolnej + $3C - NOCKSM - znacznik braku sumy kontrolnej + $3D - BPTR - licznik bufora magnetofonu + $3E - GAPTYP - znacznik długości przerwy między blokami + $3F - FEOF - znacznik końca zbioru + $40 - FREQ - licznik dźwięku przy otwarciu magnetofonu + $41 - IOSNDEN - znacznik dźwięku przy transmisji + $42 - CRITIC - znacznik krytycznych czasowo operacji I/O + $4A - ZCHAIN - rejestr następstwa listy liniowej + $4C - DSTAT - status klawiatury i ekranu + $50 - TEMP - pomocniczy rejestr przejściowy + $51 - HOLD1 - pomocniczy rejestr przejściowy + $52 - LMARGIN - lewy margines obrazu + $53 - RMARGIN - prawy margines obrazu + $54 - ROWCRS - pionowa pozycja kursora + $55 - COLCRS - pozioma pozycja kursora + $57 - DINDEX - numer trybu graficznego OS + $58 - SAVMSC - adres pamięci obrazu + $5A - OLDROW - poprzednia pionowa pozycja kursora + $5B - OLDCOL - poprzednia pozioma pozycja kursora + $5D - OLDCHR - poprzedni znak na ekranie + $5E - OLDADR - poprzedni adres znaku na ekranie + $60 - FKDEFP - wektor tabeli definicji klawiszy F1-F4 + $62 - PALNTS - wskaźnik systemu TV + $63 - LOGCOL - adres kursora w wierszu logicznym + $64 - ADRESS - rejestr adresowy dla procedur edytora + $66 - MLTTMP - pomocniczy rejestr przejściowy + $68 - SAVADR - pomocniczy rejestr adresowy + $6A - RAMTOP - liczba stron pamięci RAM + $6B - BUFCNT - licznik bufora edytora + $6C - BUFSTR - adres bufora dla edytora + $6E - BITMSK - maska bitowa do wyświetlenia znaku + $6F - SHFAMT - liczba przesunięć punktu + $70 - ROWAC - aktualny wiersz przy rysowaniu + $72 - COLAC - aktualna kolumna przy rysowaniu + $74 - ENDPT - znacznik końca rysowanej linii + $76 - DELTAR - przyrost pionowej pozycji kursora + $77 - DELTAC - przyrost poziomej pozycji kursora + $79 - KEYDEFP - wektor tabeli definicji klawiszy + $7B - SWPFLG - znacznik kursora w trybach z oknem + $7C - HOLDCH - przechowywanie wartości znaku + $7D - INSDAT - rejestr pomocniczy edytora + $7E - COUNTR - licznik pamięci obrazu dla DOSCR i DRAW +$0100 - STACK - stos mikroprocesora 6502 +$0200 - DLIV - wektor przerwania programu ANTIC-a +$0210 - VTIMR1 - wektor przerwania licznika 1 POKEY-a +$0212 - VTIMR2 - wektor przerwania licznika 2 POKEY-a +$0214 - VTIMR4 - wektor przerwania licznika 4 POKEY-a +$0218 - TIMCNT1 - pierwszy licznik systemu +$0226 - TIMVEC1 - wektor przerwania licznika TIMCNT1 +$022A - TIMFLG3 - znacznik wyzerowania licznika TIMCNT3 +$022F - DMACTLS - rejestr-cień DMACTL +$0230 - DLPTRS - rejestr-cień DLPTR +$0232 - SKCTLS - rejestr-cień SKCTL +$0233 - LCOUNT - licznik odczytu dla nowego urządzenia +$0234 - LPENHS - rejestr-cień LPENH +$0235 - LPENVS - rejestr-cień LPENV +$023A - CDEVIC - kod urządzenia dla SIO +$023B - CCMND - kod operacji dla SIO +$023C - CAUX1 - pierwszy bajt pomocniczy dla SIO +$023D - CAUX2 - drugi bajt pomocniczy dla SIO +$023E - TEMP - tymczasowy rejestr odpowiedzi urządzenia +$023F - ERRFLG - znacznik błędu operacji SIO +$0244 - COLDST - znacznik zimnego startu systemu +$0245 - RECLEN - długość rekordu z nowego urządzenia +$0246 - DSKTIM - wartość Timeout dla stacji dysków +$0247 - PDVMSK - maska obecności nowych urządzeń +$0248 - PDVRS - rejestr-cień PDVREG +$024A - RELADR - adres procedury przemieszczalnej +$024C - PPTMPA - rejestr przechowania zawartości akumulatora +$024D - PPTMPX - rejestr przechowania zawartości rejestru X +$026B - CHSPTR - wektor nieużywanego zestawu znaków +$026C - VSFLAG - znacznik przesuwu pionowego obrazu +$026E - FINE - znacznik delikatnego przesuwu obrazu +$026F - GTICTLS - rejestr-cień GTIACTL +$0270 - PADDL0 - rejestr-cień POT0 +$0278 - JSTICK0 - położenie joysticka 0 +$0279 - JSTICK1 - położenie joysticka 1 +$027A - JSTICK2 - położenie joysticka 0 +$027B - JSTICK3 - położenie joysticka 1 +$027C - PTRIG0 - przycisk potencjometru 0 +$027D - PTRIG1 - przycisk potencjometru 1 +$0284 - TRIG0S - przycisk joysticka 0, rejestr-cień TRIG0 +$0285 - TRIG1S - przycisk joysticka 1, rejestr-cień TRIG1 +$0286 - TRIG2S - rejestr-cień TRIG0 +$0287 - TRIG3S - rejestr-cień TRIG1 +$0288 - HIBYTE - indeks operacji nowego urządzenia +$0289 - WMODE - znacznik sposobu dostępu do magnetofonu +$028A - BLIM - długość bufora magnetofonu +$028E - NEWADR - adres procedury nowego urządzenia +$0290 - TXTROW - wiersz kursora w oknie tekstowym +$0291 - TXTCOL - kolumna kursora w oknie tekstowym +$0293 - TINDEX - tryb graficzny OS w oknie tekstowym +$0294 - TXTMSC - adres pamięci okna tekstowego +$029C - CRETRY - liczba powtórzeń rozkazu operacji +$029D - HOLD3 - pomocniczy rejestr przejściowy +$029E - SUBTMP - pomocniczy rejestr przejściowy +$02A0 - DMASK - maska punktów obrazu +$02A2 - ESCFLG - znacznik klawisza ESC +$02A3 - TABMAP - mapa pozycji tabulacji +$02B2 - LOGMAP - mapa linii logicznych +$02B6 - INVFLG - znacznik klawisza inverse video +$02B7 - FILFLG - znacznik wypełniania obrazu +$02B8 - TMPROW - tymczasowy rejestr pozycji kursora +$02B9 - TMPCOL - tymczasowy rejestr pozycji kursora +$02BB - SCRFLG - znacznik przesuwu obrazu +$02BC - HOLD4 - pomocniczy rejestr przejściowy +$02BD - DRETRY - liczba powtórzeń wywołań urządzenia +$02BE - SHFLOK - znacznik klawiszy SHIFT i CONTROL +$02BF - BOTSCR - liczba wierszy tekstu +$02C0 - COLPM0S - rejestr-cień COLPM0 +$02C1 - COLPM1S - rejestr-cień COLPM1 +$02C2 - COLPM2S - rejestr-cień COLPM2 +$02C3 - COLPM3S - rejestr-cień COLPM3 +$02C4 - COLPF0S - rejestr-cień COLPF0 +$02C5 - COLPF1S - rejestr-cień COLPF1 ;gr.8 letters +$02C6 - COLPF2S - rejestr-cień COLPF2 ;gr.8 background +$02C7 - COLPF3S - rejestr-cień COLPF3 +$02C8 - COLBAKS - rejestr-cień COLBAK +$02C9 - RUNADR - adres procedury nowego urządzenia +$02CB - HIUSED - adres końcowy procedury nowego urządzenia +$02CF - GBYTEA - adres procedury nowego urządzenia +$02D1 - LOADAD - adres wczytywania z nowego urządzenia +$02D3 - ZLOADA - pomocniczy rejestr adresu wczytywania +$02D5 - DSCTLN - długość sektora dyskowego +$02DB - NOCLIK - znacznik dźwięku klawiatury +$02DE - PBPNT - licznik bufora drukarki +$02DF - PBUFSZ - długość bufora drukarki +$02E5 - MEMTOP - adres górnej granicy wolnej pamięci RAM +$02E7 - MEMLO - adres dolnej granicy wolnej pamięci RAM +$02E9 - HNDLOD - znacznik relokowalnej procedury obsługi I/O +$02EA - DVSTAT - dodatkowy rejestr statusu urządzenia +$02EC - DVTMOT - dodatkowy rejestr Timeout urządzenia +$02ED - REVNUM - numer wersji nowego urządzenia +$02EE - CBAUD - prędkość transmisji z magnetofonu +$02F0 - CRSINH - znacznik widoczności kursora +$02F3 - CHACT - rejestr-cień CHRCTL +$02F4 - CHBAS - rejestr-cień CHBASE +$02F5 - NEWROW - nowa pozycja pionowa kursora +$02F6 - NEWCOL - nowa pozycja pozioma kursora +$02F8 - ROWINC - zmiana pionowej pozycji kursora +$02F9 - COLINC - zmiana poziomej pozycji kursora +$02FA - CHAR - kod wewnętrzny znaku +$02FB - ATACHR - kod ATASCII znaku +$02FC - KBCODES - rejestr-cień KBCODE +$02FD - FILDAT - numer koloru dla wypełniania +$02FE - DSPFLG - znacznik wyświetlania znaków kontrolnych +$02FF - SSFLAG - znacznik start/stop dla przesuwu obrazu +$0300 - DDEVIC - kod identyfikacyjny urządzenia +$0301 - DUNIT - numer identyfikacyjny urządzenia +$0302 - DCMND - bajt rozkazu dla urządzenia +$0303 - DSTATS - status urządzenia +$0304 - DBUFA - adres bufora danych +$0306 - DTIMLO - wartość Timeout dla urządzenia +$0308 - DBYT - długość bufora danych +$030A - DAUX1 - rejestr pomocniczy dla operacji I/O +$030B - DAUX2 - rejestr pomocniczy dla operacji I/O +$030C - INTIM1 - rejestr czasu przy odczycie z magnetofonu +$030F - CASFLG - znacznik operacji z magnetofonem +$0310 - INTIM2 - rejestr czasu przy odczycie z magnetofonu +$0312 - TEMP1 - pomocniczy rejestr przejściowy +$0313 - TEMP2 - pomocniczy rejestr przejściowy +$0314 - PTIMOT - wartość Timeout dla drukarki +$0315 - TEMP3 - pomocniczy rejestr przejściowy +$0316 - SAVIO - rejestr przejściowy dla operacji SIO +$0317 - TIMFLG - znacznik upłynięcia czasu Timeout +$0318 - STACKP - rejestr wskaźnika stosu dla SIO +$0319 - TSTAT - przejściowy rejestr statusu SIO +$031A - HATABS - tabela wektorów procedur obsługi +$0340 - IOCB0 - blok kontroli I/O numer 0 +$0350 - IOCB1 - blok kontroli I/O numer 1 +$0360 - IOCB2 - blok kontroli I/O numer 2 +$0370 - IOCB3 - blok kontroli I/O numer 3 +$0380 - IOCB4 - blok kontroli I/O numer 4 +$0390 - IOCB5 - blok kontroli I/O numer 5 +$03A0 - IOCB6 - blok kontroli I/O numer 6 +$03B0 - IOCB7 - blok kontroli I/O numer 7 +$0340 - ICCHID - indeks wpisu urządzenia w HATABS +$0341 - ICDNO - numer urządzenia +$0342 - ICCMD - kod rozkazu operacji I/O +$0343 - ICSTAT - status operacji I/O +$0344 - ICBUFA - adres bufora danych dla operacji I/O +$0346 - ICPUTB - adres procedury przesyłania danych +$0348 - ICBUFL - długość bufora danych dla operacji I/O +$034A - ICAX1 - rejestr pomocniczy dla operacji I/O +$034B - ICAX2 - rejestr pomocniczy dla operacji I/O +$034C - ICAX3 - rejestr pomocniczy dla operacji I/O +$034D - ICAX4 - rejestr pomocniczy dla operacji I/O +$034E - ICAX5 - rejestr pomocniczy dla operacji I/O +$034F - ICAX6 - rejestr pomocniczy dla operacji I/O +$03C0 - PRNBUF - bufor drukarki +$03E8 - SUPERF - znacznik stosowany przy odczycie klawiatury +$03E9 - CKEY - znacznik klawisza START przy zimnym starcie +$03EC - DERRF - znacznik błędu przy otwieraniu edytora +$03FB - CHLINK - rejestr elementów listy liniowej +$03FD - CSCB - bajty kontroli szybkości magnetofonu +$03FF - CRCB - bajt długości rekordu magnetofonowego +$0400 - CASBUF - bufor magnetofonu +$047F - CASBEN - koniec bufora magnetofonu +$D000 - HPOSP0 - pozioma pozycja gracza 0 (Z) +$D000 - KOLM0PF - kolizja pocisku 0 z polem gry (O) +$D001 - HPOSP1 - pozioma pozycja gracza 1 (Z) +$D001 - KOLM1PF - kolizja pocisku 1 z polem gry (O) +$D002 - HPOSP2 - pozioma pozycja gracza 2 (Z) +$D002 - KOLM2PF - kolizja pocisku 2 z polem gry (O) +$D003 - HPOSP3 - pozioma pozycja gracza 3 (Z) +$D003 - KOLM3PF - kolizja pocisku 3 z polem gry (O) +$D004 - HPOSM0 - pozioma pozycja pocisku 0 (Z) +$D004 - KOLP0PF - kolizja gracza 0 z polem gry (O) +$D005 - HPOSM1 - pozioma pozycja pocisku 1 (Z) +$D005 - KOLP1PF - kolizja gracza 1 z polem gry (O) +$D006 - HPOSM2 - pozioma pozycja pocisku 2 (Z) +$D006 - KOLP2PF - kolizja gracza 2 z polem gry (O) +$D007 - HPOSM3 - pozioma pozycja pocisku 3 (Z) +$D007 - KOLP3PF - kolizja gracza 3 z polem gry (O) +$D008 - SIZEP0 - poziomy rozmiar gracza 0 (Z) +$D008 - KOLM0P - kolizja pocisku 0 z graczem (O) +$D009 - SIZEP1 - poziomy rozmiar gracza 1 (Z) +$D009 - KOLM1P - kolizja pocisku 1 z graczem (O) +$D00A - SIZEP2 - poziomy rozmiar gracza 2 (Z) +$D00A - KOLM2P - kolizja pocisku 2 z graczem (O) +$D00B - SIZEP3 - poziomy rozmiar gracza 3 (Z) +$D00B - KOLM3P - kolizja pocisku 3 z graczem (O) +$D00C - SIZEM - poziomy rozmiar pocisków (Z) +$D00C - KOLP0P - kolizja gracza 0 z innym graczem (O) +$D00D - GRAFP0 - rejestr grafiki gracza 0 (Z) +$D00D - KOLP1P - kolizja gracza 1 z innym graczem (O) +$D00E - GRAFP1 - rejestr grafiki gracza 1 (Z) +$D00E - KOLP2P - kolizja gracza 2 z innym graczem (O) +$D00F - GRAFP2 - rejestr grafiki gracza 2 (Z) +$D00F - KOLP3P - kolizja gracza 3 z innym graczem (O) +$D010 - GRAFP3 - rejestr grafiki gracza 3 (Z) +$D010 - TRIG0 - stan przycisku joysticka 0 (O) +$D011 - GRAFM - rejestr grafiki pocisków (Z) +$D011 - TRIG1 - stan przycisku joysticka 1 (O) +$D012 - COLPM0 - rejestr koloru gracza i pocisku 0 (Z) +$D013 - COLPM1 - rejestr koloru gracza i pocisku 1 (Z) +$D013 - TRIG3 - znacznik dołączenia cartridge'a (O) +$D014 - COLPM2 - rejestr koloru gracza i pocisku 2 (Z) +$D014 - PAL - znacznik systemu TV (O) +$D015 - COLPM3 - rejestr koloru gracza i pocisku 3 (Z) +$D016 - COLPF0 - rejestr koloru pola gry 0 (Z) +$D017 - COLPF1 - rejestr koloru pola gry 1 (Z) +$D018 - COLPF2 - rejestr koloru pola gry 2 (Z) +$D019 - COLPF3 - rejestr koloru pola gry 3 (Z) +$D01A - COLBAK - rejestr koloru tła (Z) +$D01B - GTIACTL - rejestr kontroli układu GTIA +$D01C - VDELAY - licznik opóźnienia pionowego P/MG +$D01D - PMCNTL - rejestr kontroli graczy i pocisków +$D01E - HITCLR - rejestr kasowania rejestrów kolizji +$D01F - CONSOL - rejestr stanu klawiszy konsoli +$D1FF - PDVREG - rejestr wyboru nowego urządzenia +$D200 - AUDF1 - częstotliwość pracy generatora 1 (Z) +$D200 - POT0 - rejestr położenia potencjometru 0 (O) +$D201 - AUDC1 - rejestr kontroli dźwięku generatora 1 (Z) +$D201 - POT1 - rejestr położenia potencjometru 1 (O) +$D202 - AUDF2 - częstotliwość pracy generatora 2 (Z) +$D202 - POT2 - rejestr położenia potencjometru 2 (O) +$D203 - AUDC2 - rejestr kontroli dźwięku generatora 2 (Z) +$D203 - POT3 - rejestr położenia potencjometru 3 (O) +$D204 - AUDF3 - częstotliwość pracy generatora 3 (Z) +$D205 - AUDC3 - rejestr kontroli dźwięku generatora 3 (Z) +$D206 - AUDF4 - częstotliwość pracy generatora 4 (Z) +$D207 - AUDC4 - rejestr kontroli dźwięku generatora 4 (Z) +$D208 - AUDCTL - rejestr kontroli generatorów dźwięku (Z) +$D208 - POTST - status odczytu potencjometrów (O) +$D209 - STIMER - rejestr zerowania liczników (Z) +$D209 - KBCODE - kod ostatnio naciśniętego klawisza (O) +$D20A - SKSTRES - reset statusu złącza szeregowego (Z) +$D20A - RANDOM - rejestr liczby losowej (O) +$D20B - POTG0 - znacznik przetwornika analogowo-cyfrowego (Z) +$D20D - SEROUT - szeregowy rejestr wyjściowy (Z) +$D20D - SERIN - szeregowy rejestr wejściowy (O) +$D20E - IRQEN - zezwolenia przerwań IRQ (Z) +$D20E - IRQST - status przerwań IRQ (O) +$D20F - SKCTL - rejestr kontroli złącza szeregowego (Z) +$D20F - SKSTAT - rejestr statusu złącza szeregowego (O) +$D300 - PORTA - port A układu PIA +$D301 - PORTB - port B układu PIA +$D302 - PACTL - rejestr kontroli portu A +$D303 - PBCTL - rejestr kontroli portu B +$D400 - DMACTL - rejestr kontroli dostępu do pamięci +$D401 - CHRCTL - rejestr kontroli wyświetlania znaków +$D402 - DLPTR - adres programu ANTIC-a +$D404 - HSCROL - znacznik poziomego przesuwu obrazu +$D405 - VSCROL - znacznik pionowego przesuwu obrazu +$D407 - PMBASE - adres pamięci graczy i pocisków +$D409 - CHBASE - adres zestawu znaków +$D40A - WSYNC - znacznik oczekiwania na synchronizację poziomą +$D40B - VCOUNT - licznik linii obrazu +$D40C - LPENH - poziome położenie pióra świetlengo +$D40D - LPENV - pionowe położenie pióra świetlnego +$D40E - NMIEN - rejestr zezwoleń na przerwania NMI +$D40F - NMIST - rejestr statusu przerwań NMI +*/ diff --git a/macro.asm b/macro.asm new file mode 100644 index 0000000..e9cea7e --- /dev/null +++ b/macro.asm @@ -0,0 +1,146 @@ +;------------------------------------- + .MACRO ROLW + ROL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO ASLW + ASL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO RORW + ROR :1+1 + ROR :1 + .ENDM +;------------------------------------- + .MACRO LSRW + LSR :1+1 + ROR :1 + .ENDM + +;------------------------------------- + .MACRO VMAIN +; VMAIN #WORD,interrupt.vector +; interrupt.vector: +; 0 - VIMIRQ +; 1 - TIMCNT1 +; 2 - TIMCNT2 +; 3 - TIMCNT3 +; 4 - TIMCNT4 +; 5 - TIMCNT5 +; 6 - VVBLKI +; 7 - VVBLKD +; 8 - TIMVEC1 +; 9 - TIMVEC2 +; Initialises Vertical Blank Interrupts +; (works only with system interrupts ON) + LDY # <:1 + LDX # >:1 + LDA #:2 + JSR SETVBV + .ENDM +;------------------------------------- + .MACRO VDLI +; VDLI #WORD +; Initialises Display List Interrupts + LDY # <:1 + LDX # >:1 + LDA #$C0 + STY $0200 + STX $0201 + STA NMIEN + .ENDM +;------------------------------------- + .MACRO halt +?stop + .if :1 + lda RANDOM + and #:1 + sta COLBAK + .endif + jmp ?stop + .ENDM +;------------------------------------- + .MACRO KEY +; KEY +; waits for releasing and pressing "any key" + PHA +?CK1 LDA SKSTAT + AND #$04 + BEQ ?CK1 +?CK LDA SKSTAT + AND #$04 + BNE ?CK + PLA + .ENDM +;------------------------------------- + .MACRO WAIT ;waits one frame (1/50 s(PAL) or 1/60s(NTSC)) + ;uses: A + LDA VCOUNT + STA WSYNC + STA WSYNC + STA WSYNC +@ CMP VCOUNT + BNE @- + .ENDM +;------------------------------------- + .macro negw + ; negate the given word (0-a) +;------------------------------------- + sec + lda #$00 + sbc :1 + sta :1 + lda #$00 + sbc :1+1 + sta :1+1 + .endm +;------------------------------------- + .macro randomize ;returns (in A) a random .byte between "floor" (incl) and "ceiling" (excl) + ;usage: randomize floor ceiling AND + ;uses: A + +?rand + lda random + .if :3 + and #:3 + .endif + cmp #:1 ;floor + bcc ?rand + cmp #:2+1 ;ceiling + bcs ?rand + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro pause ;waits :1 number (byte) of frames + ;uses: AX + .if :1 > 0 + ldx #:1 +loop wait + dex + bne loop + .else + wait + .endif + .ENDM + diff --git a/macro.lab b/macro.lab new file mode 100644 index 0000000..9d22722 --- /dev/null +++ b/macro.lab @@ -0,0 +1,2 @@ +mads 2.0.6 build 58 (28 Jan 17) +Label table: diff --git a/macro.lst b/macro.lst new file mode 100644 index 0000000..8f4f650 --- /dev/null +++ b/macro.lst @@ -0,0 +1,148 @@ +mads 2.0.6 build 58 (28 Jan 17) +Source: C:\jac\wudsn\Workspace\no_internet\macro.asm + 1 ;------------------------------------- + 2 .MACRO ROLW + 3 ROL :1 + 4 ROL :1+1 + 5 .ENDM + 6 ;------------------------------------- + 7 .MACRO ASLW + 8 ASL :1 + 9 ROL :1+1 + 10 .ENDM + 11 ;------------------------------------- + 12 .MACRO RORW + 13 ROR :1+1 + 14 ROR :1 + 15 .ENDM + 16 ;------------------------------------- + 17 .MACRO LSRW + 18 LSR :1+1 + 19 ROR :1 + 20 .ENDM + 21 + 22 ;------------------------------------- + 23 .MACRO VMAIN + 24 ; VMAIN #WORD,interrupt.vector + 25 ; interrupt.vector: + 26 ; 0 - VIMIRQ + 27 ; 1 - TIMCNT1 + 28 ; 2 - TIMCNT2 + 29 ; 3 - TIMCNT3 + 30 ; 4 - TIMCNT4 + 31 ; 5 - TIMCNT5 + 32 ; 6 - VVBLKI + 33 ; 7 - VVBLKD + 34 ; 8 - TIMVEC1 + 35 ; 9 - TIMVEC2 + 36 ; Initialises Vertical Blank Interrupts + 37 ; (works only with system interrupts ON) + 38 LDY # <:1 + 39 LDX # >:1 + 40 LDA #:2 + 41 JSR SETVBV + 42 .ENDM + 43 ;------------------------------------- + 44 .MACRO VDLI + 45 ; VDLI #WORD + 46 ; Initialises Display List Interrupts + 47 LDY # <:1 + 48 LDX # >:1 + 49 LDA #$C0 + 50 STY $0200 + 51 STX $0201 + 52 STA NMIEN + 53 .ENDM + 54 ;------------------------------------- + 55 .MACRO halt + 56 ?stop + 57 .if :1 + 58 lda RANDOM + 59 and #:1 + 60 sta COLBAK + 61 .endif + 62 jmp ?stop + 63 .ENDM + 64 ;------------------------------------- + 65 .MACRO KEY + 66 ; KEY + 67 ; waits for releasing and pressing "any key" + 68 PHA + 69 ?CK1 LDA SKSTAT + 70 AND #$04 + 71 BEQ ?CK1 + 72 ?CK LDA SKSTAT + 73 AND #$04 + 74 BNE ?CK + 75 PLA + 76 .ENDM + 77 ;------------------------------------- + 78 .MACRO WAIT ;waits one frame (1/50 s(PAL) or 1/60s(NTSC)) + 79 ;uses: A + 80 LDA VCOUNT + 81 STA WSYNC + 82 STA WSYNC + 83 STA WSYNC + 84 @ CMP VCOUNT + 85 BNE @- + 86 .ENDM + 87 ;------------------------------------- + 88 .macro negw + 89 ; negate the given word (0-a) + 90 ;------------------------------------- + 91 sec + 92 lda #$00 + 93 sbc :1 + 94 sta :1 + 95 lda #$00 + 96 sbc :1+1 + 97 sta :1+1 + 98 .endm + 99 ;------------------------------------- + 100 .macro randomize ;returns (in A) a random .byte between "floor" (incl) and "ceiling" (excl) + 101 ;usage: randomize floor ceiling AND + 102 ;uses: A + 103 + 104 ?rand + 105 lda random + 106 .if :3 + 107 and #:3 + 108 .endif + 109 cmp #:1 ;floor + 110 bcc ?rand + 111 cmp #:2+1 ;ceiling + 112 bcs ?rand + 113 .endm + 114 ;------------------------------------- + 115 .macro phx + 116 txa + 117 pha + 118 .endm + 119 ;------------------------------------- + 120 .macro phy + 121 tya + 122 pha + 123 .endm + 124 ;------------------------------------- + 125 .macro plx + 126 pla + 127 tax + 128 .endm + 129 ;------------------------------------- + 130 .macro ply + 131 pla + 132 tay + 133 .endm + 134 ;------------------------------------- + 135 .macro pause ;waits :1 number (byte) of frames + 136 ;uses: AX + 137 .if :1 > 0 + 138 ldx #:1 + 139 loop wait + 140 dex + 141 bne loop + 142 .else + 143 wait + 144 .endif + 145 .ENDM + 146 diff --git a/ni.asm b/ni.asm new file mode 100644 index 0000000..5594943 --- /dev/null +++ b/ni.asm @@ -0,0 +1,78 @@ +; @com.wudsn.ide.asm.mainsourcefile=ni.asm + icl 'atari.asm' + icl 'macro.asm' + + .zpvar tmp, tmp0, tmp1, tmp2, tmp3 .word +sw = $80 ;screen width in bytes +sh = 128 ; screen height in lines +screen = $4000 +pmgraph = $9000 + org $2000 +dl + .byte $70,$70,$70 +dl_addrs ;start of lines + .REPT sh + .byte $5f + .word screen+#*sw + .ENDR + .byte $41 + .word DL +start + mva #%00100011 DMACTLS + mwa #dl DLPTRS + mva #12 move_scr.hscr_state ;hscroll initialisation + sta HSCROL + + mva #0 COLPF1S + mva #$0F COLBAKS + mva #$0f COLPF2S + + + jsr sprites_init + pause 1 + jsr ground_init + + ldx #20 + ldy #0 + jsr cactus + ldx #30 + ldy #1 + jsr cactus + ldx #40 + ldy #2 + jsr cactus + +xx ldx #0 ; anim phaze +yy ldy #54 + jsr dino_pm + inc:lda xx+1 + cmp #3 + sne + mva #0 xx+1 + key + jsr move_scr + jmp xx + + +llp + mva #0 ntmp +lp + ldx ntmp + ldy #98 + jsr dino + key + jsr dino_clear + key + inc:lda ntmp + cmp #3 + bne lp + jmp llp + + + halt 03 + + run start +ntmp .by 0 + + icl 'procs.asm' + icl 'artwork.asm' \ No newline at end of file diff --git a/ni.atdbg b/ni.atdbg new file mode 100644 index 0000000..c6bead2 --- /dev/null +++ b/ni.atdbg @@ -0,0 +1,6 @@ +.sourcemode on +.echo +.echo "Loading executable..." +.echo +bc * +.onexerun .echo "Launching executable..." diff --git a/ni.lab b/ni.lab new file mode 100644 index 0000000..3aa1590 --- /dev/null +++ b/ni.lab @@ -0,0 +1,212 @@ +mads 2.0.6 build 58 (28 Jan 17) +Label table: +00 D000 HPOSP0 +00 D001 HPOSP1 +00 D002 HPOSP2 +00 D003 HPOSP3 +00 D004 HPOSM0 +00 D005 HPOSM1 +00 D006 HPOSM2 +00 D007 HPOSM3 +00 D008 SIZEP0 +00 D009 SIZEP1 +00 D00A SIZEP2 +00 D00B SIZEP3 +00 D00C SIZEM +00 D00D GRAFP0 +00 D00E GRAFP1 +00 D00F GRAFP2 +00 D010 GRAFP3 +00 D011 GRAFM +00 D012 COLPM0 +00 D013 COLPM1 +00 D014 COLPM2 +00 D015 COLPM3 +00 D016 COLPF0 +00 D017 COLPF1 +00 D018 COLPF2 +00 D019 COLPF3 +00 D01A COLBAK +00 D016 COLOR0 +00 D017 COLOR1 +00 D018 COLOR2 +00 D019 COLOR3 +00 D000 KOLM0PF +00 D001 KOLM1PF +00 D002 KOLM2PF +00 D003 KOLM3PF +00 D004 KOLP0PF +00 D005 KOLP1PF +00 D006 KOLP2PF +00 D007 KOLP3PF +00 D008 KOLM0P +00 D009 KOLM1P +00 D00A KOLM2P +00 D00B KOLM3P +00 D00C KOLP0P +00 D00D KOLP1P +00 D00E KOLP2P +00 D00F KOLP3P +00 D010 TRIG0 +00 D011 TRIG1 +00 D013 TRIG3 +00 D014 PAL +00 D01B GTICTL +00 D01B GTIACTL +00 D01C VDELAY +00 D01D PMCNTL +00 D01E HITCLR +00 D01F CONSOL +00 0010 IRQENS +00 0011 IRQSTAT +00 D204 AUDF3 +00 D208 AUDCTL +00 D209 STIMER +00 D209 KBCODE +00 D20A SKSTRES +00 D20A RANDOM +00 D20D SEROUT +00 D20D SERIN +00 D20E IRQEN +00 D20E IRQST +00 D20F SKCTL +00 D20F SKSTAT +00 D300 PORTA +00 D301 PORTB +00 D302 PACTL +00 D303 PBCTL +00 D400 DMACTL +00 D401 CHRCTL +00 D402 DLPTR +00 D404 HSCROL +00 D405 VSCROL +00 D407 PMBASE +00 D409 CHBASE +00 D40A WSYNC +00 D40B VCOUNT +00 D40C LPENH +00 D40D LPENV +00 D40E NMIEN +00 D40F NMIST +00 02C0 COLPM0S +00 02C1 COLPM1S +00 02C2 COLPM2S +00 02C3 COLPM3S +00 02C4 COLPF0S +00 02C5 COLPF1S +00 02C6 COLPF2S +00 02C7 COLPF3S +00 02C8 COLBAKS +00 026F GTICTLS +00 022F DMACTLS +00 0230 DLPTRS +00 02F4 CHBAS +00 02FC KBCODES +00 E45C SETVBV +00 E462 XITVBV +00 E45F SYSVBV +00 0012 RTCLOK +00 02E5 MEMTOP +00 02E7 MEMLO +00 0278 JSTICK0 +00 0279 JSTICK1 +00 027A JSTICK2 +00 027B JSTICK3 +00 027C PTRIG0 +00 027D PTRIG1 +00 0284 TRIG0S +00 0285 TRIG1S +00 0286 TRIG2S +00 0287 TRIG3S +00 0080 SW +00 0080 SH +00 4000 SCREEN +00 9000 PMGRAPH +00 0080 TMP +00 0082 TMP0 +00 0084 TMP1 +00 0086 TMP2 +00 0088 TMP3 +00 2000 DL +00 2003 DL_ADDRS +00 2186 START +00 21B1 PAUSE0.LOOP +00 21BD PAUSE0.WAIT0.0@ +00 21DD XX +00 21DF YY +00 2209 LLP +00 220E LP +00 2251 NTMP +00 2252 DINO +00 0080 DINO._DINO +00 0084 DINO._MASK +00 0086 DINO._SCR +00 0088 DINO._BACK +00 2290 DINO.LOOP1 +00 2292 DINO.DN1 +00 22D5 DINO_CLEAR +00 0086 DINO_CLEAR._SCR +00 0088 DINO_CLEAR._BACK +00 22F7 DINO_CLEAR.LOOP1 +00 22F9 DINO_CLEAR.DN1 +00 231C GROUND +00 0084 GROUND._GND +00 0086 GROUND._SCR +00 233B GROUND.LOOP1 +00 233D GROUND.1@ +00 2361 GROUND.LOOP2 +00 2363 GROUND.2@ +00 2389 GROUND_INIT +00 238D GROUND_INIT.GROUND_LOOP +00 23AA CACTUS +00 0084 CACTUS._CACT +00 0086 CACTUS._SCR +00 23C6 CACTUS.NO_INC +00 23D0 CACTUS.LOOP +00 23D2 CACTUS.3@ +00 23F9 CACTUS.CACT_W +00 23FA SPRITES_INIT +00 002A SPRITES_INIT.DX +00 2432 DINO_PM +00 0084 DINO_PM._DINO +00 0086 DINO_PM._DINO_SAV +00 0088 DINO_PM._SPR +00 244A DINO_PM.LOOP0 +00 245D DINO_PM.4@ +00 248D DINO_PM.5@ +00 24B5 DINO_PM.6@ +00 24E0 DINO_PM.COUNTER +00 24E1 DINO_PM.DINO_SAVE_PM_Y +00 24E2 DINO_PM.DINO_SAVE_PM_Y_PREV +00 24E3 MOVE_DL +00 24EF MOVE_DL.INCR +00 2504 MOVE_SCR +00 251F MOVE_SCR.7@ +00 2520 MOVE_SCR.HSCR_STATE +00 2521 DINO0 +00 2569 DINO1 +00 25B1 DINO2 +00 25F9 DINO_MASK0 +00 2641 DINO_MASK1 +00 2689 DINO_MASK2 +00 26D1 DINO_TAB_L +00 26D4 DINO_TAB_H +00 26D7 DINO_MASK_TAB_L +00 26DA DINO_MASK_TAB_H +00 26DD DINO_BACK +00 2725 DINO_SAVE_Y +00 2726 GND_0 +00 2736 GND_1 +00 2746 GND_2 +00 2756 GND_TAB_L +00 2759 GND_TAB_H +00 275C SCR_ADDRS_L +00 27DC SCR_ADDRS_H +00 0003 CACTI +00 285C CACT0 +00 28E8 CACT1 +00 29A8 CACT2 +00 2AC0 CACT_WIDTHS +00 2AC3 CACT_HEIGHTS +00 2AC6 CACT_TAB_L +00 2AC9 CACT_TAB_H diff --git a/ni.lst b/ni.lst new file mode 100644 index 0000000..7a20afd --- /dev/null +++ b/ni.lst @@ -0,0 +1,1566 @@ +mads 2.0.6 build 58 (28 Jan 17) +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 1 ; @com.wudsn.ide.asm.mainsourcefile=ni.asm + 2 icl 'atari.asm' +Source: C:\jac\wudsn\Workspace\no_internet\atari.asm + 1 /* + 2 scr48 = %00111111 ;screen 48b + 3 scr40 = %00111110 ;screen 40b + 4 scr32 = %00111101 ;screen 32b + 5 */ + 5 + 6 + 7 * --------------------------------------------------------------------------------------------- + 8 * --- GTIA + 9 * --------------------------------------------------------------------------------------------- + 10 = D000 HPOSP0 = $D000 ; pozioma pozycja gracza 0 (Z) + 11 = D001 HPOSP1 = $D001 ; pozioma pozycja gracza 1 (Z) + 12 = D002 HPOSP2 = $D002 ; pozioma pozycja gracza 2 (Z) + 13 = D003 HPOSP3 = $D003 ; pozioma pozycja gracza 3 (Z) + 14 = D004 HPOSM0 = $D004 ; pozioma pozycja pocisku 0 (Z) + 15 = D005 HPOSM1 = $D005 ; pozioma pozycja pocisku 1 (Z) + 16 = D006 HPOSM2 = $D006 ; pozioma pozycja pocisku 2 (Z) + 17 = D007 HPOSM3 = $D007 ; pozioma pozycja pocisku 3 (Z) + 18 = D008 SIZEP0 = $D008 ; poziomy rozmiar gracza 0 (Z) + 19 = D009 SIZEP1 = $D009 ; poziomy rozmiar gracza 1 (Z) + 20 = D00A SIZEP2 = $D00A ; poziomy rozmiar gracza 2 (Z) + 21 = D00B SIZEP3 = $D00B ; poziomy rozmiar gracza 3 (Z) + 22 = D00C SIZEM = $D00C ; poziomy rozmiar pocisków (Z) + 23 = D00D GRAFP0 = $D00D ; rejestr grafiki gracza 0 (Z) + 24 = D00E GRAFP1 = $D00E ; rejestr grafiki gracza 1 (Z) + 25 = D00F GRAFP2 = $D00F ; rejestr grafiki gracza 2 (Z) + 26 = D010 GRAFP3 = $D010 ; rejestr grafiki gracza 3 (Z) + 27 = D011 GRAFM = $D011 ; rejestr grafiki pocisków (Z) + 28 = D012 COLPM0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z) + 29 = D013 COLPM1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z) + 30 = D014 COLPM2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z) + 31 = D015 COLPM3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z) + 32 = D016 COLPF0 = $D016 ; rejestr koloru pola gry 0 (Z) + 33 = D017 COLPF1 = $D017 ; rejestr koloru pola gry 1 (Z) + 34 = D018 COLPF2 = $D018 ; rejestr koloru pola gry 2 (Z) + 35 = D019 COLPF3 = $D019 ; rejestr koloru pola gry 3 (Z) + 36 = D01A COLBAK = $D01A ; rejestr koloru tła (Z) + 37 + 38 = D016 COLOR0 = colpf0 + 39 = D017 COLOR1 = colpf1 + 40 = D018 COLOR2 = colpf2 + 41 = D019 COLOR3 = colpf3 + 42 + 43 = D000 KOLM0PF = $D000 ; kolizja pocisku 0 z polem gry (O) + 44 = D001 KOLM1PF = $D001 ; kolizja pocisku 1 z polem gry (O) + 45 = D002 KOLM2PF = $D002 ; kolizja pocisku 2 z polem gry (O) + 46 = D003 KOLM3PF = $D003 ; kolizja pocisku 3 z polem gry (O) + 47 = D004 KOLP0PF = $D004 ; kolizja gracza 0 z polem gry (O) + 48 = D005 KOLP1PF = $D005 ; kolizja gracza 1 z polem gry (O) + 49 = D006 KOLP2PF = $D006 ; kolizja gracza 2 z polem gry (O) + 50 = D007 KOLP3PF = $D007 ; kolizja gracza 3 z polem gry (O) + 51 = D008 KOLM0P = $D008 ; kolizja pocisku 0 z graczem (O) + 52 = D009 KOLM1P = $D009 ; kolizja pocisku 1 z graczem (O) + 53 = D00A KOLM2P = $D00A ; kolizja pocisku 2 z graczem (O) + 54 = D00B KOLM3P = $D00B ; kolizja pocisku 3 z graczem (O) + 55 = D00C KOLP0P = $D00C ; kolizja gracza 0 z innym graczem (O) + 56 = D00D KOLP1P = $D00D ; kolizja gracza 1 z innym graczem (O) + 57 = D00E KOLP2P = $D00E ; kolizja gracza 2 z innym graczem (O) + 58 = D00F KOLP3P = $D00F ; kolizja gracza 3 z innym graczem (O) + 59 = D010 TRIG0 = $D010 ; stan przycisku joysticka 0 (O) + 60 = D011 TRIG1 = $D011 ; stan przycisku joysticka 1 (O) + 61 = D013 TRIG3 = $D013 ; znacznik dołączenia cartridge-a (O) + 62 = D014 PAL = $D014 ; znacznik systemu TV (O) + 63 + 64 = D01B GTICTL = $D01B ; rejestr kontroli układu GTIA + 65 = D01B GTIACTL = gtictl + 66 + 67 = D01C VDELAY = $D01C ; licznik opóźnienia pionowego P/MG + 68 = D01D PMCNTL = $D01D ; rejestr kontroli graczy i pocisków + 69 = D01E HITCLR = $D01E ; rejestr kasowania rejestrów kolizji + 70 = D01F CONSOL = $D01F ; rejestr stanu klawiszy konsoli Start (bit 0), Select (bit 1), Option (bit 2) + 71 + 72 * --------------------------------------------------------------------------------------------- + 73 * --- POKEY + 74 * --------------------------------------------------------------------------------------------- + 75 + 76 = 0010 IRQENS = $0010 ; rejestr-cień IRQEN + 77 = 0011 IRQSTAT = $0011 ; rejestr-cień IRQST + 78 + 79 = D204 AUDF3 = $D204 ; częstotliwość pracy generatora 3 (Z) + 80 = D208 AUDCTL = $D208 ; rejestr kontroli generatorów dźwięku (Z) + 81 = D209 STIMER = $D209 ; rejestr zerowania liczników (Z) + 82 = D209 KBCODE = $D209 ; kod ostatnio naciśniętego klawisza (O) + 83 = D20A SKSTRES = $D20A ; rejestr statusu złącza szeregowego (Z) + 84 = D20A RANDOM = $D20A ; rejestr liczby losowej (O) + 85 = D20D SEROUT = $D20D ; szeregowy rejestr wyjściowy (Z) + 86 = D20D SERIN = $D20D ; szeregowy rejestr wejściowy (O) + 87 = D20E IRQEN = $D20E ; zezwolenie przerwań IRQ (Z) + 88 = D20E IRQST = $D20E ; status przerwań IRQ (O) + 89 = D20F SKCTL = $D20F ; rejestr kontroli złącza szeregowego (Z) + 90 = D20F SKSTAT = $D20F ; rejestr statusu złącza szeregowego (O) + 91 + 92 * --------------------------------------------------------------------------------------------- + 93 * --- PIA + 94 * --------------------------------------------------------------------------------------------- + 95 = D300 PORTA = $D300 ; port A układu PIA + 96 = D301 PORTB = $D301 ; port B układu PIA + 97 = D302 PACTL = $D302 ; rejestr kontroli portu A + 98 = D303 PBCTL = $D303 ; rejestr kontroli portu B + 99 + 100 * --------------------------------------------------------------------------------------------- + 101 * --- ANTIC + 102 * --------------------------------------------------------------------------------------------- + 103 = D400 DMACTL = $D400 ; rejestr kontroli dostępu do pamięci + 104 = D401 CHRCTL = $D401 ; rejestr kontroli wyświetlania znaków + 105 = D402 DLPTR = $D402 ; adres programu ANTIC-a + 106 = D404 HSCROL = $D404 ; znacznik poziomego przesuwu obrazu + 107 = D405 VSCROL = $D405 ; znacznik pionowego przesuwu obrazu + 108 = D407 PMBASE = $D407 ; adres pamięci graczy i pocisków + 109 = D409 CHBASE = $D409 ; adres zestawu znaków + 110 = D40A WSYNC = $D40A ; znacznik oczekiwania na synchronizację poziomą + 111 = D40B VCOUNT = $D40B ; licznik linii obrazu + 112 = D40C LPENH = $D40C ; poziome położenie pióra świetlengo + 113 = D40D LPENV = $D40D ; pionowe położenie pióra świetlnego + 114 = D40E NMIEN = $D40E ; rejestr zezwoleń na przerwania NMI + 115 = D40F NMIST = $D40F ; rejestr statusu przerwań NMI + 116 + 117 ;------------------------------------- + 118 ;additional system variables + 119 ;------------------------------------- + 120 = 02C0 COLPM0S = $02C0 ;- - rejestr-cień COLPM0 + 121 = 02C1 COLPM1S = $02C1 ;- - rejestr-cień COLPM1 + 122 = 02C2 COLPM2S = $02C2 ;- - rejestr-cień COLPM2 + 123 = 02C3 COLPM3S = $02C3 ;- - rejestr-cień COLPM3 + 124 = 02C4 COLPF0S = $02C4 ;- - rejestr-cień COLPF0 + 125 = 02C5 COLPF1S = $02C5 ;- - rejestr-cień COLPF1 + 126 = 02C6 COLPF2S = $02C6 ;- - rejestr-cień COLPF2 + 127 = 02C7 COLPF3S = $02C7 ;- - rejestr-cień COLPF3 + 128 + 129 = 02C8 COLBAKS = $02C8 + 130 = 026F GTICTLS = $026F ;- - rejestr-cień GTIACTL + 131 + 132 = 022F DMACTLS = $022F ;- - rejestr kontroli dostępu do pamięci - cień + 133 = 0230 DLPTRS = $0230 ;- - adres programu ANTIC-a - cień + 134 = 02F4 CHBAS = $02F4 ;- - rejestr-cień CHBASE + 135 = 02FC KBCODES = $02FC ;- - rejestr-cień KBCODE + 136 + 137 = E45C SETVBV = $E45C + 138 = E462 XITVBV = $E462 + 139 = E45F SYSVBV = $E45F + 140 = 0012 RTCLOK = $0012 + 141 + 142 = 02E5 MEMTOP = $02E5 ;- - adres górnej granicy wolnej pamięci RAM + 143 = 02E7 MEMLO = $02E7 ;- - adres dolnej granicy wolnej pamięci RAM + 144 + 145 = 0278 JSTICK0 = $0278 ;- - położenie joysticka 0 + 146 = 0279 JSTICK1 = $0279 ;- JSTICK1 - położenie joysticka 1 + 147 = 027A JSTICK2 = $027A ;- JSTICK2 - położenie joysticka 0 + 148 = 027B JSTICK3 = $027B ;- JSTICK3 - położenie joysticka 1 + 149 = 027C PTRIG0 = $027C ;- PTRIG0 - przycisk potencjometru 0 + 150 = 027D PTRIG1 = $027D ;- PTRIG1 - przycisk potencjometru 1 + 151 = 0284 TRIG0S = $0284 ;- TRIG0S - przycisk joysticka 0, rejestr-cień TRIG0 + 152 = 0285 TRIG1S = $0285 ;- TRIG1S - przycisk joysticka 1, rejestr-cień TRIG1 + 153 = 0286 TRIG2S = $0286 ;- TRIG2S - rejestr-cień TRIG0 + 154 = 0287 TRIG3S = $0287 ;- TRIG3S - rejestr-cień TRIG1 + 155 + 156 + 157 /* + 158 Rejestry OS w pamięci RAM + 159 + 160 $08 - WARMST - znacznik gorącego startu + 161 $0E - APPMHI - najwyższy adres RAM zajęty przez program + 162 $10 - IRQENS - rejestr-cień IRQEN + 163 $11 - IRQSTAT - rejestr-cień IRQST + 164 $12 - RTCLOK - zegar czasu rzeczywistego + 165 $15 - BUFADR - adres bufora dla operacji dyskowych + 166 $17 - ICCOMT - rejestr przejściowy kodu operacji I/O + 167 $20 - ZIOCB - zerostronicowy blok kontroli I/O + 168 $20 - ICHIDZ - indeks wpisu urządzenia w HATABS + 169 $21 - ICDNOZ - numer urządzenia + 170 $22 - ICCOMZ - kod operacji wejścia/wyjścia + 171 $23 - ICSTZ - status operacji wejścia/wyjścia + 172 $24 - ICBAZ - adres bufora danych dla operacji I/O + 173 $26 - ICPTZ - adres procedury obsługi dla operacji + 174 $28 - ICBLZ - długość bufora danych dla operacji I/O + 175 $2A - ICAX1Z - rejestr pomocniczy ZIOCB + 176 $2B - ICAX2Z - rejestr pomocniczy ZIOCB + 177 $2C - ICAX3Z - rejestr pomocniczy ZIOCB + 178 $2D - ICAX4Z - rejestr pomocniczy ZIOCB + 179 $2E - ICAX5Z - rejestr pomocniczy ZIOCB + 180 $2F - ICAX6Z - rejestr pomocniczy ZIOCB + 181 $30 - STATUS - status aktualnej operacji SIO + 182 $31 - CHKSUM - suma kontrolna dla operacji SIO + 183 $32 - BUFR - adres bufora danych dla SIO + 184 $34 - BUFEN - adres końca bufora danych dla SIO + 185 $36 - LTEMP - pomocniczy wektor odczytu listy liniowej + 186 $38 - BUFRFL - znacznik zapełnienia bufora SIO + 187 $39 - RECVND - znacznik końca odczytu + 188 $3A - XMTDON - znacznik końca transmisji + 189 $3B - CHKSNT - znacznik nadania sumy kontrolnej + 190 $3C - NOCKSM - znacznik braku sumy kontrolnej + 191 $3D - BPTR - licznik bufora magnetofonu + 192 $3E - GAPTYP - znacznik długości przerwy między blokami + 193 $3F - FEOF - znacznik końca zbioru + 194 $40 - FREQ - licznik dźwięku przy otwarciu magnetofonu + 195 $41 - IOSNDEN - znacznik dźwięku przy transmisji + 196 $42 - CRITIC - znacznik krytycznych czasowo operacji I/O + 197 $4A - ZCHAIN - rejestr następstwa listy liniowej + 198 $4C - DSTAT - status klawiatury i ekranu + 199 $50 - TEMP - pomocniczy rejestr przejściowy + 200 $51 - HOLD1 - pomocniczy rejestr przejściowy + 201 $52 - LMARGIN - lewy margines obrazu + 202 $53 - RMARGIN - prawy margines obrazu + 203 $54 - ROWCRS - pionowa pozycja kursora + 204 $55 - COLCRS - pozioma pozycja kursora + 205 $57 - DINDEX - numer trybu graficznego OS + 206 $58 - SAVMSC - adres pamięci obrazu + 207 $5A - OLDROW - poprzednia pionowa pozycja kursora + 208 $5B - OLDCOL - poprzednia pozioma pozycja kursora + 209 $5D - OLDCHR - poprzedni znak na ekranie + 210 $5E - OLDADR - poprzedni adres znaku na ekranie + 211 $60 - FKDEFP - wektor tabeli definicji klawiszy F1-F4 + 212 $62 - PALNTS - wskaźnik systemu TV + 213 $63 - LOGCOL - adres kursora w wierszu logicznym + 214 $64 - ADRESS - rejestr adresowy dla procedur edytora + 215 $66 - MLTTMP - pomocniczy rejestr przejściowy + 216 $68 - SAVADR - pomocniczy rejestr adresowy + 217 $6A - RAMTOP - liczba stron pamięci RAM + 218 $6B - BUFCNT - licznik bufora edytora + 219 $6C - BUFSTR - adres bufora dla edytora + 220 $6E - BITMSK - maska bitowa do wyświetlenia znaku + 221 $6F - SHFAMT - liczba przesunięć punktu + 222 $70 - ROWAC - aktualny wiersz przy rysowaniu + 223 $72 - COLAC - aktualna kolumna przy rysowaniu + 224 $74 - ENDPT - znacznik końca rysowanej linii + 225 $76 - DELTAR - przyrost pionowej pozycji kursora + 226 $77 - DELTAC - przyrost poziomej pozycji kursora + 227 $79 - KEYDEFP - wektor tabeli definicji klawiszy + 228 $7B - SWPFLG - znacznik kursora w trybach z oknem + 229 $7C - HOLDCH - przechowywanie wartości znaku + 230 $7D - INSDAT - rejestr pomocniczy edytora + 231 $7E - COUNTR - licznik pamięci obrazu dla DOSCR i DRAW + 232 $0100 - STACK - stos mikroprocesora 6502 + 233 $0200 - DLIV - wektor przerwania programu ANTIC-a + 234 $0210 - VTIMR1 - wektor przerwania licznika 1 POKEY-a + 235 $0212 - VTIMR2 - wektor przerwania licznika 2 POKEY-a + 236 $0214 - VTIMR4 - wektor przerwania licznika 4 POKEY-a + 237 $0218 - TIMCNT1 - pierwszy licznik systemu + 238 $0226 - TIMVEC1 - wektor przerwania licznika TIMCNT1 + 239 $022A - TIMFLG3 - znacznik wyzerowania licznika TIMCNT3 + 240 $022F - DMACTLS - rejestr-cień DMACTL + 241 $0230 - DLPTRS - rejestr-cień DLPTR + 242 $0232 - SKCTLS - rejestr-cień SKCTL + 243 $0233 - LCOUNT - licznik odczytu dla nowego urządzenia + 244 $0234 - LPENHS - rejestr-cień LPENH + 245 $0235 - LPENVS - rejestr-cień LPENV + 246 $023A - CDEVIC - kod urządzenia dla SIO + 247 $023B - CCMND - kod operacji dla SIO + 248 $023C - CAUX1 - pierwszy bajt pomocniczy dla SIO + 249 $023D - CAUX2 - drugi bajt pomocniczy dla SIO + 250 $023E - TEMP - tymczasowy rejestr odpowiedzi urządzenia + 251 $023F - ERRFLG - znacznik błędu operacji SIO + 252 $0244 - COLDST - znacznik zimnego startu systemu + 253 $0245 - RECLEN - długość rekordu z nowego urządzenia + 254 $0246 - DSKTIM - wartość Timeout dla stacji dysków + 255 $0247 - PDVMSK - maska obecności nowych urządzeń + 256 $0248 - PDVRS - rejestr-cień PDVREG + 257 $024A - RELADR - adres procedury przemieszczalnej + 258 $024C - PPTMPA - rejestr przechowania zawartości akumulatora + 259 $024D - PPTMPX - rejestr przechowania zawartości rejestru X + 260 $026B - CHSPTR - wektor nieużywanego zestawu znaków + 261 $026C - VSFLAG - znacznik przesuwu pionowego obrazu + 262 $026E - FINE - znacznik delikatnego przesuwu obrazu + 263 $026F - GTICTLS - rejestr-cień GTIACTL + 264 $0270 - PADDL0 - rejestr-cień POT0 + 265 $0278 - JSTICK0 - położenie joysticka 0 + 266 $0279 - JSTICK1 - położenie joysticka 1 + 267 $027A - JSTICK2 - położenie joysticka 0 + 268 $027B - JSTICK3 - położenie joysticka 1 + 269 $027C - PTRIG0 - przycisk potencjometru 0 + 270 $027D - PTRIG1 - przycisk potencjometru 1 + 271 $0284 - TRIG0S - przycisk joysticka 0, rejestr-cień TRIG0 + 272 $0285 - TRIG1S - przycisk joysticka 1, rejestr-cień TRIG1 + 273 $0286 - TRIG2S - rejestr-cień TRIG0 + 274 $0287 - TRIG3S - rejestr-cień TRIG1 + 275 $0288 - HIBYTE - indeks operacji nowego urządzenia + 276 $0289 - WMODE - znacznik sposobu dostępu do magnetofonu + 277 $028A - BLIM - długość bufora magnetofonu + 278 $028E - NEWADR - adres procedury nowego urządzenia + 279 $0290 - TXTROW - wiersz kursora w oknie tekstowym + 280 $0291 - TXTCOL - kolumna kursora w oknie tekstowym + 281 $0293 - TINDEX - tryb graficzny OS w oknie tekstowym + 282 $0294 - TXTMSC - adres pamięci okna tekstowego + 283 $029C - CRETRY - liczba powtórzeń rozkazu operacji + 284 $029D - HOLD3 - pomocniczy rejestr przejściowy + 285 $029E - SUBTMP - pomocniczy rejestr przejściowy + 286 $02A0 - DMASK - maska punktów obrazu + 287 $02A2 - ESCFLG - znacznik klawisza ESC + 288 $02A3 - TABMAP - mapa pozycji tabulacji + 289 $02B2 - LOGMAP - mapa linii logicznych + 290 $02B6 - INVFLG - znacznik klawisza inverse video + 291 $02B7 - FILFLG - znacznik wypełniania obrazu + 292 $02B8 - TMPROW - tymczasowy rejestr pozycji kursora + 293 $02B9 - TMPCOL - tymczasowy rejestr pozycji kursora + 294 $02BB - SCRFLG - znacznik przesuwu obrazu + 295 $02BC - HOLD4 - pomocniczy rejestr przejściowy + 296 $02BD - DRETRY - liczba powtórzeń wywołań urządzenia + 297 $02BE - SHFLOK - znacznik klawiszy SHIFT i CONTROL + 298 $02BF - BOTSCR - liczba wierszy tekstu + 299 $02C0 - COLPM0S - rejestr-cień COLPM0 + 300 $02C1 - COLPM1S - rejestr-cień COLPM1 + 301 $02C2 - COLPM2S - rejestr-cień COLPM2 + 302 $02C3 - COLPM3S - rejestr-cień COLPM3 + 303 $02C4 - COLPF0S - rejestr-cień COLPF0 + 304 $02C5 - COLPF1S - rejestr-cień COLPF1 ;gr.8 letters + 305 $02C6 - COLPF2S - rejestr-cień COLPF2 ;gr.8 background + 306 $02C7 - COLPF3S - rejestr-cień COLPF3 + 307 $02C8 - COLBAKS - rejestr-cień COLBAK + 308 $02C9 - RUNADR - adres procedury nowego urządzenia + 309 $02CB - HIUSED - adres końcowy procedury nowego urządzenia + 310 $02CF - GBYTEA - adres procedury nowego urządzenia + 311 $02D1 - LOADAD - adres wczytywania z nowego urządzenia + 312 $02D3 - ZLOADA - pomocniczy rejestr adresu wczytywania + 313 $02D5 - DSCTLN - długość sektora dyskowego + 314 $02DB - NOCLIK - znacznik dźwięku klawiatury + 315 $02DE - PBPNT - licznik bufora drukarki + 316 $02DF - PBUFSZ - długość bufora drukarki + 317 $02E5 - MEMTOP - adres górnej granicy wolnej pamięci RAM + 318 $02E7 - MEMLO - adres dolnej granicy wolnej pamięci RAM + 319 $02E9 - HNDLOD - znacznik relokowalnej procedury obsługi I/O + 320 $02EA - DVSTAT - dodatkowy rejestr statusu urządzenia + 321 $02EC - DVTMOT - dodatkowy rejestr Timeout urządzenia + 322 $02ED - REVNUM - numer wersji nowego urządzenia + 323 $02EE - CBAUD - prędkość transmisji z magnetofonu + 324 $02F0 - CRSINH - znacznik widoczności kursora + 325 $02F3 - CHACT - rejestr-cień CHRCTL + 326 $02F4 - CHBAS - rejestr-cień CHBASE + 327 $02F5 - NEWROW - nowa pozycja pionowa kursora + 328 $02F6 - NEWCOL - nowa pozycja pozioma kursora + 329 $02F8 - ROWINC - zmiana pionowej pozycji kursora + 330 $02F9 - COLINC - zmiana poziomej pozycji kursora + 331 $02FA - CHAR - kod wewnętrzny znaku + 332 $02FB - ATACHR - kod ATASCII znaku + 333 $02FC - KBCODES - rejestr-cień KBCODE + 334 $02FD - FILDAT - numer koloru dla wypełniania + 335 $02FE - DSPFLG - znacznik wyświetlania znaków kontrolnych + 336 $02FF - SSFLAG - znacznik start/stop dla przesuwu obrazu + 337 $0300 - DDEVIC - kod identyfikacyjny urządzenia + 338 $0301 - DUNIT - numer identyfikacyjny urządzenia + 339 $0302 - DCMND - bajt rozkazu dla urządzenia + 340 $0303 - DSTATS - status urządzenia + 341 $0304 - DBUFA - adres bufora danych + 342 $0306 - DTIMLO - wartość Timeout dla urządzenia + 343 $0308 - DBYT - długość bufora danych + 344 $030A - DAUX1 - rejestr pomocniczy dla operacji I/O + 345 $030B - DAUX2 - rejestr pomocniczy dla operacji I/O + 346 $030C - INTIM1 - rejestr czasu przy odczycie z magnetofonu + 347 $030F - CASFLG - znacznik operacji z magnetofonem + 348 $0310 - INTIM2 - rejestr czasu przy odczycie z magnetofonu + 349 $0312 - TEMP1 - pomocniczy rejestr przejściowy + 350 $0313 - TEMP2 - pomocniczy rejestr przejściowy + 351 $0314 - PTIMOT - wartość Timeout dla drukarki + 352 $0315 - TEMP3 - pomocniczy rejestr przejściowy + 353 $0316 - SAVIO - rejestr przejściowy dla operacji SIO + 354 $0317 - TIMFLG - znacznik upłynięcia czasu Timeout + 355 $0318 - STACKP - rejestr wskaźnika stosu dla SIO + 356 $0319 - TSTAT - przejściowy rejestr statusu SIO + 357 $031A - HATABS - tabela wektorów procedur obsługi + 358 $0340 - IOCB0 - blok kontroli I/O numer 0 + 359 $0350 - IOCB1 - blok kontroli I/O numer 1 + 360 $0360 - IOCB2 - blok kontroli I/O numer 2 + 361 $0370 - IOCB3 - blok kontroli I/O numer 3 + 362 $0380 - IOCB4 - blok kontroli I/O numer 4 + 363 $0390 - IOCB5 - blok kontroli I/O numer 5 + 364 $03A0 - IOCB6 - blok kontroli I/O numer 6 + 365 $03B0 - IOCB7 - blok kontroli I/O numer 7 + 366 $0340 - ICCHID - indeks wpisu urządzenia w HATABS + 367 $0341 - ICDNO - numer urządzenia + 368 $0342 - ICCMD - kod rozkazu operacji I/O + 369 $0343 - ICSTAT - status operacji I/O + 370 $0344 - ICBUFA - adres bufora danych dla operacji I/O + 371 $0346 - ICPUTB - adres procedury przesyłania danych + 372 $0348 - ICBUFL - długość bufora danych dla operacji I/O + 373 $034A - ICAX1 - rejestr pomocniczy dla operacji I/O + 374 $034B - ICAX2 - rejestr pomocniczy dla operacji I/O + 375 $034C - ICAX3 - rejestr pomocniczy dla operacji I/O + 376 $034D - ICAX4 - rejestr pomocniczy dla operacji I/O + 377 $034E - ICAX5 - rejestr pomocniczy dla operacji I/O + 378 $034F - ICAX6 - rejestr pomocniczy dla operacji I/O + 379 $03C0 - PRNBUF - bufor drukarki + 380 $03E8 - SUPERF - znacznik stosowany przy odczycie klawiatury + 381 $03E9 - CKEY - znacznik klawisza START przy zimnym starcie + 382 $03EC - DERRF - znacznik błędu przy otwieraniu edytora + 383 $03FB - CHLINK - rejestr elementów listy liniowej + 384 $03FD - CSCB - bajty kontroli szybkości magnetofonu + 385 $03FF - CRCB - bajt długości rekordu magnetofonowego + 386 $0400 - CASBUF - bufor magnetofonu + 387 $047F - CASBEN - koniec bufora magnetofonu + 388 $D000 - HPOSP0 - pozioma pozycja gracza 0 (Z) + 389 $D000 - KOLM0PF - kolizja pocisku 0 z polem gry (O) + 390 $D001 - HPOSP1 - pozioma pozycja gracza 1 (Z) + 391 $D001 - KOLM1PF - kolizja pocisku 1 z polem gry (O) + 392 $D002 - HPOSP2 - pozioma pozycja gracza 2 (Z) + 393 $D002 - KOLM2PF - kolizja pocisku 2 z polem gry (O) + 394 $D003 - HPOSP3 - pozioma pozycja gracza 3 (Z) + 395 $D003 - KOLM3PF - kolizja pocisku 3 z polem gry (O) + 396 $D004 - HPOSM0 - pozioma pozycja pocisku 0 (Z) + 397 $D004 - KOLP0PF - kolizja gracza 0 z polem gry (O) + 398 $D005 - HPOSM1 - pozioma pozycja pocisku 1 (Z) + 399 $D005 - KOLP1PF - kolizja gracza 1 z polem gry (O) + 400 $D006 - HPOSM2 - pozioma pozycja pocisku 2 (Z) + 401 $D006 - KOLP2PF - kolizja gracza 2 z polem gry (O) + 402 $D007 - HPOSM3 - pozioma pozycja pocisku 3 (Z) + 403 $D007 - KOLP3PF - kolizja gracza 3 z polem gry (O) + 404 $D008 - SIZEP0 - poziomy rozmiar gracza 0 (Z) + 405 $D008 - KOLM0P - kolizja pocisku 0 z graczem (O) + 406 $D009 - SIZEP1 - poziomy rozmiar gracza 1 (Z) + 407 $D009 - KOLM1P - kolizja pocisku 1 z graczem (O) + 408 $D00A - SIZEP2 - poziomy rozmiar gracza 2 (Z) + 409 $D00A - KOLM2P - kolizja pocisku 2 z graczem (O) + 410 $D00B - SIZEP3 - poziomy rozmiar gracza 3 (Z) + 411 $D00B - KOLM3P - kolizja pocisku 3 z graczem (O) + 412 $D00C - SIZEM - poziomy rozmiar pocisków (Z) + 413 $D00C - KOLP0P - kolizja gracza 0 z innym graczem (O) + 414 $D00D - GRAFP0 - rejestr grafiki gracza 0 (Z) + 415 $D00D - KOLP1P - kolizja gracza 1 z innym graczem (O) + 416 $D00E - GRAFP1 - rejestr grafiki gracza 1 (Z) + 417 $D00E - KOLP2P - kolizja gracza 2 z innym graczem (O) + 418 $D00F - GRAFP2 - rejestr grafiki gracza 2 (Z) + 419 $D00F - KOLP3P - kolizja gracza 3 z innym graczem (O) + 420 $D010 - GRAFP3 - rejestr grafiki gracza 3 (Z) + 421 $D010 - TRIG0 - stan przycisku joysticka 0 (O) + 422 $D011 - GRAFM - rejestr grafiki pocisków (Z) + 423 $D011 - TRIG1 - stan przycisku joysticka 1 (O) + 424 $D012 - COLPM0 - rejestr koloru gracza i pocisku 0 (Z) + 425 $D013 - COLPM1 - rejestr koloru gracza i pocisku 1 (Z) + 426 $D013 - TRIG3 - znacznik dołączenia cartridge'a (O) + 427 $D014 - COLPM2 - rejestr koloru gracza i pocisku 2 (Z) + 428 $D014 - PAL - znacznik systemu TV (O) + 429 $D015 - COLPM3 - rejestr koloru gracza i pocisku 3 (Z) + 430 $D016 - COLPF0 - rejestr koloru pola gry 0 (Z) + 431 $D017 - COLPF1 - rejestr koloru pola gry 1 (Z) + 432 $D018 - COLPF2 - rejestr koloru pola gry 2 (Z) + 433 $D019 - COLPF3 - rejestr koloru pola gry 3 (Z) + 434 $D01A - COLBAK - rejestr koloru tła (Z) + 435 $D01B - GTIACTL - rejestr kontroli układu GTIA + 436 $D01C - VDELAY - licznik opóźnienia pionowego P/MG + 437 $D01D - PMCNTL - rejestr kontroli graczy i pocisków + 438 $D01E - HITCLR - rejestr kasowania rejestrów kolizji + 439 $D01F - CONSOL - rejestr stanu klawiszy konsoli + 440 $D1FF - PDVREG - rejestr wyboru nowego urządzenia + 441 $D200 - AUDF1 - częstotliwość pracy generatora 1 (Z) + 442 $D200 - POT0 - rejestr położenia potencjometru 0 (O) + 443 $D201 - AUDC1 - rejestr kontroli dźwięku generatora 1 (Z) + 444 $D201 - POT1 - rejestr położenia potencjometru 1 (O) + 445 $D202 - AUDF2 - częstotliwość pracy generatora 2 (Z) + 446 $D202 - POT2 - rejestr położenia potencjometru 2 (O) + 447 $D203 - AUDC2 - rejestr kontroli dźwięku generatora 2 (Z) + 448 $D203 - POT3 - rejestr położenia potencjometru 3 (O) + 449 $D204 - AUDF3 - częstotliwość pracy generatora 3 (Z) + 450 $D205 - AUDC3 - rejestr kontroli dźwięku generatora 3 (Z) + 451 $D206 - AUDF4 - częstotliwość pracy generatora 4 (Z) + 452 $D207 - AUDC4 - rejestr kontroli dźwięku generatora 4 (Z) + 453 $D208 - AUDCTL - rejestr kontroli generatorów dźwięku (Z) + 454 $D208 - POTST - status odczytu potencjometrów (O) + 455 $D209 - STIMER - rejestr zerowania liczników (Z) + 456 $D209 - KBCODE - kod ostatnio naciśniętego klawisza (O) + 457 $D20A - SKSTRES - reset statusu złącza szeregowego (Z) + 458 $D20A - RANDOM - rejestr liczby losowej (O) + 459 $D20B - POTG0 - znacznik przetwornika analogowo-cyfrowego (Z) + 460 $D20D - SEROUT - szeregowy rejestr wyjściowy (Z) + 461 $D20D - SERIN - szeregowy rejestr wejściowy (O) + 462 $D20E - IRQEN - zezwolenia przerwań IRQ (Z) + 463 $D20E - IRQST - status przerwań IRQ (O) + 464 $D20F - SKCTL - rejestr kontroli złącza szeregowego (Z) + 465 $D20F - SKSTAT - rejestr statusu złącza szeregowego (O) + 466 $D300 - PORTA - port A układu PIA + 467 $D301 - PORTB - port B układu PIA + 468 $D302 - PACTL - rejestr kontroli portu A + 469 $D303 - PBCTL - rejestr kontroli portu B + 470 $D400 - DMACTL - rejestr kontroli dostępu do pamięci + 471 $D401 - CHRCTL - rejestr kontroli wyświetlania znaków + 472 $D402 - DLPTR - adres programu ANTIC-a + 473 $D404 - HSCROL - znacznik poziomego przesuwu obrazu + 474 $D405 - VSCROL - znacznik pionowego przesuwu obrazu + 475 $D407 - PMBASE - adres pamięci graczy i pocisków + 476 $D409 - CHBASE - adres zestawu znaków + 477 $D40A - WSYNC - znacznik oczekiwania na synchronizację poziomą + 478 $D40B - VCOUNT - licznik linii obrazu + 479 $D40C - LPENH - poziome położenie pióra świetlengo + 480 $D40D - LPENV - pionowe położenie pióra świetlnego + 481 $D40E - NMIEN - rejestr zezwoleń na przerwania NMI + 482 $D40F - NMIST - rejestr statusu przerwań NMI + 483 */ + 483 + 3 icl 'macro.asm' +Source: C:\jac\wudsn\Workspace\no_internet\macro.asm + 1 ;------------------------------------- + 2 .MACRO ROLW + 3 ROL :1 + 4 ROL :1+1 + 5 .ENDM + 6 ;------------------------------------- + 7 .MACRO ASLW + 8 ASL :1 + 9 ROL :1+1 + 10 .ENDM + 11 ;------------------------------------- + 12 .MACRO RORW + 13 ROR :1+1 + 14 ROR :1 + 15 .ENDM + 16 ;------------------------------------- + 17 .MACRO LSRW + 18 LSR :1+1 + 19 ROR :1 + 20 .ENDM + 21 + 22 ;------------------------------------- + 23 .MACRO VMAIN + 24 ; VMAIN #WORD,interrupt.vector + 25 ; interrupt.vector: + 26 ; 0 - VIMIRQ + 27 ; 1 - TIMCNT1 + 28 ; 2 - TIMCNT2 + 29 ; 3 - TIMCNT3 + 30 ; 4 - TIMCNT4 + 31 ; 5 - TIMCNT5 + 32 ; 6 - VVBLKI + 33 ; 7 - VVBLKD + 34 ; 8 - TIMVEC1 + 35 ; 9 - TIMVEC2 + 36 ; Initialises Vertical Blank Interrupts + 37 ; (works only with system interrupts ON) + 38 LDY # <:1 + 39 LDX # >:1 + 40 LDA #:2 + 41 JSR SETVBV + 42 .ENDM + 43 ;------------------------------------- + 44 .MACRO VDLI + 45 ; VDLI #WORD + 46 ; Initialises Display List Interrupts + 47 LDY # <:1 + 48 LDX # >:1 + 49 LDA #$C0 + 50 STY $0200 + 51 STX $0201 + 52 STA NMIEN + 53 .ENDM + 54 ;------------------------------------- + 55 .MACRO halt + 56 ?stop + 57 .if :1 + 58 lda RANDOM + 59 and #:1 + 60 sta COLBAK + 61 .endif + 62 jmp ?stop + 63 .ENDM + 64 ;------------------------------------- + 65 .MACRO KEY + 66 ; KEY + 67 ; waits for releasing and pressing "any key" + 68 PHA + 69 ?CK1 LDA SKSTAT + 70 AND #$04 + 71 BEQ ?CK1 + 72 ?CK LDA SKSTAT + 73 AND #$04 + 74 BNE ?CK + 75 PLA + 76 .ENDM + 77 ;------------------------------------- + 78 .MACRO WAIT ;waits one frame (1/50 s(PAL) or 1/60s(NTSC)) + 79 ;uses: A + 80 LDA VCOUNT + 81 STA WSYNC + 82 STA WSYNC + 83 STA WSYNC + 84 @ CMP VCOUNT + 85 BNE @- + 86 .ENDM + 87 ;------------------------------------- + 88 .macro negw + 89 ; negate the given word (0-a) + 90 ;------------------------------------- + 91 sec + 92 lda #$00 + 93 sbc :1 + 94 sta :1 + 95 lda #$00 + 96 sbc :1+1 + 97 sta :1+1 + 98 .endm + 99 ;------------------------------------- + 100 .macro randomize ;returns (in A) a random .byte between "floor" (incl) and "ceiling" (excl) + 101 ;usage: randomize floor ceiling AND + 102 ;uses: A + 103 + 104 ?rand + 105 lda random + 106 .if :3 + 107 and #:3 + 108 .endif + 109 cmp #:1 ;floor + 110 bcc ?rand + 111 cmp #:2+1 ;ceiling + 112 bcs ?rand + 113 .endm + 114 ;------------------------------------- + 115 .macro phx + 116 txa + 117 pha + 118 .endm + 119 ;------------------------------------- + 120 .macro phy + 121 tya + 122 pha + 123 .endm + 124 ;------------------------------------- + 125 .macro plx + 126 pla + 127 tax + 128 .endm + 129 ;------------------------------------- + 130 .macro ply + 131 pla + 132 tay + 133 .endm + 134 ;------------------------------------- + 135 .macro pause ;waits :1 number (byte) of frames + 136 ;uses: AX + 137 .if :1 > 0 + 138 ldx #:1 + 139 loop wait + 140 dex + 141 bne loop + 142 .else + 143 wait + 144 .endif + 145 .ENDM + 146 + 4 + 5 .zpvar tmp, tmp0, tmp1, tmp2, tmp3 .word + 6 = 0080 sw = $80 ;screen width in bytes + 7 = 0080 sh = 128 ; screen height in lines + 8 = 4000 screen = $4000 + 9 = 9000 pmgraph = $9000 + 10 = 0080 TMP + 10 = 0082 TMP0 + 10 = 0084 TMP1 + 10 = 0086 TMP2 + 10 = 0088 TMP3 + 10 org $2000 + 11 dl + 12 FFFF> 2000-2250> 70 70 + .byte $70,$70,$70 + 13 2003 dl_addrs ;start of lines + 14 .REPT sh + 15 .BYTE $5F + 16 .WORD SCREEN+#*SW + 17 .ENDR + 17 .ENDR +Source: REPT + 15 2003 5F .BYTE $5F + 15 2004 00 40 .WORD SCREEN+#*SW + 15 2006 5F .BYTE $5F + 15 2007 80 40 .WORD SCREEN+#*SW + 15 2009 5F .BYTE $5F + 15 200A 00 41 .WORD SCREEN+#*SW + 15 200C 5F .BYTE $5F + 15 200D 80 41 .WORD SCREEN+#*SW + 15 200F 5F .BYTE $5F + 15 2010 00 42 .WORD SCREEN+#*SW + 15 2012 5F .BYTE $5F + 15 2013 80 42 .WORD SCREEN+#*SW + 15 2015 5F .BYTE $5F + 15 2016 00 43 .WORD SCREEN+#*SW + 15 2018 5F .BYTE $5F + 15 2019 80 43 .WORD SCREEN+#*SW + 15 201B 5F .BYTE $5F + 15 201C 00 44 .WORD SCREEN+#*SW + 15 201E 5F .BYTE $5F + 15 201F 80 44 .WORD SCREEN+#*SW + 15 2021 5F .BYTE $5F + 15 2022 00 45 .WORD SCREEN+#*SW + 15 2024 5F .BYTE $5F + 15 2025 80 45 .WORD SCREEN+#*SW + 15 2027 5F .BYTE $5F + 15 2028 00 46 .WORD SCREEN+#*SW + 15 202A 5F .BYTE $5F + 15 202B 80 46 .WORD SCREEN+#*SW + 15 202D 5F .BYTE $5F + 15 202E 00 47 .WORD SCREEN+#*SW + 15 2030 5F .BYTE $5F + 15 2031 80 47 .WORD SCREEN+#*SW + 15 2033 5F .BYTE $5F + 15 2034 00 48 .WORD SCREEN+#*SW + 15 2036 5F .BYTE $5F + 15 2037 80 48 .WORD SCREEN+#*SW + 15 2039 5F .BYTE $5F + 15 203A 00 49 .WORD SCREEN+#*SW + 15 203C 5F .BYTE $5F + 15 203D 80 49 .WORD SCREEN+#*SW + 15 203F 5F .BYTE $5F + 15 2040 00 4A .WORD SCREEN+#*SW + 15 2042 5F .BYTE $5F + 15 2043 80 4A .WORD SCREEN+#*SW + 15 2045 5F .BYTE $5F + 15 2046 00 4B .WORD SCREEN+#*SW + 15 2048 5F .BYTE $5F + 15 2049 80 4B .WORD SCREEN+#*SW + 15 204B 5F .BYTE $5F + 15 204C 00 4C .WORD SCREEN+#*SW + 15 204E 5F .BYTE $5F + 15 204F 80 4C .WORD SCREEN+#*SW + 15 2051 5F .BYTE $5F + 15 2052 00 4D .WORD SCREEN+#*SW + 15 2054 5F .BYTE $5F + 15 2055 80 4D .WORD SCREEN+#*SW + 15 2057 5F .BYTE $5F + 15 2058 00 4E .WORD SCREEN+#*SW + 15 205A 5F .BYTE $5F + 15 205B 80 4E .WORD SCREEN+#*SW + 15 205D 5F .BYTE $5F + 15 205E 00 4F .WORD SCREEN+#*SW + 15 2060 5F .BYTE $5F + 15 2061 80 4F .WORD SCREEN+#*SW + 15 2063 5F .BYTE $5F + 15 2064 00 50 .WORD SCREEN+#*SW + 15 2066 5F .BYTE $5F + 15 2067 80 50 .WORD SCREEN+#*SW + 15 2069 5F .BYTE $5F + 15 206A 00 51 .WORD SCREEN+#*SW + 15 206C 5F .BYTE $5F + 15 206D 80 51 .WORD SCREEN+#*SW + 15 206F 5F .BYTE $5F + 15 2070 00 52 .WORD SCREEN+#*SW + 15 2072 5F .BYTE $5F + 15 2073 80 52 .WORD SCREEN+#*SW + 15 2075 5F .BYTE $5F + 15 2076 00 53 .WORD SCREEN+#*SW + 15 2078 5F .BYTE $5F + 15 2079 80 53 .WORD SCREEN+#*SW + 15 207B 5F .BYTE $5F + 15 207C 00 54 .WORD SCREEN+#*SW + 15 207E 5F .BYTE $5F + 15 207F 80 54 .WORD SCREEN+#*SW + 15 2081 5F .BYTE $5F + 15 2082 00 55 .WORD SCREEN+#*SW + 15 2084 5F .BYTE $5F + 15 2085 80 55 .WORD SCREEN+#*SW + 15 2087 5F .BYTE $5F + 15 2088 00 56 .WORD SCREEN+#*SW + 15 208A 5F .BYTE $5F + 15 208B 80 56 .WORD SCREEN+#*SW + 15 208D 5F .BYTE $5F + 15 208E 00 57 .WORD SCREEN+#*SW + 15 2090 5F .BYTE $5F + 15 2091 80 57 .WORD SCREEN+#*SW + 15 2093 5F .BYTE $5F + 15 2094 00 58 .WORD SCREEN+#*SW + 15 2096 5F .BYTE $5F + 15 2097 80 58 .WORD SCREEN+#*SW + 15 2099 5F .BYTE $5F + 15 209A 00 59 .WORD SCREEN+#*SW + 15 209C 5F .BYTE $5F + 15 209D 80 59 .WORD SCREEN+#*SW + 15 209F 5F .BYTE $5F + 15 20A0 00 5A .WORD SCREEN+#*SW + 15 20A2 5F .BYTE $5F + 15 20A3 80 5A .WORD SCREEN+#*SW + 15 20A5 5F .BYTE $5F + 15 20A6 00 5B .WORD SCREEN+#*SW + 15 20A8 5F .BYTE $5F + 15 20A9 80 5B .WORD SCREEN+#*SW + 15 20AB 5F .BYTE $5F + 15 20AC 00 5C .WORD SCREEN+#*SW + 15 20AE 5F .BYTE $5F + 15 20AF 80 5C .WORD SCREEN+#*SW + 15 20B1 5F .BYTE $5F + 15 20B2 00 5D .WORD SCREEN+#*SW + 15 20B4 5F .BYTE $5F + 15 20B5 80 5D .WORD SCREEN+#*SW + 15 20B7 5F .BYTE $5F + 15 20B8 00 5E .WORD SCREEN+#*SW + 15 20BA 5F .BYTE $5F + 15 20BB 80 5E .WORD SCREEN+#*SW + 15 20BD 5F .BYTE $5F + 15 20BE 00 5F .WORD SCREEN+#*SW + 15 20C0 5F .BYTE $5F + 15 20C1 80 5F .WORD SCREEN+#*SW + 15 20C3 5F .BYTE $5F + 15 20C4 00 60 .WORD SCREEN+#*SW + 15 20C6 5F .BYTE $5F + 15 20C7 80 60 .WORD SCREEN+#*SW + 15 20C9 5F .BYTE $5F + 15 20CA 00 61 .WORD SCREEN+#*SW + 15 20CC 5F .BYTE $5F + 15 20CD 80 61 .WORD SCREEN+#*SW + 15 20CF 5F .BYTE $5F + 15 20D0 00 62 .WORD SCREEN+#*SW + 15 20D2 5F .BYTE $5F + 15 20D3 80 62 .WORD SCREEN+#*SW + 15 20D5 5F .BYTE $5F + 15 20D6 00 63 .WORD SCREEN+#*SW + 15 20D8 5F .BYTE $5F + 15 20D9 80 63 .WORD SCREEN+#*SW + 15 20DB 5F .BYTE $5F + 15 20DC 00 64 .WORD SCREEN+#*SW + 15 20DE 5F .BYTE $5F + 15 20DF 80 64 .WORD SCREEN+#*SW + 15 20E1 5F .BYTE $5F + 15 20E2 00 65 .WORD SCREEN+#*SW + 15 20E4 5F .BYTE $5F + 15 20E5 80 65 .WORD SCREEN+#*SW + 15 20E7 5F .BYTE $5F + 15 20E8 00 66 .WORD SCREEN+#*SW + 15 20EA 5F .BYTE $5F + 15 20EB 80 66 .WORD SCREEN+#*SW + 15 20ED 5F .BYTE $5F + 15 20EE 00 67 .WORD SCREEN+#*SW + 15 20F0 5F .BYTE $5F + 15 20F1 80 67 .WORD SCREEN+#*SW + 15 20F3 5F .BYTE $5F + 15 20F4 00 68 .WORD SCREEN+#*SW + 15 20F6 5F .BYTE $5F + 15 20F7 80 68 .WORD SCREEN+#*SW + 15 20F9 5F .BYTE $5F + 15 20FA 00 69 .WORD SCREEN+#*SW + 15 20FC 5F .BYTE $5F + 15 20FD 80 69 .WORD SCREEN+#*SW + 15 20FF 5F .BYTE $5F + 15 2100 00 6A .WORD SCREEN+#*SW + 15 2102 5F .BYTE $5F + 15 2103 80 6A .WORD SCREEN+#*SW + 15 2105 5F .BYTE $5F + 15 2106 00 6B .WORD SCREEN+#*SW + 15 2108 5F .BYTE $5F + 15 2109 80 6B .WORD SCREEN+#*SW + 15 210B 5F .BYTE $5F + 15 210C 00 6C .WORD SCREEN+#*SW + 15 210E 5F .BYTE $5F + 15 210F 80 6C .WORD SCREEN+#*SW + 15 2111 5F .BYTE $5F + 15 2112 00 6D .WORD SCREEN+#*SW + 15 2114 5F .BYTE $5F + 15 2115 80 6D .WORD SCREEN+#*SW + 15 2117 5F .BYTE $5F + 15 2118 00 6E .WORD SCREEN+#*SW + 15 211A 5F .BYTE $5F + 15 211B 80 6E .WORD SCREEN+#*SW + 15 211D 5F .BYTE $5F + 15 211E 00 6F .WORD SCREEN+#*SW + 15 2120 5F .BYTE $5F + 15 2121 80 6F .WORD SCREEN+#*SW + 15 2123 5F .BYTE $5F + 15 2124 00 70 .WORD SCREEN+#*SW + 15 2126 5F .BYTE $5F + 15 2127 80 70 .WORD SCREEN+#*SW + 15 2129 5F .BYTE $5F + 15 212A 00 71 .WORD SCREEN+#*SW + 15 212C 5F .BYTE $5F + 15 212D 80 71 .WORD SCREEN+#*SW + 15 212F 5F .BYTE $5F + 15 2130 00 72 .WORD SCREEN+#*SW + 15 2132 5F .BYTE $5F + 15 2133 80 72 .WORD SCREEN+#*SW + 15 2135 5F .BYTE $5F + 15 2136 00 73 .WORD SCREEN+#*SW + 15 2138 5F .BYTE $5F + 15 2139 80 73 .WORD SCREEN+#*SW + 15 213B 5F .BYTE $5F + 15 213C 00 74 .WORD SCREEN+#*SW + 15 213E 5F .BYTE $5F + 15 213F 80 74 .WORD SCREEN+#*SW + 15 2141 5F .BYTE $5F + 15 2142 00 75 .WORD SCREEN+#*SW + 15 2144 5F .BYTE $5F + 15 2145 80 75 .WORD SCREEN+#*SW + 15 2147 5F .BYTE $5F + 15 2148 00 76 .WORD SCREEN+#*SW + 15 214A 5F .BYTE $5F + 15 214B 80 76 .WORD SCREEN+#*SW + 15 214D 5F .BYTE $5F + 15 214E 00 77 .WORD SCREEN+#*SW + 15 2150 5F .BYTE $5F + 15 2151 80 77 .WORD SCREEN+#*SW + 15 2153 5F .BYTE $5F + 15 2154 00 78 .WORD SCREEN+#*SW + 15 2156 5F .BYTE $5F + 15 2157 80 78 .WORD SCREEN+#*SW + 15 2159 5F .BYTE $5F + 15 215A 00 79 .WORD SCREEN+#*SW + 15 215C 5F .BYTE $5F + 15 215D 80 79 .WORD SCREEN+#*SW + 15 215F 5F .BYTE $5F + 15 2160 00 7A .WORD SCREEN+#*SW + 15 2162 5F .BYTE $5F + 15 2163 80 7A .WORD SCREEN+#*SW + 15 2165 5F .BYTE $5F + 15 2166 00 7B .WORD SCREEN+#*SW + 15 2168 5F .BYTE $5F + 15 2169 80 7B .WORD SCREEN+#*SW + 15 216B 5F .BYTE $5F + 15 216C 00 7C .WORD SCREEN+#*SW + 15 216E 5F .BYTE $5F + 15 216F 80 7C .WORD SCREEN+#*SW + 15 2171 5F .BYTE $5F + 15 2172 00 7D .WORD SCREEN+#*SW + 15 2174 5F .BYTE $5F + 15 2175 80 7D .WORD SCREEN+#*SW + 15 2177 5F .BYTE $5F + 15 2178 00 7E .WORD SCREEN+#*SW + 15 217A 5F .BYTE $5F + 15 217B 80 7E .WORD SCREEN+#*SW + 15 217D 5F .BYTE $5F + 15 217E 00 7F .WORD SCREEN+#*SW + 15 2180 5F .BYTE $5F + 15 2181 80 7F .WORD SCREEN+#*SW +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 18 2183 41 .byte $41 + 19 2184 00 20 .word DL + 20 2186 start + 21 2186 A9 23 8D 2F 02 mva #%00100011 DMACTLS + 22 218B A9 00 8D 30 02 A9 + mwa #dl DLPTRS + 23 2195 A9 0C 8D 20 25 mva #12 move_scr.hscr_state ;hscroll initialisation + 24 219A 8D 04 D4 sta HSCROL + 25 + 26 219D A9 00 8D C5 02 mva #0 COLPF1S + 27 21A2 A9 0F 8D C8 02 mva #$0F COLBAKS + 28 21A7 A9 0F 8D C6 02 mva #$0f COLPF2S + 29 + 30 + 31 21AC 20 FA 23 jsr sprites_init + 32 21AF pause 1 +Macro: PAUSE [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 3 21AF A2 01 ldx #1 + 4 21B1 loop wait +Macro: WAIT [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 2 21B1 AD 0B D4 LDA VCOUNT + 3 21B4 8D 0A D4 STA WSYNC + 4 21B7 8D 0A D4 STA WSYNC + 5 21BA 8D 0A D4 STA WSYNC + 6 21BD CD 0B D4 @ CMP VCOUNT + 7 21C0 D0 FB BNE @- +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 5 21C2 CA dex + 6 21C3 D0 EC bne loop +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 33 21C5 20 89 23 jsr ground_init + 34 + 35 21C8 A2 14 ldx #20 + 36 21CA A0 00 ldy #0 + 37 21CC 20 AA 23 jsr cactus + 38 21CF A2 1E ldx #30 + 39 21D1 A0 01 ldy #1 + 40 21D3 20 AA 23 jsr cactus + 41 21D6 A2 28 ldx #40 + 42 21D8 A0 02 ldy #2 + 43 21DA 20 AA 23 jsr cactus + 44 + 45 21DD A2 00 xx ldx #0 ; anim phaze + 46 21DF A0 36 yy ldy #54 + 47 21E1 20 32 24 jsr dino_pm + 48 21E4 EE DE 21 AD DE 21 inc:lda xx+1 + 49 21EA C9 03 cmp #3 + 50 21EC D0 05 sne + 51 21EE A9 00 8D DE 21 mva #0 xx+1 + 52 21F3 key +Macro: KEY [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 3 21F3 48 PHA + 4 21F4 AD 0F D2 ?CK1 LDA SKSTAT + 5 21F7 29 04 AND #$04 + 6 21F9 F0 F9 BEQ ?CK1 + 7 21FB AD 0F D2 ?CK LDA SKSTAT + 8 21FE 29 04 AND #$04 + 9 2200 D0 F9 BNE ?CK + 10 2202 68 PLA +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 53 2203 20 04 25 jsr move_scr + 54 2206 4C DD 21 jmp xx + 55 + 56 + 57 2209 llp + 58 2209 A9 00 8D 51 22 mva #0 ntmp + 59 220E lp + 60 220E AE 51 22 ldx ntmp + 61 2211 A0 62 ldy #98 + 62 2213 20 52 22 jsr dino + 63 2216 key +Macro: KEY [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 3 2216 48 PHA + 4 2217 AD 0F D2 ?CK1 LDA SKSTAT + 5 221A 29 04 AND #$04 + 6 221C F0 F9 BEQ ?CK1 + 7 221E AD 0F D2 ?CK LDA SKSTAT + 8 2221 29 04 AND #$04 + 9 2223 D0 F9 BNE ?CK + 10 2225 68 PLA +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 64 2226 20 D5 22 jsr dino_clear + 65 2229 key +Macro: KEY [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 3 2229 48 PHA + 4 222A AD 0F D2 ?CK1 LDA SKSTAT + 5 222D 29 04 AND #$04 + 6 222F F0 F9 BEQ ?CK1 + 7 2231 AD 0F D2 ?CK LDA SKSTAT + 8 2234 29 04 AND #$04 + 9 2236 D0 F9 BNE ?CK + 10 2238 68 PLA +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 66 2239 EE 51 22 AD 51 22 inc:lda ntmp + 67 223F C9 03 cmp #3 + 68 2241 D0 CB bne lp + 69 2243 4C 09 22 jmp llp + 70 + 71 + 72 2246 halt 03 +Macro: HALT [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 1 2246 ?stop + 3 2246 AD 0A D2 lda RANDOM + 4 2249 29 03 and #03 + 5 224B 8D 1A D0 sta COLBAK + 7 224E 4C 46 22 jmp ?stop +Source: C:\jac\wudsn\Workspace\no_internet\ni.asm + 73 + 74 02E0-02E1> 86 21 run start + 75 2251-2ACB> 00 ntmp .by 0 + 76 + 77 2252 icl 'procs.asm' +Source: C:\jac\wudsn\Workspace\no_internet\procs.asm + 1 ; @com.wudsn.ide.asm.mainsourcefile=ni.asm + 2 + 3 2252 .proc dino ; dino to the screen + 4 ; uses: AXY tmp0 tmp1 tmp2 tmp3 + 5 ; Y - ypos in lines + 6 ; X - dino phase (0,1,..) + 7 + 8 = 0080 _dino = tmp ; _underscore means pointer here and else + 9 = 0084 _mask = tmp1 ; local vars for reusing zero page variables + 10 = 0086 _scr = tmp2 + 11 = 0088 _back = tmp3 + 12 2252 8C 25 27 sty dino_save_y ;save for clearing + 13 ; get line address offset + 14 2255 B9 5C 27 lda scr_addrs_l,y + 15 2258 85 86 sta _scr + 16 225A B9 DC 27 lda scr_addrs_h,y + 17 225D 85 87 sta _scr+1 + 18 ; add x position (hardcoded, dino does not move) + 19 225F 18 A5 86 69 0A 85 + adw _scr #10 + 20 ;was: mwa #screen+10+96*sw scr_ ;10 = xpos, 96 == ypos on the screen + 21 + 22 226A BD D1 26 lda dino_tab_l,x + 23 226D 85 80 sta _dino + 24 226F BD D4 26 lda dino_tab_h,x + 25 2272 85 81 sta _dino+1 + 26 + 27 2274 BD D7 26 lda dino_mask_tab_l,x + 28 2277 85 84 sta _mask + 29 2279 BD DA 26 lda dino_mask_tab_h,x + 30 227C 85 85 sta _mask+1 + 31 + 32 227E A9 89 85 84 A9 26 + mwa #dino_mask2 _mask + 33 2286 A9 DD 85 88 A9 26 + mwa #dino_back _back + 34 228E A2 18 ldx #24 + 35 2290 loop1 + 36 2290 A0 00 ldy #0 + 37 2292 dn1 + 38 2292 B1 86 lda (_scr),y ; get screen contents + 39 2294 91 88 sta (_back),y ; save background for sprite removal + 40 2296 B1 84 lda (_mask),y ; mask + 41 2298 49 FF eor #$ff ; inverse, 'cause mads does not inverse OK with '*' + 42 229A 31 86 and (_scr),y ; get screen contents + 43 229C 11 80 ora (_dino),y + 44 229E 91 86 sta (_scr),y + 45 22A0 C8 iny + 46 22A1 C0 03 cpy #3 + 47 22A3 D0 ED bne dn1 + 48 22A5 18 A5 80 69 03 85 + adw _dino #3 + 49 22B0 18 A5 84 69 03 85 + adw _mask #3 + 50 22BB 18 A5 88 69 03 85 + adw _back #3 + 51 22C6 18 A5 86 69 80 85 + adw _scr #sw + 52 22D1 CA dex + 53 22D2 D0 BC bne loop1 + 54 22D4 60 rts + 55 .endp + 56 ;---------- + 57 22D5 .proc dino_clear ; remove old dino + 58 ; uses: AXY tmp2 tmp3 + 59 = 0086 _scr = tmp2 + 60 = 0088 _back = tmp3 + 61 22D5 AC 25 27 ldy dino_save_y ;ypos + 62 ; get line address offset + 63 22D8 B9 5C 27 lda scr_addrs_l,y + 64 22DB 85 86 sta _scr + 65 22DD B9 DC 27 lda scr_addrs_h,y + 66 22E0 85 87 sta _scr+1 + 67 ; add x position (hardcoded, dino does not move) + 68 22E2 18 A5 86 69 0A 85 + adw _scr #10 + 69 ;mwa #screen+10+96*sw scr_ ;10 = xpos, 96 == ypos on the screen + 70 + 71 22ED A9 DD 85 88 A9 26 + mwa #dino_back _back + 72 22F5 A2 18 ldx #24 + 73 22F7 loop1 + 74 22F7 A0 00 ldy #0 + 75 22F9 dn1 + 76 22F9 B1 88 lda (_back),y ; give back background for sprite removal + 77 22FB 91 86 sta (_scr),y + 78 22FD C8 iny + 79 22FE C0 03 cpy #3 + 80 2300 D0 F7 bne dn1 + 81 2302 18 A5 88 69 03 85 + adw _back #3 + 82 230D 18 A5 86 69 80 85 + adw _scr #sw + 83 2318 CA dex + 84 2319 D0 DC bne loop1 + 85 231B 60 rts + 86 .endp + 87 ;---------- + 88 231C .proc ground ; ground breaking, i.e. drawing + 89 ; uses: AXY tmp1 tmp2 + 90 ; X: x on screen in words (2 bytes) + 91 ; Y: ground tile number (0 - plain ground) + 92 = 0084 _gnd = tmp1 + 93 = 0086 _scr = tmp2 + 94 + 95 231C B9 56 27 lda gnd_tab_l,y + 96 231F 85 84 sta _gnd + 97 2321 B9 59 27 lda gnd_tab_h,y + 98 2324 85 85 sta _gnd+1 + 99 2326 A9 00 85 86 A9 78 + mwa #screen+112*sw _scr ;112 is ypos of ground level + 100 232E 8A txa + 101 232F 0A asl ;add X to xpos on screen + 102 2330 18 clc + 103 2331 65 86 adc _scr + 104 2333 85 86 sta _scr + 105 2335 90 02 scc + 106 2337 E6 87 inc _scr+1 + 107 + 108 2339 A2 08 ldx #8 ; tile height in bytes + 109 233B loop1 + 110 233B A0 00 ldy #0 + 111 233D @ + 112 233D B1 84 lda (_gnd),y + 113 233F 91 86 sta (_scr),y + 114 2341 C8 iny + 115 2342 C0 02 cpy #2 ; tile width in bytes + 116 2344 D0 F7 bne @- + 117 2346 18 A5 84 69 02 85 + adw _gnd #2 + 118 2351 18 A5 86 69 80 85 + adw _scr #sw ;next screen line + 119 235C CA dex + 120 235D D0 DC bne loop1 + 121 ; add some debris below + 122 + 123 235F A2 06 ldx #6 ; debris height + 124 2361 loop2 + 125 2361 A0 01 ldy #1 + 126 2363 @ + 127 2363 AD 0A D2 lda RANDOM + 128 2366 2D 0A D2 2D 0A D2 + :5 AND RANDOM + 129 2375 91 86 sta (_scr),y + 130 2377 88 dey + 131 2378 10 E9 bpl @- + 132 237A 18 A5 86 69 80 85 + adw _scr #sw ;next screen line + 133 2385 CA dex + 134 2386 10 D9 bpl loop2 + 135 + 136 2388 60 rts + 137 .endp + 138 2389 .proc ground_init ;draws first 48 segments of a ground + 139 2389 A9 00 85 80 mva #0 tmp + 140 238D ground_loop + 141 238D A5 80 lda tmp + 142 238F AA tax + 143 2390 randomize 0 2 3 +Macro: RANDOMIZE [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm] + 4 2390 ?rand + 5 2390 AD 0A D2 lda random + 7 2393 29 03 and #3 + 9 2395 C9 00 cmp #0 ;floor + 10 2397 90 F7 bcc ?rand + 11 2399 C9 03 cmp #2+1 ;ceiling + 12 239B B0 F3 bcs ?rand +Source: C:\jac\wudsn\Workspace\no_internet\procs.asm + 144 239D A8 tay + 145 239E 20 1C 23 jsr ground + 146 23A1 E6 80 inc tmp + 147 23A3 A5 80 lda tmp + 148 23A5 C9 18 cmp #24 ; screen width in wide mode /2 + 149 23A7 D0 E4 bne ground_loop + 150 23A9 60 rts + 151 .endp + 152 ;---------- + 153 23AA .proc cactus ; drawing cactii + 154 ; uses: AXY tmp1 tmp2 + 155 ; X: x on screen in bytes + 156 ; Y: cactus number + 157 ; draws from bottom up, utilising the fact that .bmp is saved this way + 158 ; updt.: was not able to load .bmp files for unknown reason, so the pics are flipped with WUDSN script + 159 + 160 = 0084 _cact = tmp1 + 161 = 0086 _scr = tmp2 + 162 + 163 23AA B9 C6 2A lda cact_tab_l,y + 164 23AD 85 84 sta _cact + 165 23AF B9 C9 2A lda cact_tab_h,y + 166 23B2 85 85 sta _cact+1 + 167 23B4 A9 00 85 86 A9 7D + mwa #screen+122*sw _scr ;112 is ypos of bottom of the cactii + 168 23BC 8A txa + 169 23BD 18 clc + 170 23BE 65 86 adc _scr + 171 23C0 85 86 sta _scr + 172 23C2 90 02 bcc no_inc + 173 23C4 E6 87 inc _scr+1 + 174 23C6 no_inc + 175 + 176 + 177 23C6 B9 C0 2A lda cact_widths,y + 178 23C9 8D F9 23 sta cact_w ; width in bytes + 179 + 180 23CC B9 C3 2A lda cact_heights,y + 181 23CF AA tax + 182 23D0 loop + 183 23D0 A0 00 ldy #0 + 184 23D2 @ + 185 23D2 B1 86 lda (_scr),y + 186 23D4 11 84 ora (_cact),y + 187 23D6 91 86 sta (_scr),y + 188 23D8 C8 iny + 189 23D9 CC F9 23 cpy cact_w + 190 23DC D0 F4 bne @- + 191 ;adw _cact cact_w ;!!!DOES NOT WORK :((((( + 192 23DE 18 clc + 193 23DF AD F9 23 lda cact_w + 194 23E2 65 84 adc _cact + 195 23E4 85 84 sta _cact + 196 23E6 90 02 scc + 197 23E8 E6 85 inc _cact+1 + 198 + 199 23EA 38 A5 86 E9 80 85 + sbw _scr #sw + 200 23F5 CA dex + 201 23F6 D0 D8 bne loop + 202 23F8 60 rts + 203 23F9 00 cact_w .by 0 + 204 .endp + 205 ;---------- + 206 + 207 23FA .proc sprites_init + 208 ;setting up P/M graphics + 209 23FA A9 90 lda #>pmgraph + 210 23FC 8D 07 D4 sta pmbase + 211 23FF AD 2F 02 lda dmactls + 212 2402 09 0C ora #%00001100 ; Players and Missiles single lined + 213 2404 8D 2F 02 sta dmactls + 214 2407 A9 03 lda #$03 ; P/M on + 215 2409 8D 1D D0 sta pmcntl + 216 240C A9 00 lda #$00 + 217 240E 8D 0C D0 sta sizem ; there will be only M0, double width + 218 2411 8D 08 D0 sta sizep0 ; P0-P3 widths + 219 2414 8D 09 D0 sta sizep0+1 + 220 2417 8D 0A D0 sta sizep0+2 + 221 241A 8D 0B D0 sta sizep0+3 + 222 241D A9 11 lda #$11 ; P/M priorities (bit 4 joins missiles), bit 0 - players on top + 223 241F 8D 6F 02 sta gtictls + 224 /* + 225 ; temporary colours of sprites + 226 mva #$52 COLPM0 + 227 mva #$34 COLPM1 + 228 mva #$76 COLPM2 + 229 mva #$90 COLPM3 + 230 mva #$B0 COLPF3S + 231 */ + 231 + 232 = 002A dx = 42 + 233 2422 A9 2A 8D 00 D0 mva #dx HPOSP0 + 234 2427 A9 32 8D 01 D0 mva #dx+8 HPOSP1 + 235 242C A9 3A 8D 02 D0 MVA #dx+8*2 HPOSP2 + 236 + 237 2431 60 rts + 238 .endp + 239 + 240 2432 .proc dino_pm + 241 ; uses: AXY tmp tmp1 tmp2 tmp3 + 242 ; X: dino animation phase + 243 ; Y: Y position of dino + 244 + 245 = 0084 _dino = tmp1 ; _underscore means pointer here and else + 246 = 0086 _dino_sav = tmp2 ; local vars for reusing zero page variables + 247 = 0088 _spr = tmp3 + 248 ;tmp = tmp + 249 + 250 2432 AD E1 24 8D E2 24 mva dino_save_pm_y dino_save_pm_y_prev + 251 2438 8C E1 24 sty dino_save_pm_y ;save for clearing + 252 + 253 + 254 243B BD D1 26 lda dino_tab_l,x + 255 ;sta _dino + 256 243E 85 86 sta _dino_sav + 257 2440 BD D4 26 lda dino_tab_h,x + 258 ;sta _dino+1 + 259 2443 85 87 sta _dino_sav+1 + 260 + 261 + 262 2445 A9 00 8D E0 24 mva #0 counter + 263 + 264 244A loop0 + 265 ; sprite address calc + 266 244A A9 00 85 88 A9 92 + mwa #(pmgraph+$200) _spr ;1st sprite starts at PMBASE + $200 + 267 ;counter *$80 + 268 2452 A9 80 85 80 A9 FF + mwa #-$80 tmp ;so first add gives "0" + 269 245A AC E0 24 ldy counter + 270 245D @ + 271 245D 18 A5 80 69 80 85 + adw tmp #$80 ;tmp = counter*$80 - calc addr of the sprite to put gfx + 272 2468 88 dey + 273 2469 10 F2 bpl @- + 274 + 275 246B 18 A5 88 65 80 85 + adw _spr tmp + 276 2478 A5 88 85 80 A5 89 + mwa _spr tmp ; save address - it will be used in clearing and then drawing + 277 + 278 2480 AD E2 24 lda dino_save_pm_y_prev ;clearing old sprite, same way as drawing a new one + 279 2483 18 clc ;add ypos to the sprite address + 280 2484 65 88 adc _spr + 281 2486 85 88 sta _spr + 282 ;scc + 283 ;inc _spr+1 ;not necessary, sprites are not crossing pages + 284 + 285 2488 A0 00 ldy #0 ;delete old sprite here + 286 248A 98 tya + 287 248B A2 18 ldx #24 ;dino height + 288 248D @ + 289 248D 91 88 sta (_spr),y + 290 248F C8 iny + 291 2490 CA dex + 292 2491 D0 FA bne @- + 293 + 294 + 295 + 296 ;-------------------------- + 297 2493 A5 80 85 88 A5 81 + mwa tmp _spr + 298 249B AD E1 24 lda dino_save_pm_y ;drawing sprite at a new position + 299 249E 18 clc ;add ypos to the sprite address + 300 249F 65 88 adc _spr + 301 24A1 85 88 sta _spr + 302 ;scc + 303 ;inc _spr+1 ;not necessary, sprites are not crossing pages + 304 + 305 + 306 24A3 18 clc ;beginning of the next column of dino to the sprite + 307 24A4 A5 86 lda _dino_sav ;0- first column, 1 - 2nd, 2 - 3rd + 308 24A6 6D E0 24 adc counter + 309 24A9 85 84 sta _dino + 310 ;bcc @+ ;needs to be removed as both bytes must be copied + 311 24AB A5 87 lda _dino_sav+1 ;original address + 312 24AD 69 00 adc #0 + 313 24AF 85 85 sta _dino+1 + 314 ;@ + 315 + 316 24B1 A0 00 ldy #0 + 317 + 318 24B3 A2 18 ldx #24 ;dino height + 319 24B5 @ + 320 24B5 B1 84 lda (_dino),y + 321 24B7 91 88 sta (_spr),y + 322 24B9 18 A5 84 69 03 85 + adw _dino #3 ;+3 ==> next line in dino + 323 24C4 18 A5 88 69 01 85 + adw _spr #1 + 324 24CF CA dex + 325 24D0 D0 E3 bne @- + 326 + 327 + 328 + 329 24D2 EE E0 24 AD E0 24 inc:lda counter + 330 24D8 C9 03 cmp #3 + 331 24DA F0 03 4C 4A 24 jne loop0 + 332 + 333 + 334 + 335 24DF 60 rts + 336 24E0 00 counter .by 0 + 337 24E1 00 dino_save_pm_y .by 0 + 338 24E2 00 dino_save_pm_y_prev .by 0 + 339 + 340 .endp + 341 + 342 24E3 .proc move_dl ;screen window one byte right + 343 ;uses: AXY + 344 + 345 24E3 A9 04 8D F0 24 A9 + mwa #dl_addrs+1 incr+1 ;self mod + 346 24ED A2 80 ldx #sh + 347 24EF EE FF FF incr inc $ffff + 348 24F2 18 AD F0 24 69 03 + adw incr+1 #3 + 349 2500 CA dex + 350 2501 D0 EC bne incr + 351 2503 60 rts + 352 .endp + 353 + 354 2504 .proc move_scr ;screen window one step (1/4 th of byte) right + 355 2504 CE 20 25 AD 20 25 dec:lda hscr_state + 356 250A 8D 04 D4 sta HSCROL + 357 250D C9 04 cmp #4 + 358 250F D0 0E bne @+ + 359 2511 A9 0C 8D 20 25 mva #12 hscr_state + 360 2516 8D 04 D4 sta HSCROL + 361 2519 20 E3 24 jsr move_dl + 362 251C 20 E3 24 jsr move_dl + 363 251F @ + 364 251F 60 rts + 365 2520 00 hscr_state .by 0 + 366 .endp + 78 2521 icl 'artwork.asm' +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 1 ; @com.wudsn.ide.asm.mainsourcefile=ni.asm + 2 ;------------------------------------------------------------- + 3 ;24x24 pix = 3x3 chars (3x24 bytes) + 4 .rept 3, # + 5 DINO:1 + 6 INS 'art/dino:1.data' + 7 .ENDR + 7 .endr +Source: REPT + 5 2521 DINO0 + 5 2521 00 00 00 00 03 FC + INS 'art/dino0.data' + 5 2569 DINO1 + 5 2569 00 00 00 00 03 FC + INS 'art/dino1.data' + 5 25B1 DINO2 + 5 25B1 00 00 00 00 03 FC + INS 'art/dino2.data' +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 8 + 9 .rept 3, # + 10 DINO_MASK:1 + 11 INS 'art/dino_mask:1.data' + 12 .ENDR + 12 .endr +Source: REPT + 10 25F9 DINO_MASK0 + 10 25F9 FF F8 01 FF F0 00 + INS 'art/dino_mask0.data' + 10 2641 DINO_MASK1 + 10 2641 FF F8 01 FF F0 00 + INS 'art/dino_mask1.data' + 10 2689 DINO_MASK2 + 10 2689 00 07 FE 00 0F FF + INS 'art/dino_mask2.data' +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 13 + 14 26D1 dino_tab_l + 15 .rept 3, # + 16 .BY DINO:1 + 21 .ENDR + 21 .endr +Source: REPT + 20 26D4 25 .BY >DINO0 + 20 26D5 25 .BY >DINO1 + 20 26D6 25 .BY >DINO2 +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 22 + 23 26D7 dino_mask_tab_l + 24 .rept 3, # + 25 .BY DINO_MASK:1 + 30 .ENDR + 30 .endr +Source: REPT + 29 26DA 25 .BY >DINO_MASK0 + 29 26DB 26 .BY >DINO_MASK1 + 29 26DC 26 .BY >DINO_MASK2 +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 31 + 32 26DD dino_back ; background save for dino sprite + 33 26DD 00 00 00 00 00 00 + :3*24 .by 0 + 34 2725 00 dino_save_y .by 0 + 35 + 36 ;------------------------------ + 37 ; ground pictures, 8x16 px = 2x1 chars (2x8 bytes) + 38 .rept 3, # + 39 GND_:1 + 40 INS 'art/gnd_:1.data' + 41 .ENDR + 41 .endr +Source: REPT + 39 2726 GND_0 + 39 2726 00 00 00 00 00 00 + INS 'art/gnd_0.data' + 39 2736 GND_1 + 39 2736 03 F0 06 18 1C 0C + INS 'art/gnd_1.data' + 39 2746 GND_2 + 39 2746 00 00 00 00 00 00 + INS 'art/gnd_2.data' +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 42 2756 gnd_tab_l + 43 .rept 3, # + 44 .BY GND_:1 + 49 .ENDR + 49 .endr +Source: REPT + 48 2759 27 .BY >GND_0 + 48 275A 27 .BY >GND_1 + 48 275B 27 .BY >GND_2 +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 50 275C scr_addrs_l + 51 275C 00 80 00 80 00 80 + :sh .by <(screen+#*sw) + 52 27DC scr_addrs_h + 53 27DC 40 40 41 41 42 42 + :sh .by >(screen+#*sw) + 54 ;------------------------------ + 55 ; cacti pictures, height and width variable + 56 ; cactX.data is flipped vertically + 57 = 0003 cacti = 3 + 58 + 59 .rept cacti, # + 60 CACT:1 + 61 INS 'art/cact:1.data' + 62 .ENDR + 62 .endr +Source: REPT + 60 285C CACT0 + 60 285C 00 00 00 00 03 E0 + INS 'art/cact0.data' + 60 28E8 CACT1 + 60 28E8 00 00 00 00 00 7F + INS 'art/cact1.data' + 60 29A8 CACT2 + 60 29A8 00 00 00 00 00 00 + INS 'art/cact2.data' +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 63 + 64 2AC0 cact_widths ; widths of cactii in bytes + 65 2AC0 04 04 08 .by 4, 4, 8 + 66 2AC3 cact_heights ; heights of cactii in lines + 67 2AC3 23 30 23 .by 35,48,35 + 68 2AC6 cact_tab_l + 69 .rept cacti, # + 70 .BY CACT:1 + 75 .ENDR + 75 .endr +Source: REPT + 74 2AC9 28 .BY >CACT0 + 74 2ACA 28 .BY >CACT1 + 74 2ACB 29 .BY >CACT2 +Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm + 76 diff --git a/ni.xex b/ni.xex new file mode 100644 index 0000000..389d5c5 Binary files /dev/null and b/ni.xex differ diff --git a/procs.asm b/procs.asm new file mode 100644 index 0000000..62c4850 --- /dev/null +++ b/procs.asm @@ -0,0 +1,366 @@ +; @com.wudsn.ide.asm.mainsourcefile=ni.asm + +.proc dino ; dino to the screen + ; uses: AXY tmp0 tmp1 tmp2 tmp3 + ; Y - ypos in lines + ; X - dino phase (0,1,..) + + _dino = tmp ; _underscore means pointer here and else + _mask = tmp1 ; local vars for reusing zero page variables + _scr = tmp2 + _back = tmp3 + sty dino_save_y ;save for clearing + ; get line address offset + lda scr_addrs_l,y + sta _scr + lda scr_addrs_h,y + sta _scr+1 + ; add x position (hardcoded, dino does not move) + adw _scr #10 + ;was: mwa #screen+10+96*sw scr_ ;10 = xpos, 96 == ypos on the screen + + lda dino_tab_l,x + sta _dino + lda dino_tab_h,x + sta _dino+1 + + lda dino_mask_tab_l,x + sta _mask + lda dino_mask_tab_h,x + sta _mask+1 + + mwa #dino_mask2 _mask + mwa #dino_back _back + ldx #24 +loop1 + ldy #0 +dn1 + lda (_scr),y ; get screen contents + sta (_back),y ; save background for sprite removal + lda (_mask),y ; mask + eor #$ff ; inverse, 'cause mads does not inverse OK with '*' + and (_scr),y ; get screen contents + ora (_dino),y + sta (_scr),y + iny + cpy #3 + bne dn1 + adw _dino #3 + adw _mask #3 + adw _back #3 + adw _scr #sw + dex + bne loop1 + rts +.endp +;---------- +.proc dino_clear ; remove old dino + ; uses: AXY tmp2 tmp3 + _scr = tmp2 + _back = tmp3 + ldy dino_save_y ;ypos + ; get line address offset + lda scr_addrs_l,y + sta _scr + lda scr_addrs_h,y + sta _scr+1 + ; add x position (hardcoded, dino does not move) + adw _scr #10 + ;mwa #screen+10+96*sw scr_ ;10 = xpos, 96 == ypos on the screen + + mwa #dino_back _back + ldx #24 +loop1 + ldy #0 +dn1 + lda (_back),y ; give back background for sprite removal + sta (_scr),y + iny + cpy #3 + bne dn1 + adw _back #3 + adw _scr #sw + dex + bne loop1 + rts +.endp +;---------- +.proc ground ; ground breaking, i.e. drawing + ; uses: AXY tmp1 tmp2 + ; X: x on screen in words (2 bytes) + ; Y: ground tile number (0 - plain ground) + _gnd = tmp1 + _scr = tmp2 + + lda gnd_tab_l,y + sta _gnd + lda gnd_tab_h,y + sta _gnd+1 + mwa #screen+112*sw _scr ;112 is ypos of ground level + txa + asl ;add X to xpos on screen + clc + adc _scr + sta _scr + scc + inc _scr+1 + + ldx #8 ; tile height in bytes +loop1 + ldy #0 +@ + lda (_gnd),y + sta (_scr),y + iny + cpy #2 ; tile width in bytes + bne @- + adw _gnd #2 + adw _scr #sw ;next screen line + dex + bne loop1 + ; add some debris below + + ldx #6 ; debris height +loop2 + ldy #1 +@ + lda RANDOM +:5 AND RANDOM + sta (_scr),y + dey + bpl @- + adw _scr #sw ;next screen line + dex + bpl loop2 + + rts +.endp +.proc ground_init ;draws first 48 segments of a ground + mva #0 tmp +ground_loop + lda tmp + tax + randomize 0 2 3 + tay + jsr ground + inc tmp + lda tmp + cmp #24 ; screen width in wide mode /2 + bne ground_loop + rts +.endp +;---------- +.proc cactus ; drawing cactii + ; uses: AXY tmp1 tmp2 + ; X: x on screen in bytes + ; Y: cactus number + ; draws from bottom up, utilising the fact that .bmp is saved this way + ; updt.: was not able to load .bmp files for unknown reason, so the pics are flipped with WUDSN script + + _cact = tmp1 + _scr = tmp2 + + lda cact_tab_l,y + sta _cact + lda cact_tab_h,y + sta _cact+1 + mwa #screen+122*sw _scr ;112 is ypos of bottom of the cactii + txa + clc + adc _scr + sta _scr + bcc no_inc + inc _scr+1 +no_inc + + + lda cact_widths,y + sta cact_w ; width in bytes + + lda cact_heights,y + tax +loop + ldy #0 +@ + lda (_scr),y + ora (_cact),y + sta (_scr),y + iny + cpy cact_w + bne @- + ;adw _cact cact_w ;!!!DOES NOT WORK :((((( + clc + lda cact_w + adc _cact + sta _cact + scc + inc _cact+1 + + sbw _scr #sw + dex + bne loop + rts +cact_w .by 0 +.endp +;---------- + +.proc sprites_init +;setting up P/M graphics + lda #>pmgraph + sta pmbase + lda dmactls + ora #%00001100 ; Players and Missiles single lined + sta dmactls + lda #$03 ; P/M on + sta pmcntl + lda #$00 + sta sizem ; there will be only M0, double width + sta sizep0 ; P0-P3 widths + sta sizep0+1 + sta sizep0+2 + sta sizep0+3 + lda #$11 ; P/M priorities (bit 4 joins missiles), bit 0 - players on top + sta gtictls + /* + ; temporary colours of sprites + mva #$52 COLPM0 + mva #$34 COLPM1 + mva #$76 COLPM2 + mva #$90 COLPM3 + mva #$B0 COLPF3S + */ + dx = 42 + mva #dx HPOSP0 + mva #dx+8 HPOSP1 + MVA #dx+8*2 HPOSP2 + + rts +.endp + +.proc dino_pm + ; uses: AXY tmp tmp1 tmp2 tmp3 + ; X: dino animation phase + ; Y: Y position of dino + + _dino = tmp1 ; _underscore means pointer here and else + _dino_sav = tmp2 ; local vars for reusing zero page variables + _spr = tmp3 + ;tmp = tmp + + mva dino_save_pm_y dino_save_pm_y_prev + sty dino_save_pm_y ;save for clearing + + + lda dino_tab_l,x + ;sta _dino + sta _dino_sav + lda dino_tab_h,x + ;sta _dino+1 + sta _dino_sav+1 + + + mva #0 counter + +loop0 + ; sprite address calc + mwa #(pmgraph+$200) _spr ;1st sprite starts at PMBASE + $200 + ;counter *$80 + mwa #-$80 tmp ;so first add gives "0" + ldy counter +@ + adw tmp #$80 ;tmp = counter*$80 - calc addr of the sprite to put gfx + dey + bpl @- + + adw _spr tmp + mwa _spr tmp ; save address - it will be used in clearing and then drawing + + lda dino_save_pm_y_prev ;clearing old sprite, same way as drawing a new one + clc ;add ypos to the sprite address + adc _spr + sta _spr + ;scc + ;inc _spr+1 ;not necessary, sprites are not crossing pages + + ldy #0 ;delete old sprite here + tya + ldx #24 ;dino height +@ + sta (_spr),y + iny + dex + bne @- + + + + ;-------------------------- + mwa tmp _spr + lda dino_save_pm_y ;drawing sprite at a new position + clc ;add ypos to the sprite address + adc _spr + sta _spr + ;scc + ;inc _spr+1 ;not necessary, sprites are not crossing pages + + + clc ;beginning of the next column of dino to the sprite + lda _dino_sav ;0- first column, 1 - 2nd, 2 - 3rd + adc counter + sta _dino + ;bcc @+ ;needs to be removed as both bytes must be copied + lda _dino_sav+1 ;original address + adc #0 + sta _dino+1 +;@ + + ldy #0 + + ldx #24 ;dino height +@ + lda (_dino),y + sta (_spr),y + adw _dino #3 ;+3 ==> next line in dino + adw _spr #1 + dex + bne @- + + + + inc:lda counter + cmp #3 + jne loop0 + + + + rts +counter .by 0 +dino_save_pm_y .by 0 +dino_save_pm_y_prev .by 0 + +.endp + +.proc move_dl ;screen window one byte right + ;uses: AXY + + mwa #dl_addrs+1 incr+1 ;self mod + ldx #sh +incr inc $ffff + adw incr+1 #3 + dex + bne incr + rts +.endp + +.proc move_scr ;screen window one step (1/4 th of byte) right + dec:lda hscr_state + sta HSCROL + cmp #4 + bne @+ + mva #12 hscr_state + sta HSCROL + jsr move_dl + jsr move_dl +@ + rts +hscr_state .by 0 +.endp \ No newline at end of file