123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- ; WALLDRAW.S
- ; THIS FILE CONTAINS THE ROUTINE WHICH PUTS UP THE WALL AT GAME STARTUP.
- ;
- GLBL AWOLDRAW
- GLBL DLIST10,DLIST0
- GLBL ULCORNER,URCORNER,LLCORNER,LRCORNER,LWALL,RWALL,WHORIZ
- GLBL CORNPALW,WALLPALW,SIDEPALW,XRIGHT,XLEFT,TOPWHGH,BOTWHGH
- GLBL BLOCK2
- GLBL LISTTABL,LISTTABH
- RAMDEF
- RSEG CODE3
- AWOLDRAW
- LDA #L(DLIST10) ; TOP WALL IN DLIST10
- STA LISTPTR
- LDA #H(DLIST10)
- STA LISTPTR+1
- LDY #0 ; DISPLAY UPPER RIGHT CORNER
- LDA #ULCORNER
- STA (LISTPTR),Y
- INY
- LDA #CORNPALW
- STA (LISTPTR),Y
- INY
- LDA #BLOCK2
- STA (LISTPTR),Y
- INY
- LDA #XLEFT
- STA (LISTPTR),Y
- INY
- LDA #TOPWHGH ; HIGH BYTE FOR TOP WALL
- STA TEMP3
- JSR DOVERT ; DRAWS THE TOP WALL
- ; REGISTER Y IS ALREADY SET TO POINT TO THE 5TH HEADER, WHICH WILL BE URCORNER.
- LDA #URCORNER
- STA (LISTPTR),Y
- INY
- LDA #CORNPALW
- STA (LISTPTR),Y
- INY
- LDA #BLOCK2
- STA (LISTPTR),Y
- INY
- LDA #XRIGHT-8
- STA (LISTPTR),Y
- INY
- STY LISTSTRT+10 ; EVERYBODY ELSE STARTS HERE
- ; NOW FOR THE SIDE WALLS: FOR EACH DLIST, 9 THROUGH 1, PUT A VERTICAL
- ; WALL STAMP ON THE RIGHT AND THE LEFT.
- LDX #9
- ZWALL01 LDA LISTTABL,X
- STA LISTPTR
- LDA LISTTABH,X
- STA LISTPTR+1 ; SET DLIST POINTER
- LDY #0
- LDA #LWALL
- STA (LISTPTR),Y
- INY
- LDA #SIDEPALW
- STA (LISTPTR),Y
- INY
- LDA #BLOCK2
- STA (LISTPTR),Y
- INY
- LDA #XLEFT
- STA (LISTPTR),Y
- INY
- ; NOW FOR THE RIGHT SIDE:
- LDA #RWALL
- STA (LISTPTR),Y
- INY
- LDA #SIDEPALW
- STA (LISTPTR),Y
- INY
- LDA #BLOCK2
- STA (LISTPTR),Y
- INY
- LDA #XRIGHT-4
- STA (LISTPTR),Y
- INY
- STY LISTSTRT,X
- DEX
- TXA
- BNE ZWALL01
- ; NOW, DO THE LAST ZONE, ZONE 0, WITH THE LLCORNER, LRCORNER, AND THE BOTTOM
- ; WALL.
- LDA #L(DLIST0)
- STA LISTPTR
- LDA #H(DLIST0)
- STA LISTPTR+1
- LDY #0
- LDA #LLCORNER
- STA (LISTPTR),Y
- INY
- LDA #CORNPALW
- STA (LISTPTR),Y
- INY
- LDA #BLOCK2
- STA (LISTPTR),Y
- INY
- LDA #XLEFT
- STA (LISTPTR),Y
- INY
- LDA #BOTWHGH
- STA TEMP3 ; IF BOTTOM WALL, HIGH BYTE IS
- ; "BOTWHGH"
- JSR DOVERT
- ; NOW DO THE LAST CORNER, THE LOWER RIGHT CORNER.
- LDA #LRCORNER
- STA (LISTPTR),Y
- INY
- LDA #CORNPALW
- STA (LISTPTR),Y
- INY
- LDA #BLOCK2
- STA (LISTPTR),Y
- INY
- LDA #XRIGHT-8
- STA (LISTPTR),Y
- INY
- STY LISTSTRT
- RTS ; END OF WALL DRAWING ROUTINE
- ; THIS SUBROUTINE DRAWS THE TOP AND BOTTOM WALLS. IT REQUIRES THAT
- ; REGISTER Y POINT TO THE NEXT HEADER, AND THAT LISTPTR BE SET.
- DOVERT LDX #2
- ZWALL00 LDA #WHORIZ ; LOW BYTE OF STAMP
- STA (LISTPTR),Y
- INY
- LDA #WALLPALW
- STA (LISTPTR),Y
- INY
- LDA TEMP3 ; CONTAINS THE HIGH BYTE VALUE
- STA (LISTPTR),Y
- INY
- ; SKIP HPOS BYTE
- INY
- DEX
- BPL ZWALL00
- ; NOW TOUCH UP THOSE HEADERS (HPOS MUST CHANGE; WIDTH OF LAST MUST CHANGE)
- STY TEMPY ; SAVE DLIST INDEX
- LDA #8 ; HPOS OF FIRST WALL
- LDY #7
- STA (LISTPTR),Y
- LDA #72 ; HPOS-- 8 + 64
- LDY #11
- STA (LISTPTR),Y
- LDA #136 ; HPOS-- 8 + 64 + 64
- LDY #15
- STA (LISTPTR),Y
- LDA #1C ; PALW FOR LAST HEADER (WIDTH = 4)
- LDY #13
- STA (LISTPTR),Y
- LDY TEMPY ; RESTORE DLIST INDEX
- RTS
- END
|