From 68c55aee3b54683ac74ec1f86c58ecf16e68c924 Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sun, 6 Aug 2017 12:52:21 -0700 Subject: [PATCH] Basic full-height terrain rendering with spans --- GSCats.xcodeproj/project.pbxproj | 6 ++++-- GenerateRenderSpans.py | 6 ++---- GenerateVRAMTable.py | 27 +++++++++++++++++++++++++++ gscats.2mg | Bin 819264 -> 819264 bytes gscats.s | 4 +++- trigtables.s => tables.s | 12 ++++++++++++ terrain.s | 19 +++++++++++++++++-- 7 files changed, 65 insertions(+), 9 deletions(-) create mode 100755 GenerateVRAMTable.py rename trigtables.s => tables.s (53%) diff --git a/GSCats.xcodeproj/project.pbxproj b/GSCats.xcodeproj/project.pbxproj index 8daa1a2..c0b6f56 100644 --- a/GSCats.xcodeproj/project.pbxproj +++ b/GSCats.xcodeproj/project.pbxproj @@ -7,7 +7,8 @@ objects = { /* Begin PBXFileReference section */ - 700C39C51F2E5CA800C24F9C /* trigtables.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = trigtables.s; sourceTree = ""; }; + 700C39C51F2E5CA800C24F9C /* tables.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = tables.s; sourceTree = ""; }; + 7059502B1F37A0BE00BBE90F /* GenerateVRAMTable.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GenerateVRAMTable.py; sourceTree = ""; }; 706DF1641F2D39F700AA6680 /* loader.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = loader.s; sourceTree = ""; }; 706DF1651F2D4A8100AA6680 /* terrain.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = terrain.s; sourceTree = ""; }; 7088096C1F2EA4B200D4C950 /* spanRender.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = spanRender.s; sourceTree = ""; }; @@ -29,10 +30,11 @@ 706DF1641F2D39F700AA6680 /* loader.s */, 706DF1651F2D4A8100AA6680 /* terrain.s */, 7088096C1F2EA4B200D4C950 /* spanRender.s */, - 700C39C51F2E5CA800C24F9C /* trigtables.s */, + 700C39C51F2E5CA800C24F9C /* tables.s */, 70E9D8611F2BD95400555C19 /* gscats.s */, 70E9D8631F2BD95400555C19 /* Makefile */, 7088096D1F2ECE8D00D4C950 /* GenerateRenderSpans.py */, + 7059502B1F37A0BE00BBE90F /* GenerateVRAMTable.py */, ); sourceTree = ""; }; diff --git a/GenerateRenderSpans.py b/GenerateRenderSpans.py index 482db4d..f6731bf 100755 --- a/GenerateRenderSpans.py +++ b/GenerateRenderSpans.py @@ -1,8 +1,6 @@ -#!/usr/bin/python - -import sys,os,png -import argparse +#!/usr/bin/env python3 +import sys def main(argv): diff --git a/GenerateVRAMTable.py b/GenerateVRAMTable.py new file mode 100755 index 0000000..2ad086e --- /dev/null +++ b/GenerateVRAMTable.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import sys + + +def main(argv): + + # Prologue + print ("vramRowEnds:",end="") + v = 0x20a0 + rowCount = 19 + + for jump in range(0,200): + rowCount += 1 + if (rowCount==20): + print ("\n\t.word ", end="") + rowCount=0 + + print ("$%x" % v, end="") + if (rowCount<19): + print (",", end="") + v += 160 + + +if __name__ == "__main__": + main(sys.argv[1:]) + diff --git a/gscats.2mg b/gscats.2mg index bbb51f30528efa4924c83954227c488de6c6421b..93a11e42ef657a2c702ed867e2b93e87e2f38135 100644 GIT binary patch delta 2376 zcmeH{>rYfi7{+H&U@vE{+;#!$xS)WFtRT9q3I{I;xFFstQmuoxg=#HmRf^gjbyq=m zrMMOW(VW_7x~5wpG-*w=8L_6K#?U7HLR&LvwKg^Fh8mmH5A+;nQKP1RK+}_x`904& z?@Zoz&g2lBNpNOoRd|#dgvEl0q%01AD?l!ZFkgPy)owmQ5h0WL7IRux#?+wcF!%!%A*JhLakCOMxfOk-i`+OSrWb<`}A2ekX zdcKNK?+t~*(jTo++jn!qqZGyKH*SYb3ReA@M7j!D?J(DFlXuc}%O#LcZ zb-*#a*nU@8Tr@NkZ`>ev%NrWRG<;j~Zc{@8zOElmJR?`0^H)o|>@N3ZHD)+7#p#Mx z@hrvi6VjZ{`exHLB7nZ%!~^7=j9k-2haV?ymyTpCRJ>Z78 zIJHGxtlpsBt3IW^sQy9yM4hO~)l_QSnsb^y&0m_a+CuGC?MZE~_OUiuw^X-Z_qp!A z&ZIBV@6&(j)c>JRF(5;`;d_HVsx- zTdck7=xoV!9nEFPW8fL)3}@tz5>Hr6$sa9!O-Y0ge^*KQYTTn)t|Y@pBt9I;mWsj1 zk)Y122nCT>8B)}%3Mt~@LQ3aRhm^&m38_x6Hl%9Y+K~+{UVSJ?J%*>#hEd{`6Msy+ z?BkX;nNxuLI64lSVG>C~$zZ%No}WM`;1rljQc)V1C`{xh(MfnROeg7R3dj&Lcnh`Q zsW6jdqAV~?n8s(*Y&;##ATy8^J8l2~ delta 1485 zcmajcZEO>D7y$5p+x58DzPIbO1&%V=i<6bPxiMa3xUqFsoL?qEKlBT>d@w=3U>0Lf z?a6eUjkzr8hsG3=5f7;wsY*8Ay17X=i6Q#M%w%>Gi3Xh~FD3>_{okG<5SG~X`Tw5h z`uy*nyDNyz1+jTNZg#S0z=ep-RV+eZB2rI`N~du)zlWd*gGqUcJ*Pz3b$OE8f7BRs zDF>4EO~ZNKxvPO#EDmJMxSfo^xYAuw;;)Rkt zM^T{^PNsz&@;s%MGyZH5DVx&!l`|4)FH(AAZjOSM+`KX?J-NM1O@{_YWAZJkcf#YV zFC&?wPa^b7Nkm%UH;%TMRl8j@;af;WGfR8By7%?;hWj3mJdy7--Y_KM?Z0M`zFAz1 zM-ft&mZZ2E%}BAd_i#Uwc;Nz7oZ&U%a_n+Uyc$gsFD(mWcntY}29J!;%R=tHktzRy zXePjX5MVz2i~j67ozNCK=+iInWL5%qe&UjfFHPdPrC8R1MhS^m&(rcOJ#n3G|CtZf zXu(->yzX<7c_X&EIdY!v3zy42?;%nmhlX&QxTx0>KQtuHul9|S^l9}O{UrEeE>wqT zWX50R;F~oG4{kh|#*gm3i2;9oA~E<5Uo2$N#Vh!MEHamvE6g?KABJGVzM?`2duAJ zbJhhbX=}5^Y-!uP?Urqu{W*IkVgJs~IJz9KI3^r79L>%n&N1g7&XDUx*GI0uUAx^$ z_t$Qx=ULAw&!3)M)o)dQUtQ}x>MeSG{PX-2e=4>RnW6D|oBzC%+?Cy(R`SFGd@83| zv$|)S-f?g9S_kfLS!0*J(J-Ufhn>cVjvE(eWw&0Ol|4W;;01WV2l#;iupZa|Yy<>g z6A%P812w<{z!snur~?}CL{q5-y_iZp2s8o@0b7A4AOvg!nt_LbR(vkQNUL5LMjip$ zfOcRz&;jfKb^^PA-N2*39-tH03p@sN0o}kppaAKnv^4w8FqznO59FM$H~h7w&PSK(}w9vc2Q;wGx-?TWBn}D(eXeDaVZZtpt#yG1 diff --git a/gscats.s b/gscats.s index a2fb2e5..7a9218f 100644 --- a/gscats.s +++ b/gscats.s @@ -82,6 +82,7 @@ kbdScanLeftArrow: cmp #TERRAINWIDTH/4-80 beq kbdScanDone inc + inc sta mapScrollPos bra kbdScanDone @@ -90,6 +91,7 @@ kbdScanRightArrow: lda mapScrollPos beq kbdScanDone dec + dec sta mapScrollPos bra kbdScanDone @@ -111,7 +113,7 @@ quitRequested: .include "graphics.s" .include "terrain.s" -.include "trigTables.s" +.include "tables.s" endMainBank2: diff --git a/trigtables.s b/tables.s similarity index 53% rename from trigtables.s rename to tables.s index 91287f2..bcf27f4 100644 --- a/trigtables.s +++ b/tables.s @@ -31,3 +31,15 @@ sineTable: .byte $39, $3C, $3F, $41, $44, $47, $4A, $4D .byte $4F, $52, $55, $58, $5B, $5E, $61, $64 .byte $67, $6A, $6D, $70, $74, $77, $7A, $7D + +vramRowEnds: + .word $20a0,$2140,$21e0,$2280,$2320,$23c0,$2460,$2500,$25a0,$2640,$26e0,$2780,$2820,$28c0,$2960,$2a00,$2aa0,$2b40,$2be0,$2c80 + .word $2d20,$2dc0,$2e60,$2f00,$2fa0,$3040,$30e0,$3180,$3220,$32c0,$3360,$3400,$34a0,$3540,$35e0,$3680,$3720,$37c0,$3860,$3900 + .word $39a0,$3a40,$3ae0,$3b80,$3c20,$3cc0,$3d60,$3e00,$3ea0,$3f40,$3fe0,$4080,$4120,$41c0,$4260,$4300,$43a0,$4440,$44e0,$4580 + .word $4620,$46c0,$4760,$4800,$48a0,$4940,$49e0,$4a80,$4b20,$4bc0,$4c60,$4d00,$4da0,$4e40,$4ee0,$4f80,$5020,$50c0,$5160,$5200 + .word $52a0,$5340,$53e0,$5480,$5520,$55c0,$5660,$5700,$57a0,$5840,$58e0,$5980,$5a20,$5ac0,$5b60,$5c00,$5ca0,$5d40,$5de0,$5e80 + .word $5f20,$5fc0,$6060,$6100,$61a0,$6240,$62e0,$6380,$6420,$64c0,$6560,$6600,$66a0,$6740,$67e0,$6880,$6920,$69c0,$6a60,$6b00 + .word $6ba0,$6c40,$6ce0,$6d80,$6e20,$6ec0,$6f60,$7000,$70a0,$7140,$71e0,$7280,$7320,$73c0,$7460,$7500,$75a0,$7640,$76e0,$7780 + .word $7820,$78c0,$7960,$7a00,$7aa0,$7b40,$7be0,$7c80,$7d20,$7dc0,$7e60,$7f00,$7fa0,$8040,$80e0,$8180,$8220,$82c0,$8360,$8400 + .word $84a0,$8540,$85e0,$8680,$8720,$87c0,$8860,$8900,$89a0,$8a40,$8ae0,$8b80,$8c20,$8cc0,$8d60,$8e00,$8ea0,$8f40,$8fe0,$9080 + .word $9120,$91c0,$9260,$9300,$93a0,$9440,$94e0,$9580,$9620,$96c0,$9760,$9800,$98a0,$9940,$99e0,$9a80,$9b20,$9bc0,$9c60,$9d00 diff --git a/terrain.s b/terrain.s index a5b2156..a3aa6b1 100644 --- a/terrain.s +++ b/terrain.s @@ -6,7 +6,7 @@ TERRAINWIDTH = 640 ; In pixels -MAXTERRAINHEIGHT = 128 ; In pixels +MAXTERRAINHEIGHT = 100 ; In pixels ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrainColumn @@ -101,16 +101,31 @@ renderTerrainColumnsDone: ; No stack operations permitted here! ; renderTerrain: + lda #199 + sta spanChainIndex sty