I wrote sengoku battle game in PDP11 (assembler language) a few years back.
Not sure how many people are interested in the source code but I put it below.
;;;game program for PDP-11, battle in the Sengoku period ;;;programed by Duke Software, 2003 CHIN = 172020 SETCOLOR = 172060 DRAWLINE = 172074 FILLRECT = 172104 FILLARCT = 172114 CLRSCREEN = 172130 VRAM = 160000 ENDVRAM = 167636 FIRSTMESVRAM = 163430 INFNAMEVRAM = 165000 CHADATVRAM = 165240 OTHERCHADATVRAM = 165400 SHIFTNAMEVRAM = 2 SHIFTABVRAM = 46 SHIFTSOLVRAM = 56 SHIFTMORVRAM = 64 SHIFTTYPVRAM = 72 MESVRAM = 167500 TURNVRAM = 167524 WINMESVRAM = 167526 TURNNUMBERVRAM = 165110 VRAMLOOP = 240 ;one loop of the VRAM number INFAREAYVRAM = 256. INFTEAM0XVRAM = 0. INFTEAM1XVRAM = 480. TEAM0FACEXADRESS= 320. TEAM1FACEXADRESS= 415. FACEYADRESS = 256. MAXCHARANUMBER = 30. MAXTEAM0NUMBER = 14. MAXMORALE = 120. MAPSIZE = 1280. TWICEMAPSIZE = 2560. MAXXPOS = 79. MAXYPOS = 15. MINXPOS = 0. MINYPOS = 0. MINXPOSADD1 = 1. MINYPOSADD1 = 1. MAXXPOSSUB1 = 78. MAXYPOSSUB1 = 14. KIBA = 2. ;character type YARI = 1. TEPPOU = 3. LIVE = 1. ;character live or dead DEAD = 0. PLAYER = 0. COMPUTER = 1. NOCHECKMPOS = 80. MAXDISTANCE = 135. CHANOTMOVE = 177777 FIRSTMPOS = 177777 ;initilize data MPOS NOCHARACTER = 177777 ;initilize data CPOS NOTATTACKEXECUTE= 177777 COMMOVEND = 0 COMRIGHTMOV = 1 COMLEFTMOV = 2 COMDOWNMOV = 3 COMUPMOV = 4 COMROUTESIZE = 100. ;;;geographical data--------------------------------------------------------------- ;;;from left, ;;;1st digit ---distinction number ;;;2nd digit ---attack effect ;;;3rd digit ---defence effect ;;;4th digit ---comsumption of move ability PL = 0334 ;plain HI = 1345 ;hill LO = 2422 ;load RI = 3117 ;river WO = 4246 ;wood ;;;color data of face graphic------------------------------------------------------ WHI = 0. ;white LGR = 1. ;light gray DGR = 2. ;dark gray BLK = 3. ;black YEL = 4. ;yellow BRO = 5. ;brown RED = 6. ;red LBL = 7. ;light blue DBL = 8. ;dark blue LPI = 9. ;light pink GRE = 10. ;green RBR = 11. ;red brown PBR = 12. ;purple brown DOTEND = 177777 ;graphic end data .= 1000 ;;;-----------------------------------------------------------------------------;;; ;;; DATA ;;; ;;;-----------------------------------------------------------------------------;;; ;;Uesugi Kenshin face graphic data UEFACE: .BYTE LBL,LBL,LBL,BLK,DGR,WHI,WHI,WHI,WHI,WHI,WHI,WHI,WHI,WHI,WHI,WHI .BYTE WHI,WHI,WHI,WHI,DGR,LGR,DGR,LGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR .BYTE LBL,LBL,BLK,DGR,WHI,DGR,WHI,WHI,DGR,BLK,BLK,WHI,DGR,BLK,BLK,WHI .BYTE WHI,WHI,WHI,DGR,LGR,DGR,LGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,BLK .BYTE LBL,BLK,BLK,WHI,DGR,DGR,WHI,DGR,WHI,DGR,BLK,WHI,DGR,BLK,BLK,WHI .BYTE WHI,WHI,DGR,LGR,DGR,LGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,BLK,DGR .BYTE LBL,BLK,WHI,DGR,WHI,DGR,DGR,WHI,DGR,DGR,BLK,WHI,DGR,BLK,DGR,WHI .BYTE WHI,WHI,WHI,DGR,BLK,BLK,LGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,BLK .BYTE BLK,BLK,DGR,WHI,DGR,WHI,DGR,DGR,WHI,DGR,BLK,WHI,WHI,BLK,DGR,WHI .BYTE WHI,WHI,DGR,BLK,BLK,LGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,BLK,DGR .BYTE BLK,DGR,WHI,DGR,WHI,DGR,DGR,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK .BYTE BLK,DGR,LGR,BLK,LGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,BLK,DGR,BLK .BYTE BLK,BLK,DGR,WHI,BLK,BLK,BLK,BLK,BLK,WHI,WHI,WHI,DGR,DGR,DGR,DGR .BYTE BLK,BLK,BLK,BLK,BLK,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,DGR,BLK,BLK .BYTE BLK,WHI,DGR,BLK,BLK,BLK,DGR,BLK,BLK,BLK,BLK,BLK,BLK,WHI,WHI,WHI .BYTE DGR,DGR,DGR,DGR,BLK,BLK,LGR,LGR,LGR,DGR,DGR,DGR,DGR,BLK,DGR,BLK .BYTE BLK,DGR,BLK,BLK,BLK,DGR,BLK,BLK,DGR,DGR,BLK,BLK,BLK,BLK,BLK,BLK .BYTE WHI,WHI,DGR,DGR,DGR,DGR,BLK,BLK,BLK,LGR,LGR,DGR,BLK,DGR,BLK,BLK .BYTE BLK,BLK,BLK,DGR,BLK,BLK,BLK,BLK,BLK,BLK,BLK,WHI,LGR,LGR,LGR,BLK .BYTE BLK,BLK,BLK,DGR,WHI,WHI,BLK,BLK,BLK,BLK,DGR,WHI,WHI,BLK,DGR,BLK .BYTE BLK,DGR,DGR,BLK,BLK,DGR,DGR,DGR,DGR,BLK,BLK,BLK,WHI,DGR,DGR,DGR .BYTE DGR,BLK,BLK,DGR,WHI,DGR,BLK,DGR,BLK,BLK,BLK,DGR,DGR,WHI,WHI,BLK .BYTE BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,DGR .BYTE DGR,DGR,BLK,BLK,BLK,BLK,DGR,BLK,DGR,BLK,BLK,BLK,BLK,DGR,BLK,LGR .BYTE BLK,BLK,BLK,RBR,RBR,RBR,BRO,BRO,BRO,LPI,BRO,LPI,LPI,BRO,LPI,BLK .BYTE BLK,BLK,BLK,BLK,BLK,BLK,BLK,WHI,BLK,BLK,BLK,BLK,WHI,WHI,BLK,BLK .BYTE BLK,RBR,RBR,RBR,BRO,BRO,BRO,LPI,LPI,LPI,WHI,LPI,LPI,BRO,BRO,LPI .BYTE BRO,BLK,RBR,LPI,RBR,RBR,BLK,BLK,BLK,BLK,DGR,BLK,BLK,BLK,WHI,LGR .BYTE BLK,RBR,BRO,LPI,LPI,LPI,LPI,LPI,LPI,WHI,LPI,LPI,BRO,RBR,RBR,BLK .BYTE BLK,BLK,LPI,BRO,LPI,RBR,RBR,WHI,LGR,LGR,BLK,BLK,BLK,BLK,BLK,LGR .BYTE BLK,BLK,RBR,BRO,LPI,LPI,WHI,WHI,BRO,BRO,RBR,RBR,BLK,BLK,BLK,BLK .BYTE BLK,LPI,BRO,LPI,BRO,RBR,RBR,BLK,LGR,LGR,BLK,DGR,BLK,BLK,BLK,BLK .BYTE BLK,BLK,BLK,BLK,BLK,BRO,BRO,BRO,RBR,RBR,BLK,BLK,BLK,BLK,RBR,BRO .BYTE BRO,BRO,BRO,BRO,BRO,BRO,RBR,WHI,LGR,LGR,LGR,RBR,RBR,RBR,BLK,BLK .BYTE LBL,BLK,BRO,BLK,BLK,BLK,BLK,BRO,RBR,BLK,BLK,BLK,BLK,BLK,BLK,BLK .BYTE BLK,LPI,BRO,BRO,BRO,LPI,BRO,BLK,WHI,LGR,BLK,LGR,LGR,DGR,DGR,BLK .BYTE LBL,LBL,BLK,BLK,BLK,BLK,BLK,BLK,BRO,BRO,RBR,RBR,BLK,BLK,BLK,WHI .BYTE BLK,BLK,LPI,BRO,LPI,BRO,LPI,BLK,WHI,LGR,BLK,DGR,LGR,LGR,DGR,DGR .BYTE LBL,LBL,BLK,BLK,BLK,WHI,BLK,LPI,BRO,BRO,BRO,RBR,BRO,LPI,LPI,LPI .BYTE LPI,LPI,BRO,LPI,BRO,LPI,BRO,BLK,WHI,LGR,BLK,DGR,LGR,LGR,DGR,DGR .BYTE LBL,BLK,RBR,LPI,LPI,RBR,BLK,WHI,BRO,BRO,BRO,WHI,RBR,RBR,BRO,LPI .BYTE LPI,LPI,LPI,LPI,LPI,BRO,BRO,BLK,WHI,LGR,LGR,BLK,LGR,LGR,DGR,DGR .BYTE LBL,BLK,BRO,LPI,RBR,RBR,RBR,WHI,BRO,BRO,BRO,LPI,WHI,LPI,WHI,LPI .BYTE LPI,LPI,BRO,LPI,BRO,LPI,BRO,BLK,WHI,LGR,LGR,BLK,DGR,LGR,DGR,DGR .BYTE LBL,BLK,LPI,LPI,LPI,BLK,BRO,WHI,BRO,BRO,BRO,LPI,LPI,WHI,LPI,LPI .BYTE LPI,BRO,LPI,BRO,LPI,BRO,BLK,BLK,WHI,LGR,LGR,DGR,DGR,LGR,DGR,DGR .BYTE BLK,BLK,LPI,LPI,LPI,BLK,WHI,LPI,BRO,BRO,BRO,LPI,LPI,LPI,LPI,LPI .BYTE LPI,LPI,BRO,LPI,BRO,BRO,BLK,BLK,WHI,LGR,LGR,DGR,DGR,LGR,DGR,DGR .BYTE BLK,BLK,BRO,LPI,RBR,RBR,WHI,LPI,LPI,BRO,BRO,BRO,WHI,LPI,LPI,LPI .BYTE LPI,LPI,LPI,BRO,BRO,BLK,BLK,BLK,WHI,LGR,LGR,DGR,DGR,LGR,LGR,DGR .BYTE BLK,BLK,RBR,BRO,BLK,BRO,WHI,LPI,RBR,RBR,BLK,BRO,BRO,WHI,LPI,LPI .BYTE BRO,LPI,BRO,LPI,BLK,BLK,RBR,BLK,WHI,LGR,LGR,DGR,DGR,LGR,BLK,DGR .BYTE BLK,BLK,RBR,BRO,BLK,BRO,WHI,LPI,LPI,BRO,BLK,BRO,LGR,BRO,LPI,BRO .BYTE LPI,BRO,LPI,BLK,BRO,BLK,BLK,BLK,WHI,LGR,LGR,DGR,DGR,LGR,BLK,DGR .BYTE BLK,LGR,BLK,RBR,BLK,BLK,BRO,BLK,BLK,BLK,BRO,BRO,BRO,BRO,BRO,LPI .BYTE BRO,LPI,BRO,BRO,BLK,BRO,RBR,BLK,WHI,LGR,DGR,DGR,DGR,LGR,BLK,DGR .BYTE LBL,BLK,BLK,RBR,BRO,RBR,BLK,BLK,RBR,BLK,BRO,BLK,BLK,BLK,LPI,BRO .BYTE LPI,BRO,LPI,BRO,LPI,BRO,RBR,BLK,LGR,LGR,LGR,DGR,DGR,LGR,BLK,DGR .BYTE LBL,BLK,LGR,BLK,RBR,BLK,BLK,BRO,BLK,LPI,BLK,BRO,BLK,BLK,BLK,LPI .BYTE BRO,LPI,BRO,LPI,BRO,BRO,BLK,WHI,LGR,LGR,DGR,DGR,LGR,BLK,BLK,DGR .BYTE LBL,BLK,LGR,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK .BYTE LPI,BRO,LPI,BRO,LPI,BRO,BLK,WHI,LGR,LGR,DGR,BLK,DGR,BLK,DGR,DGR .BYTE LBL,LBL,BLK,LGR,BLK,BLK,RBR,BLK,LPI,LPI,LPI,LPI,BLK,BLK,BLK,BLK .BYTE BRO,LPI,BRO,LPI,BRO,BRO,BLK,WHI,LGR,DGR,DGR,BLK,DGR,BLK,BLK,BLK .BYTE LBL,LBL,BLK,LGR,BLK,BLK,RBR,RBR,BRO,BRO,BRO,BRO,BRO,BLK,BLK,BLK .BYTE BLK,BRO,LPI,BRO,LPI,RBR,BLK,WHI,LGR,DGR,BLK,LGR,DGR,BLK,BLK,BLK .BYTE LBL,LBL,BLK,LGR,BLK,BLK,BRO,RBR,BLK,BLK,RBR,RBR,BRO,BLK,BLK,BLK .BYTE LPI,LPI,BRO,LPI,BRO,BLK,BLK,WHI,DGR,DGR,BLK,DGR,BLK,LGR,LPI,BLK .BYTE LBL,LBL,LBL,LBL,LGR,BLK,LGR,LGR,RBR,BLK,BLK,RBR,RBR,BRO,LPI,BRO .BYTE LPI,BRO,LPI,BRO,BLK,BLK,WHI,WHI,DGR,BLK,DGR,BLK,LGR,LGR,DGR,DGR .BYTE LBL,LBL,LBL,BLK,LGR,BLK,RBR,BRO,BRO,BLK,BLK,BRO,LPI,LPI,BRO,LPI .BYTE BRO,LPI,BRO,BLK,RBR,BLK,WHI,WHI,DGR,BLK,BLK,DGR,BLK,BLK,BLK,BLK .BYTE LBL,BLK,BLK,BLK,BLK,LGR,BLK,BRO,BLK,BLK,RBR,BLK,BRO,LPI,LPI,BRO .BYTE BLK,BRO,BLK,RBR,BLK,WHI,WHI,WHI,BLK,LGR,LGR,BLK,BLK,BLK,BLK,DGR .BYTE BLK,BLK,BLK,WHI,BLK,BLK,BLK,RBR,BLK,BLK,BLK,LPI,BLK,BRO,BRO,BLK .BYTE LPI,BLK,BLK,BLK,BLK,WHI,WHI,BLK,WHI,LGR,BLK,BLK,WHI,WHI,LGR,DGR .BYTE BLK,LGR,BLK,WHI,WHI,WHI,BLK,BLK,BLK,BLK,BLK,BLK,BRO,BLK,BLK,RBR .BYTE BLK,BLK,BLK,WHI,WHI,WHI,BLK,WHI,DGR,BLK,BLK,WHI,LGR,LGR,LGR,DGR .BYTE WHI,LGR,BLK,LGR,LGR,WHI,LGR,BLK,BLK,RBR,BLK,BLK,BLK,BLK,BLK,BLK .BYTE BLK,WHI,WHI,WHI,BLK,BLK,WHI,DGR,WHI,WHI,WHI,LGR,LGR,DGR,DGR,DGR .BYTE WHI,WHI,DGR,BLK,LGR,WHI,LGR,LGR,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK .BYTE BLK,WHI,WHI,BLK,WHI,WHI,LGR,WHI,WHI,DGR,DGR,DGR,DGR,DGR,BLK,BLK .BYTE WHI,WHI,WHI,BLK,LGR,WHI,WHI,LGR,DGR,DGR,BLK,DGR,BLK,BLK,BLK,BLK .BYTE WHI,WHI,BLK,WHI,WHI,LGR,LGR,LGR,LGR,DGR,BLK,BLK,BLK,BLK,BLK,BLK .BYTE BLK,WHI,WHI,WHI,BLK,DGR,WHI,WHI,BLK,LGR,DGR,BLK,BLK,BLK,WHI,WHI .BYTE BLK,BLK,WHI,WHI,WHI,LGR,LGR,BLK,BLK,BLK,BLK,BLK,BLK,WHI,BLK,BLK .BYTE BLK,WHI,LGR,LGR,WHI,BLK,DGR,WHI,WHI,DGR,BLK,BLK,BLK,LGR,BLK,BLK .BYTE WHI,WHI,WHI,WHI,LGR,LGR,BLK,BLK,BLK,BLK,BLK,BLK,WHI,LGR,BLK,GRE .BYTE WHI,BLK,BLK,LGR,LGR,WHI,BLK,DGR,DGR,DGR,BLK,BLK,WHI,BLK,BLK,WHI .BYTE WHI,WHI,DGR,DGR,BLK,BLK,BLK,GRE,BLK,BLK,BLK,BLK,LGR,BLK,BLK,GRE .BYTE LGR,WHI,WHI,BLK,LGR,LGR,WHI,DGR,BLK,BLK,BLK,WHI,WHI,WHI,WHI,WHI .BYTE WHI,DGR,BLK,BLK,GRE,GRE,BLK,GRE,BLK,BLK,BLK,BLK,BLK,BLK,BLK,GRE .BYTE BLK,DGR,WHI,WHI,BLK,BLK,DGR,BLK,BLK,BLK,WHI,BLK,WHI,BLK,WHI,WHI .BYTE DGR,BLK,BLK,GRE,GRE,BLK,GRE,BLK,BLK,BLK,BLK,BLK,BLK,BLK,GRE,GRE .BYTE WHI,BLK,DGR,WHI,WHI,WHI,BLK,DGR,DGR,WHI,WHI,DGR,WHI,DGR,DGR,BLK .BYTE BLK,BLK,BLK,GRE,GRE,BLK,GRE,BLK,BLK,BLK,BLK,BLK,BLK,BLK,GRE,GRE .BYTE DOTEND .EVEN ;;;Takeda shingen face graphic TAFACE: .BYTE LBL,LBL,LBL,LBL,LBL,LBL,LBL,LBL,DGR,LGR,BLK,BLK,LGR,BLK,DGR,BLK .BYTE DGR,BLK,DGR,BLK,DGR,BLK,LBL,LBL,LBL,LBL,LBL,LBL,LBL,LBL,LBL,LBL .BYTE LBL,LBL,LBL,LBL,LBL,LBL,LBL,WHI,BLK,BLK,BLK,LGR,BLK,LGR,BLK,LGR .BYTE WHI,LGR,BLK,LGR,BLK,BLK,LGR,DGR,LBL,LBL,LBL,LBL,LBL,LBL,LBL,LBL .BYTE LBL,LBL,LBL,LBL,LBL,DGR,WHI,DGR,BLK,LGR,BLK,LGR,DGR,LGR,BLK,LGR .BYTE BLK,WHI,DGR,LGR,WHI,LGR,BLK,LGR,BLK,WHI,LBL,LBL,LBL,LBL,LBL,LBL .BYTE LBL,LBL,LBL,LBL,LGR,WHI,DGR,WHI,DGR,LGR,BLK,BLK,LGR,DGR,LGR,BLK .BYTE BLK,WHI,LGR,WHI,LGR,DGR,LGR,DGR,LGR,LGR,BLK,LBL,LBL,LBL,LBL,LBL .BYTE LBL,LBL,LBL,LGR,LGR,LGR,WHI,DGR,LGR,DGR,LGR,LGR,BLK,DGR,DGR,DGR .BYTE BLK,LGR,WHI,LGR,DGR,LGR,WHI,LGR,WHI,LGR,LGR,BLK,LBL,LBL,LBL,LBL .BYTE LBL,LBL,LBL,WHI,DGR,WHI,DGR,LGR,DGR,LGR,LGR,BLK,LGR,DGR,DGR,RBR .BYTE RBR,BLK,LGR,DGR,LGR,WHI,LGR,WHI,LGR,WHI,BLK,RBR,BLK,LBL,LBL,LBL .BYTE LBL,LBL,WHI,DGR,WHI,BLK,LGR,BLK,DGR,DGR,LGR,DGR,DGR,DGR,RBR,BLK .BYTE YEL,BLK,DGR,LGR,DGR,LGR,WHI,LGR,WHI,LGR,LGR,BLK,RBR,LBL,LBL,LBL .BYTE LBL,WHI,DGR,WHI,LGR,LGR,LGR,DGR,LGR,LGR,DGR,DGR,LGR,BLK,RBR,YEL .BYTE BLK,DGR,BLK,DGR,LGR,WHI,BLK,DGR,LGR,BLK,BLK,YEL,BLK,RBR,BLK,LBL .BYTE LGR,DGR,BLK,DGR,DGR,LGR,DGR,LGR,DGR,WHI,LGR,DGR,LGR,BLK,RBR,YEL .BYTE WHI,BLK,DGR,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,YEL,BRO,BLK,LBL .BYTE DGR,DGR,WHI,DGR,BLK,DGR,LGR,DGR,BLK,LGR,WHI,LGR,DGR,LGR,BLK,BRO .BYTE YEL,YEL,BLK,RBR,YEL,YEL,YEL,YEL,RBR,BRO,RBR,BLK,BRO,BRO,BLK,LGR .BYTE BLK,LGR,BLK,LGR,DGR,DGR,WHI,LGR,WHI,BLK,LGR,LGR,LGR,DGR,BRO,BRO .BYTE BLK,YEL,WHI,YEL,BLK,YEL,BLK,YEL,YEL,BLK,YEL,RBR,BRO,BLK,BLK,DGR .BYTE LGR,BLK,BLK,BLK,BLK,DGR,DGR,DGR,LGR,WHI,BLK,WHI,LGR,WHI,DGR,BLK .BYTE BLK,BLK,BRO,BLK,BLK,BLK,BRO,PBR,BLK,BLK,BLK,BLK,BLK,BLK,WHI,BLK .BYTE BLK,YEL,BRO,YEL,BLK,BLK,BLK,DGR,DGR,LGR,LGR,BLK,WHI,LGR,WHI,BLK .BYTE BLK,BRO,BLK,YEL,YEL,YEL,BLK,BLK,BLK,YEL,BRO,BRO,BLK,BLK,DGR,DGR .BYTE BRO,BLK,BLK,BLK,BRO,BRO,BLK,BLK,BRO,BRO,DGR,DGR,DGR,WHI,LGR,WHI .BYTE DGR,LGR,BLK,WHI,YEL,BLK,BLK,BLK,YEL,YEL,PBR,BLK,BLK,BRO,BLK,WHI .BYTE BLK,BLK,BRO,WHI,BLK,BLK,BRO,BLK,BLK,DGR,LGR,WHI,WHI,LGR,DGR,DGR .BYTE BLK,BLK,BRO,BRO,BLK,YEL,YEL,WHI,YEL,BRO,BLK,PBR,BLK,DGR,PBR,DGR .BYTE BLK,BRO,YEL,BRO,YEL,BRO,BLK,BRO,BRO,BLK,BLK,WHI,LGR,WHI,PBR,RBR .BYTE BLK,BLK,BLK,BLK,YEL,BLK,BLK,YEL,YEL,BLK,YEL,BLK,BLK,BLK,LGR,PBR .BYTE RBR,YEL,WHI,YEL,BRO,YEL,BRO,BLK,BLK,BRO,BLK,BLK,WHI,RBR,RBR,RBR .BYTE WHI,BLK,BLK,BLK,BRO,BLK,BLK,BLK,BLK,BLK,BRO,BLK,BLK,BLK,BLK,BLK .BYTE BLK,BRO,YEL,BRO,YEL,BRO,YEL,WHI,BLK,YEL,BRO,BLK,RBR,RBR,WHI,WHI .BYTE BLK,WHI,BLK,BLK,WHI,BLK,BLK,WHI,BLK,WHI,BLK,WHI,BLK,BLK,BLK,BLK .BYTE RBR,YEL,PBR,YEL,WHI,YEL,WHI,YEL,YEL,BLK,YEL,BLK,RBR,WHI,WHI,BLK .BYTE BLK,RBR,RBR,RBR,RBR,RBR,RBR,RBR,RBR,RBR,RBR,RBR,RBR,BRO,BLK,BLK .BYTE BLK,RBR,YEL,BRO,YEL,BRO,YEL,YEL,BRO,BRO,BLK,BLK,WHI,BLK,BLK,RBR .BYTE RBR,RBR,BRO,BLK,BLK,BRO,RBR,RBR,BLK,BRO,RBR,BRO,BLK,RBR,BLK,BLK .BYTE RBR,BLK,RBR,RBR,YEL,BRO,BRO,BRO,YEL,RBR,YEL,BLK,BLK,BLK,BRO,RBR .BYTE RBR,BRO,BRO,BLK,BLK,BLK,BLK,BLK,BLK,RBR,BRO,BRO,BLK,BLK,BLK,WHI .BYTE BLK,RBR,BLK,YEL,RBR,YEL,YEL,RBR,BRO,YEL,BLK,BLK,BLK,RBR,RBR,BRO .BYTE BRO,BLK,RBR,RBR,BLK,BLK,BLK,BLK,BLK,BRO,BRO,BLK,BLK,BLK,DGR,PBR .BYTE BLK,BLK,YEL,BLK,YEL,BRO,RBR,YEL,RBR,RBR,BLK,BLK,BLK,BLK,BRO,BRO .BYTE BRO,BRO,BLK,BLK,WHI,BLK,BLK,BRO,BRO,LPI,BRO,BLK,BLK,BLK,LGR,PBR .BYTE BLK,RBR,BLK,BRO,BLK,YEL,BRO,BRO,BLK,RBR,BLK,BLK,BLK,RBR,BRO,LPI .BYTE LPI,LPI,BRO,BRO,RBR,BRO,RBR,BLK,LPI,LPI,WHI,BRO,BLK,BLK,DGR,LGR .BYTE BLK,BLK,BLK,RBR,BRO,BLK,YEL,BLK,BLK,BLK,BLK,RBR,BRO,BRO,LPI,LPI .BYTE WHI,LPI,BRO,BRO,RBR,LPI,LPI,LPI,LPI,LPI,LPI,LPI,BLK,RBR,BLK,PBR .BYTE DGR,BLK,BLK,BLK,RBR,BRO,BLK,YEL,BLK,RBR,BLK,BLK,RBR,BRO,LPI,BRO .BYTE LPI,LPI,LPI,LPI,BRO,LPI,LPI,LPI,LPI,LPI,LPI,WHI,RBR,BLK,BLK,LGR .BYTE BLK,DGR,BLK,BLK,BLK,RBR,BRO,RBR,BLK,BLK,RBR,BLK,RBR,RBR,LPI,BRO .BYTE LPI,BRO,WHI,LPI,WHI,LPI,LPI,LPI,LPI,LPI,LPI,LPI,WHI,BLK,BLK,LGR .BYTE LGR,BLK,DGR,BLK,BLK,BLK,RBR,BLK,RBR,BLK,BLK,BLK,RBR,LPI,BRO,LPI .BYTE LPI,WHI,WHI,WHI,LPI,LPI,LPI,LPI,LPI,LPI,LPI,LPI,LPI,BLK,BLK,WHI .BYTE WHI,DGR,LGR,DGR,BLK,BLK,BLK,RBR,BLK,RBR,BLK,BLK,RBR,BRO,LPI,LPI .BYTE LPI,LPI,WHI,LPI,WHI,LPI,LPI,LPI,LPI,LPI,RBR,LPI,LPI,BRO,BLK,PBR .BYTE WHI,LGR,LGR,LGR,DGR,LGR,BLK,WHI,BLK,RED,BLK,RED,RBR,LPI,BRO,LPI .BYTE LPI,WHI,LPI,WHI,LPI,LPI,LPI,LPI,LPI,BLK,LPI,LPI,LPI,LPI,BLK,DGR .BYTE LGR,DGR,LGR,DGR,WHI,DGR,BLK,BLK,BLK,WHI,RBR,BLK,BLK,LPI,LPI,LPI .BYTE WHI,LPI,LPI,LPI,LPI,LPI,LPI,LPI,RBR,RBR,BLK,BLK,LPI,BLK,LGR,PBR .BYTE LGR,WHI,LGR,WHI,WHI,DGR,BLK,LGR,WHI,BLK,RED,PBR,PBR,BLK,BRO,LPI .BYTE LPI,LPI,LPI,LPI,LPI,LPI,LPI,RBR,RBR,BLK,RBR,BLK,BLK,DGR,DGR,DGR .BYTE WHI,WHI,LGR,WHI,DGR,WHI,BLK,BLK,RED,BRO,RED,BLK,RED,BLK,BRO,LPI .BYTE LPI,LPI,LPI,LPI,BLK,LPI,LPI,BLK,BLK,BLK,BLK,BLK,BLK,PBR,DGR,LGR .BYTE LGR,WHI,LGR,WHI,DGR,LGR,BLK,WHI,BRO,BLK,RED,RBR,RED,BLK,BRO,BRO .BYTE LPI,BRO,LPI,BLK,BLK,BLK,BLK,BLK,PBR,BLK,BLK,PBR,BLK,DGR,BLK,WHI .BYTE LGR,WHI,LGR,DGR,LGR,LGR,LGR,WHI,BLK,DGR,BLK,RED,RED,RBR,BLK,BLK .BYTE BRO,BRO,BRO,BRO,BLK,BLK,BLK,PBR,BLK,BLK,LPI,BLK,BLK,BLK,DGR,LGR .BYTE LGR,WHI,LGR,DGR,LGR,LGR,BLK,LGR,BLK,DGR,BRO,BLK,BLK,RED,PBR,RED .BYTE BLK,BLK,BLK,BRO,BRO,BLK,BLK,BLK,BLK,LPI,BRO,BLK,LGR,LGR,LGR,WHI .BYTE DGR,LGR,LGR,WHI,BLK,LGR,BLK,LGR,BRO,BLK,DGR,BLK,RBR,BLK,BLK,BLK .BYTE RED,RED,RBR,RED,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,LGR,WHI,DGR .BYTE LGR,BLK,WHI,LGR,DGR,LGR,DGR,BLK,BRO,BLK,BLK,BLK,BRO,BLK,BRO,BRO .BYTE BLK,BLK,BLK,BLK,RBR,RED,RBR,RED,RBR,RED,BLK,RED,BLK,LGR,WHI,LGR .BYTE LGR,LGR,WHI,LGR,DGR,LGR,BLK,BLK,BLK,WHI,BLK,BLK,RBR,BLK,BLK,BRO .BYTE BRO,BRO,BRO,BLK,BLK,BLK,BLK,BLK,BLK,RED,BLK,BLK,LGR,WHI,LGR,LGR .BYTE BLK,WHI,WHI,LGR,DGR,LGR,LGR,WHI,BLK,BLK,LBL,BRO,BLK,RBR,BLK,RBR .BYTE BLK,RBR,RBR,BRO,BRO,BRO,BRO,BRO,BLK,BLK,BLK,LGR,LGR,WHI,LGR,WHI .BYTE LGR,WHI,WHI,LGR,WHI,LGR,DGR,DGR,WHI,BLK,BLK,LBL,BRO,BLK,RBR,BLK .BYTE BLK,BLK,RBR,RBR,RBR,RBR,BRO,RBR,BRO,RBR,BLK,BLK,BLK,WHI,LGR,WHI .BYTE LGR,WHI,LGR,LGR,BLK,DGR,LGR,DGR,WHI,BLK,BLK,BLK,DBL,BRO,BLK,RBR .BYTE BLK,RBR,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,LGR,LGR,LGR,WHI,WHI .BYTE LGR,WHI,LGR,DGR,LGR,DGR,LGR,DGR,LGR,WHI,GRE,BLK,LBL,BLK,BLK,BLK .BYTE RBR,BLK,RBR,RBR,RBR,BLK,GRE,GRE,BLK,DGR,LGR,DGR,DGR,LGR,LGR,WHI .BYTE WHI,DGR,LGR,DGR,LGR,DGR,LGR,DGR,LGR,WHI,GRE,GRE,BLK,LBL,DBL,BLK .BYTE LBL,BRO,BLK,RBR,BLK,BLK,BLK,BLK,GRE,BLK,DGR,LGR,DGR,BLK,LGR,LGR .BYTE WHI,LGR,DGR,WHI,LGR,BLK,DGR,BLK,BLK,WHI,BLK,GRE,GRE,BLK,WHI,DBL .BYTE BLK,GRE,BLK,BLK,BLK,LBL,BLK,GRE,BLK,BLK,BLK,GRE,BLK,LGR,BLK,RBR .BYTE WHI,LGR,DGR,WHI,LGR,LGR,DGR,WHI,WHI,BLK,DGR,BLK,GRE,GRE,BLK,WHI .BYTE DBL,BLK,BRO,RBR,BLK,LBL,BLK,BLK,GRE,BLK,BLK,BLK,BLK,RBR,BLK,RBR .BYTE WHI,DGR,WHI,WHI,LGR,LGR,DGR,DGR,BLK,WHI,BLK,GRE,BLK,GRE,BLK,DGR .BYTE WHI,DBL,BLK,BLK,WHI,LBL,BLK,GRE,GRE,BLK,BLK,BLK,RBR,BLK,RBR,BLK .BYTE WHI,DGR,DGR,WHI,WHI,BLK,DGR,WHI,WHI,DGR,BLK,BLK,BLK,BLK,BLK,BLK .BYTE BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,BLK,RBR,BLK,RBR,RBR,BLK .BYTE DOTEND .EVEN ;;;--------infomation name of character paramater---------------------------------- INFNAM: .ASCII / UESUGI GUNDAN / .ASCII /AT/ .ASCII /DE/ .ASCII /SOL/ .ASCII /MOR/ .ASCII /TYP/ .ASCII / TURN / .ASCII / TAKEDA GUNDAN / .ASCII /AT/ .ASCII /DE/ .ASCII /SOL/ .ASCII /MOR/ .ASCIZ /TYP/ .EVEN TEAM0NAM: .ASCIZ /UESUGI GUN/ TEAM1NAM: .ASCIZ /TAKEDA GUN/ ;;;--------character data---------------------------------------------------------- ;;;character's character ;;;example:"A, B, C,....etc." CHACHAR:.WORD 101, 102, 103, 104, 105, 106, 107, 110 .WORD 141, 142, 143, 144, 145, 146, 147, 150 ;;;character team CHATEAM:.WORD 0., 0., 0., 0., 0., 0., 0., 0. .WORD 1., 1., 1., 1., 1., 1., 1., 1. ;;;character live or dead flag CHALIFE:.WORD LIVE, LIVE, LIVE, LIVE, LIVE, LIVE, LIVE, LIVE .WORD LIVE, LIVE, LIVE, LIVE, LIVE, LIVE, LIVE, LIVE ;;;character name CHANAME:.ASCIZ /Uesugi Kenshin / .EVEN .ASCIZ /Kakizaki Kageie / .EVEN .ASCIZ /Amakasu Kagemochi/ .EVEN .ASCIZ /Irobe Katsunaga/ .EVEN .ASCIZ /Saito Tomonobu / .EVEN .ASCIZ /Naoe Kagetsuna/ .EVEN .ASCIZ /Honjo Shigenaga/ .EVEN .ASCIZ /Kitajo Kagehiro / .EVEN .ASCIZ /Takeda Shingen / .EVEN .ASCIZ /Yamagata Masakage / .EVEN .ASCIZ /Baba Nobufusa / .EVEN .ASCIZ /Kosaka Masanobu / .EVEN .ASCIZ /Naito Masatoyo / .EVEN .ASCIZ /Takeda Nobushige/ .EVEN .ASCIZ /Anayama Nobukimi / .EVEN .ASCIZ /Obu Toramasa / .EVEN ;;;character attack ability CHAATAB:.WORD 16., 15., 12., 13., 10., 9., 13., 12. .WORD 14., 13., 12., 10., 11., 10., 6., 12. ;;;character defense ability CHADEAB:.WORD 15., 8., 9., 7., 11., 8., 9., 6. .WORD 16., 11., 14., 12., 11., 13., 8., 9. ;;;character x position CHAXPOS:.WORD 20., 20., 20., 20., 20., 20., 20., 20. .WORD 40., 40., 40., 40., 40., 40., 40., 40. ;;;character y position CHAYPOS:.WORD 3., 4., 5., 6., 7., 8., 9., 10. .WORD 3., 4., 5., 6., 7., 8., 9., 10. ;;;character morale CHAMORA:.WORD 100., 100., 100., 100., 100., 100., 100., 100. .WORD 100., 100., 100., 100., 100., 100., 100., 100. ;;;character soldier number CHASOL: .WORD 999., 500., 500., 800., 500., 400., 800., 500. .WORD 999., 500., 500., 800., 500., 400., 800., 500. ;;;character move ability CHAMOAB:.WORD 20., 16., 16., 12., 10., 16., 16., 12. .WORD 16., 16., 16., 16., 12., 12., 10., 16. ;;;character unit type CHATYPE:.WORD KIBA, KIBA, KIBA, YARI, TEPPOU, KIBA, KIBA, YARI .WORD KIBA, KIBA, KIBA, KIBA, YARI, YARI, TEPPOU, KIBA ;;;enemy character which can be attacked CHAATBL:.WORD 0., 0., 0., 0., 0., 0., 0., 0. .WORD 0., 0., 0., 0., 0., 0., 0., 0. ;;;control data ( computer or player ) CHAMANI:.WORD COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER .WORD COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER, COMPUTER ;;;----------character initilize data---------------------------------------------- FISOL: .WORD 999., 800., 700., 800., 700., 900., 800., 700. .WORD 999., 800., 900., 900., 700., 800., 800., 800. FIMORA: .WORD 100., 100., 100., 100., 100., 100., 100., 100. .WORD 100., 100., 100., 100., 100., 100., 100., 100. FIXPOS: .WORD 30., 40., 40., 40., 40., 41., 39., 42. .WORD 76., 75., 3., 4., 75., 75., 75., 75. ;;;character y position FIYPOS: .WORD 3., 4., 5., 6., 7., 8., 9., 10. .WORD 7., 6., 1., 2., 8., 7., 5., 9. ;;;--------map data---------------------------------------------------------------- GEOMAP: .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0000]--GEOMAP[0009], (00,00)--(09,00) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,LO;GEOMAP[0010]--GEOMAP[0019], (10,00)--(19,00) .WORD PL,PL,PL,PL,PL,RI,PL,PL,PL,PL;GEOMAP[0020]--GEOMAP[0029], (20,00)--(29,00) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0030]--GEOMAP[0039], (30,00)--(39,00) .WORD PL,PL,WO,WO,WO,WO,WO,PL,PL,PL;GEOMAP[0040]--GEOMAP[0049], (40,00)--(49,00) .WORD LO,PL,PL,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0050]--GEOMAP[0059], (50,00)--(59,00) .WORD HI,HI,HI,HI,HI,LO,HI,HI,HI,PL;GEOMAP[0060]--GEOMAP[0069], (60,00)--(69,00) .WORD PL,PL,RI,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0070]--GEOMAP[0079], (70,00)--(79,00) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,PL;GEOMAP[0080]--GEOMAP[0089], (00,01)--(09,01) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,LO;GEOMAP[0090]--GEOMAP[0099], (10,01)--(19,01) .WORD PL,PL,PL,PL,PL,RI,PL,PL,PL,PL;GEOMAP[0100]--GEOMAP[0109], (20,01)--(29,01) .WORD PL,PL,PL,WO,PL,PL,PL,PL,PL,PL;GEOMAP[0110]--GEOMAP[0119], (30,01)--(39,01) .WORD PL,PL,PL,WO,PL,PL,PL,PL,PL,PL;GEOMAP[0120]--GEOMAP[0129], (40,01)--(49,01) .WORD LO,LO,PL,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0130]--GEOMAP[0139], (50,01)--(59,01) .WORD HI,HI,HI,HI,LO,LO,HI,PL,PL,PL;GEOMAP[0140]--GEOMAP[0149], (60,01)--(69,01) .WORD PL,RI,RI,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0150]--GEOMAP[0159], (70,01)--(79,01) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,PL;GEOMAP[0160]--GEOMAP[0169], (00,02)--(09,02) .WORD PL,PL,PL,PL,PL,PL,PL,PL,LO,LO;GEOMAP[0170]--GEOMAP[0179], (10,02)--(19,02) .WORD PL,PL,PL,PL,PL,RI,RI,PL,PL,PL;GEOMAP[0180]--GEOMAP[0189], (20,02)--(29,02) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0190]--GEOMAP[0199], (30,02)--(39,02) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0200]--GEOMAP[0209], (40,02)--(49,02) .WORD PL,LO,PL,PL,HI,HI,HI,HI,HI,HI;GEOMAP[0210]--GEOMAP[0219], (50,02)--(59,02) .WORD HI,LO,LO,LO,LO,HI,HI,PL,PL,PL;GEOMAP[0220]--GEOMAP[0229], (60,02)--(69,02) .WORD PL,RI,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0230]--GEOMAP[0239], (70,02)--(79,02) .WORD HI,HI,HI,HI,PL,PL,PL,PL,PL,PL;GEOMAP[0240]--GEOMAP[0249], (00,03)--(09,03) .WORD PL,PL,PL,PL,PL,PL,PL,PL,LO,PL;GEOMAP[0250]--GEOMAP[0259], (10,03)--(19,03) .WORD PL,PL,PL,PL,PL,PL,RI,RI,PL,PL;GEOMAP[0260]--GEOMAP[0269], (20,03)--(29,03) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0270]--GEOMAP[0279], (30,03)--(39,03) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0280]--GEOMAP[0289], (40,03)--(49,03) .WORD PL,LO,LO,PL,PL,PL,PL,HI,HI,HI;GEOMAP[0290]--GEOMAP[0299], (50,03)--(59,03) .WORD HI,LO,HI,HI,HI,HI,PL,PL,PL,PL;GEOMAP[0300]--GEOMAP[0309], (60,03)--(69,03) .WORD RI,RI,PL,PL,HI,HI,HI,HI,HI,HI;GEOMAP[0310]--GEOMAP[0319], (70,03)--(79,03) .WORD HI,HI,HI,PL,PL,PL,PL,PL,WO,WO;GEOMAP[0320]--GEOMAP[0329], (00,04)--(09,04) .WORD PL,PL,PL,PL,PL,PL,PL,PL,LO,PL;GEOMAP[0330]--GEOMAP[0339], (10,04)--(19,04) .WORD PL,PL,PL,PL,PL,PL,PL,RI,RI,PL;GEOMAP[0340]--GEOMAP[0349], (20,04)--(29,04) .WORD PL,PL,PL,PL,PL,PL,PL,WO,PL,PL;GEOMAP[0350]--GEOMAP[0359], (30,04)--(39,04) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0360]--GEOMAP[0369], (40,04)--(49,04) .WORD PL,PL,LO,PL,PL,PL,PL,PL,HI,HI;GEOMAP[0370]--GEOMAP[0379], (50,04)--(59,04) .WORD HI,LO,HI,PL,PL,PL,PL,PL,PL,RI;GEOMAP[0380]--GEOMAP[0389], (60,04)--(69,04) .WORD RI,PL,PL,PL,HI,HI,HI,HI,HI,HI;GEOMAP[0390]--GEOMAP[0399], (70,04)--(79,04) .WORD HI,PL,PL,PL,PL,PL,PL,PL,WO,WO;GEOMAP[0400]--GEOMAP[0409], (00,05)--(09,05) .WORD PL,PL,PL,PL,PL,PL,PL,LO,LO,PL;GEOMAP[0410]--GEOMAP[0419], (10,05)--(19,05) .WORD PL,PL,PL,HI,PL,PL,PL,PL,RI,RI;GEOMAP[0420]--GEOMAP[0429], (20,05)--(29,05) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0430]--GEOMAP[0439], (30,05)--(39,05) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0440]--GEOMAP[0449], (40,05)--(49,05) .WORD PL,PL,LO,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0450]--GEOMAP[0459], (50,05)--(59,05) .WORD PL,LO,PL,PL,RI,PL,PL,PL,RI,RI;GEOMAP[0460]--GEOMAP[0469], (60,05)--(69,05) .WORD PL,PL,PL,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0470]--GEOMAP[0479], (70,05)--(79,05) .WORD PL,PL,PL,PL,PL,PL,PL,PL,WO,WO;GEOMAP[0480]--GEOMAP[0489], (00,06)--(09,06) .WORD WO,PL,PL,PL,PL,PL,PL,LO,PL,PL;GEOMAP[0490]--GEOMAP[0499], (10,06)--(19,06) .WORD PL,PL,HI,HI,HI,PL,PL,PL,PL,RI;GEOMAP[0500]--GEOMAP[0509], (20,06)--(29,06) .WORD RI,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0510]--GEOMAP[0519], (30,06)--(39,06) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0520]--GEOMAP[0529], (40,06)--(49,06) .WORD PL,PL,LO,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0530]--GEOMAP[0539], (50,06)--(59,06) .WORD LO,LO,PL,RI,RI,RI,PL,RI,RI,PL;GEOMAP[0540]--GEOMAP[0549], (60,06)--(69,06) .WORD PL,PL,PL,PL,HI,HI,HI,HI,HI,HI;GEOMAP[0550]--GEOMAP[0559], (70,06)--(79,06) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0560]--GEOMAP[0569], (00,07)--(09,07) .WORD PL,PL,PL,PL,PL,PL,PL,LO,PL,PL;GEOMAP[0570]--GEOMAP[0579], (10,07)--(19,07) .WORD PL,PL,PL,HI,PL,PL,PL,PL,PL,PL;GEOMAP[0580]--GEOMAP[0589], (20,07)--(29,07) .WORD RI,RI,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0590]--GEOMAP[0599], (30,07)--(39,07) .WORD PL,LO,LO,LO,LO,LO,LO,LO,LO,LO;GEOMAP[0600]--GEOMAP[0609], (40,07)--(49,07) .WORD LO,LO,LO,PL,PL,PL,PL,LO,LO,LO;GEOMAP[0610]--GEOMAP[0619], (50,07)--(59,07) .WORD LO,PL,RI,RI,PL,RI,RI,RI,PL,PL;GEOMAP[0620]--GEOMAP[0629], (60,07)--(69,07) .WORD PL,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0630]--GEOMAP[0639], (70,07)--(79,07) .WORD PL,PL,PL,PL,PL,WO,WO,WO,WO,WO;GEOMAP[0640]--GEOMAP[0649], (00,08)--(09,08) .WORD WO,PL,PL,PL,PL,PL,LO,LO,LO,PL;GEOMAP[0650]--GEOMAP[0659], (10,08)--(19,08) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0660]--GEOMAP[0669], (20,08)--(29,08) .WORD PL,RI,RI,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0670]--GEOMAP[0679], (30,08)--(39,08) .WORD PL,LO,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0680]--GEOMAP[0689], (40,08)--(49,08) .WORD PL,PL,LO,LO,LO,LO,LO,LO,PL,PL;GEOMAP[0690]--GEOMAP[0699], (50,08)--(59,08) .WORD PL,PL,RI,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0700]--GEOMAP[0709], (60,08)--(69,08) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0710]--GEOMAP[0719], (70,08)--(79,08) .WORD PL,PL,PL,PL,PL,WO,WO,WO,WO,WO;GEOMAP[0720]--GEOMAP[0729], (00,09)--(09,09) .WORD WO,PL,PL,PL,PL,PL,LO,PL,LO,PL;GEOMAP[0730]--GEOMAP[0739], (10,09)--(19,09) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0740]--GEOMAP[0749], (20,09)--(29,09) .WORD PL,PL,RI,RI,PL,PL,PL,PL,PL,PL;GEOMAP[0750]--GEOMAP[0759], (30,09)--(39,09) .WORD PL,LO,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0760]--GEOMAP[0769], (40,09)--(49,09) .WORD PL,PL,LO,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0770]--GEOMAP[0779], (50,09)--(59,09) .WORD PL,PL,RI,PL,PL,PL,PL,PL,PL,HI;GEOMAP[0780]--GEOMAP[0789], (60,09)--(69,09) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0790]--GEOMAP[0799], (70,09)--(79,09) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0800]--GEOMAP[0809], (00,10)--(09,10) .WORD PL,PL,PL,PL,PL,PL,LO,PL,LO,LO;GEOMAP[0810]--GEOMAP[0819], (10,10)--(19,10) .WORD LO,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0820]--GEOMAP[0829], (20,10)--(29,10) .WORD PL,PL,PL,RI,RI,PL,PL,PL,PL,PL;GEOMAP[0830]--GEOMAP[0839], (30,10)--(39,10) .WORD PL,LO,PL,PL,WO,WO,PL,PL,PL,PL;GEOMAP[0840]--GEOMAP[0849], (40,10)--(49,10) .WORD PL,PL,LO,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0850]--GEOMAP[0859], (50,10)--(59,10) .WORD PL,RI,RI,PL,PL,PL,PL,PL,HI,HI;GEOMAP[0860]--GEOMAP[0869], (60,10)--(69,10) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0870]--GEOMAP[0879], (70,10)--(79,10) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0880]--GEOMAP[0889], (00,11)--(09,11) .WORD PL,PL,PL,PL,PL,LO,LO,PL,PL,PL;GEOMAP[0890]--GEOMAP[0899], (10,11)--(19,11) .WORD LO,LO,LO,LO,LO,LO,LO,LO,LO,LO;GEOMAP[0900]--GEOMAP[0909], (20,11)--(29,11) .WORD LO,LO,LO,LO,LO,LO,LO,LO,LO,LO;GEOMAP[0910]--GEOMAP[0919], (30,11)--(39,11) .WORD LO,LO,PL,PL,WO,WO,PL,PL,PL,PL;GEOMAP[0920]--GEOMAP[0929], (40,11)--(49,11) .WORD PL,PL,LO,LO,PL,PL,PL,PL,PL,PL;GEOMAP[0930]--GEOMAP[0939], (50,11)--(59,11) .WORD PL,RI,RI,PL,PL,PL,PL,HI,HI,HI;GEOMAP[0940]--GEOMAP[0949], (60,11)--(69,11) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[0950]--GEOMAP[0959], (70,11)--(79,11) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0960]--GEOMAP[0969], (00,12)--(09,12) .WORD PL,PL,PL,PL,PL,LO,PL,PL,PL,PL;GEOMAP[0970]--GEOMAP[0979], (10,12)--(19,12) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[0980]--GEOMAP[0989], (20,12)--(29,12) .WORD PL,PL,PL,PL,PL,RI,PL,PL,PL,PL;GEOMAP[0990]--GEOMAP[0999], (30,12)--(39,12) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1000]--GEOMAP[1009], (40,12)--(49,12) .WORD PL,PL,PL,LO,PL,PL,PL,PL,PL,PL;GEOMAP[1010]--GEOMAP[1019], (50,12)--(59,12) .WORD PL,RI,RI,PL,PL,PL,PL,HI,HI,HI;GEOMAP[1020]--GEOMAP[1029], (60,12)--(69,12) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[1030]--GEOMAP[1039], (70,12)--(79,12) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1040]--GEOMAP[1049], (00,13)--(09,13) .WORD PL,PL,PL,PL,PL,LO,PL,PL,PL,PL;GEOMAP[1050]--GEOMAP[1059], (10,13)--(19,13) .WORD PL,PL,WO,WO,PL,PL,PL,PL,PL,PL;GEOMAP[1060]--GEOMAP[1069], (20,13)--(29,13) .WORD PL,PL,PL,PL,PL,RI,PL,PL,PL,PL;GEOMAP[1070]--GEOMAP[1079], (30,13)--(39,13) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1080]--GEOMAP[1089], (40,13)--(49,13) .WORD PL,PL,PL,LO,PL,PL,PL,PL,PL,PL;GEOMAP[1090]--GEOMAP[1099], (50,13)--(59,13) .WORD PL,RI,RI,PL,PL,PL,PL,HI,HI,HI;GEOMAP[1100]--GEOMAP[1109], (60,13)--(69,13) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[1110]--GEOMAP[1119], (70,13)--(79,13) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1120]--GEOMAP[1129], (00,14)--(09,14) .WORD PL,PL,PL,PL,LO,LO,PL,PL,PL,PL;GEOMAP[1130]--GEOMAP[1139], (10,14)--(19,14) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1140]--GEOMAP[1149], (20,14)--(29,14) .WORD PL,PL,PL,PL,PL,RI,PL,PL,PL,WO;GEOMAP[1150]--GEOMAP[1159], (30,14)--(39,14) .WORD WO,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1160]--GEOMAP[1169], (40,14)--(49,14) .WORD PL,PL,PL,LO,PL,PL,PL,PL,PL,PL;GEOMAP[1170]--GEOMAP[1179], (50,14)--(59,14) .WORD PL,RI,RI,PL,PL,PL,PL,HI,HI,HI;GEOMAP[1180]--GEOMAP[1189], (60,14)--(69,14) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[1190]--GEOMAP[1199], (70,14)--(79,14) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1200]--GEOMAP[1209], (00,15)--(09,15) .WORD PL,PL,PL,PL,LO,PL,PL,PL,PL,PL;GEOMAP[1210]--GEOMAP[1219], (10,15)--(19,15) .WORD PL,PL,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1220]--GEOMAP[1229], (20,15)--(29,15) .WORD PL,PL,PL,PL,PL,RI,PL,PL,PL,WO;GEOMAP[1230]--GEOMAP[1239], (30,15)--(39,15) .WORD WO,WO,PL,PL,PL,PL,PL,PL,PL,PL;GEOMAP[1240]--GEOMAP[1249], (40,15)--(49,15) .WORD PL,PL,PL,LO,PL,PL,PL,PL,PL,PL;GEOMAP[1250]--GEOMAP[1259], (50,15)--(59,15) .WORD PL,RI,RI,PL,PL,PL,PL,HI,HI,HI;GEOMAP[1260]--GEOMAP[1269], (60,15)--(69,15) .WORD HI,HI,HI,HI,HI,HI,HI,HI,HI,HI;GEOMAP[1270]--GEOMAP[1279], (70,15)--(79,15) ;;;other data---------------------------------------------------------------------- MPOS: .BLKW MAPSIZE ;movable position information CPOS: .BLKW MAPSIZE ;the information of character current position MOABPOS:.BLKW MAPSIZE ;the rest of character's move ability CROUTE: .BLKW COMROUTESIZE ;computer serch route memory ;;;character type information CHAKIBA:.ASCIZ / K/ .EVEN CHAYARI:.ASCIZ / Y/ .EVEN CHATEPO:.ASCIZ / T/ .EVEN ;;;messages METURN: .ASCIZ / TURN/ .EVEN MEWIN: .ASCIZ /WIN!/ .EVEN MESPACE:.ASCIZ / / .EVEN MECHOI: .ASCIZ / UESUGI vs TAKEDA / .EVEN MEPLPL: .ASCIZ /1.player vs player / .EVEN MECOPL: .ASCIZ /2.computer vs player / .EVEN MEPLCO: .ASCIZ /3.player vs computer/ .EVEN MECOCO: .ASCIZ /4.computer vs computer/ .EVEN ;;;erase strings for dead character CHADEAD:.ASCIZ / / .EVEN ;;;-----------------------------------------------------------------------------;;; ;;; MAIN ROUTINE ;;; ;;;-----------------------------------------------------------------------------;;; MAIN: JSR PC, INIT JSR PC, TURNCHA JSR PC, PRIEND JSR PC, @#CHIN ;push any key BR MAIN ;return to first state .EOJ ;;;-----------------------------------------------------------------------------;;; ;;; SUBROTINES ;;; ;;;-----------------------------------------------------------------------------;;; ;;;----------------initilize------------------------------------------------------- ;;;initilize INIT: JSR PC, ERALL JSR PC, PRIFINF JSR PC, CHACHOI JSR PC, ERALL JSR PC, ERMES JSR PC, INITCHA JSR PC, DRFRAME JSR PC, PRIINF JSR PC, PRICDAT JSR PC, DRMAP JSR PC, DRFACES JSR PC, CLRCPOS JSR PC, ERACHA JSR PC, PRIACHA JSR PC, CLRATA RTS PC ;;;initilize character data INITCHA:MOV R5, -(SP) 1$: MOV FISOL(R5), CHASOL(R5) MOV FIMORA(R5), CHAMORA(R5) MOV FIXPOS(R5), CHAXPOS(R5) MOV FIYPOS(R5), CHAYPOS(R5) MOV #LIVE, CHALIFE(R5) TST (R5)+ CMP R5, #MAXCHARANUMBER BLE 1$ MOV (SP)+, R5 RTS PC ;;;erase message on display ERMES: MOV R0, -(SP) MOV R1, -(SP) MOV #MESVRAM, R0 MOV #MESPACE, R1 JSR PC, PRISTR MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;character contorol choice CHACHOI:MOV R0, -(SP) MOV R1, -(SP) MOV R5, -(SP) CLR R5 ;R5 start ID MOV #MAXCHARANUMBER, R1 ;R1 end ID 1$: MOV #COMPUTER, CHAMANI(R5) TST (R5)+ CMP R5, R1 BLE 1$ CLR R5 2$: JSR PC, @#CHIN CMPB R0, #'1 ;both team: player BEQ 5$ CMPB R0, #'2 ;team0:computer, team1:player BEQ 3$ CMPB R0, #'3 ;team0:player, team1:computer BEQ 4$ CMPB R0, #'4 ;both team: computer BEQ 6$ BR 2$ 3$: MOV #MAXTEAM0NUMBER, R5 ADD #2., R5 BR 5$ 4$: MOV #MAXTEAM0NUMBER, R1 5$: MOV #PLAYER, CHAMANI(R5) TST (R5)+ CMP R5, R1 BLE 5$ 6$: MOV (SP)+, R5 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;print first choise of manipulation (computer or player) PRIFINF:MOV R0, -(SP) MOV R1, -(SP) MOV #FIRSTMESVRAM, R0 MOV #MECHOI, R1 JSR PC, PRISTR ADD #VRAMLOOP, R0 MOV #MEPLPL, R1 JSR PC, PRISTR ADD #VRAMLOOP, R0 MOV #MECOPL, R1 JSR PC, PRISTR ADD #VRAMLOOP, R0 MOV #MEPLCO, R1 JSR PC, PRISTR ADD #VRAMLOOP, R0 MOV #MECOCO, R1 JSR PC, PRISTR MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;erase all object and character on display ERALL: MOV R0, -(SP) MOV #VRAM, R0 1$: CLR (R0)+ CMP R0, #ENDVRAM BMI 1$ JSR R5, @#CLRSCREEN MOV (SP)+, R0 RTS PC ;;;--------------character contorol---------------------------------------- ;;;character's turn contorol TURNCHA:MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R5, -(SP) MOV #1., R3 MOV #0., R1 MOV #16., R2 CLR R5 MOV #TURNVRAM, R0 1$: JSR PC, PRITURN MOV CHACHAR(R5), (R0) TST CHALIFE(R5) ;character dead or live BEQ 3$ CMP CHAMANI(R5), #PLAYER BNE 2$ JSR PC, MOVCHA ;player contorol BR 3$ 2$: JSR PC, COMMOV ;computer contorol 3$: CMP CHALIFE(R1), #DEAD ;chack each team's captain live or dead BEQ 4$ CMP CHALIFE(R2), #DEAD BEQ 4$ TST (R5)+ CMP R5, #MAXCHARANUMBER BLE 1$ CLR R5 INC R3 BR 1$ 4$: MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;print turn number on display ;;; param: R3 turn number PRITURN:MOV R0, -(SP) MOV #TURNNUMBERVRAM, R0 JSR PC, NUMOUT3 MOV (SP)+, R0 RTS PC ;;;print end messages PRIEND: MOV R0, -(SP) MOV R1, -(SP) MOV R5, -(SP) MOV #WINMESVRAM, R0 MOV #MEWIN, R1 JSR PC, PRISTR ;print win team's name MOV #0., R5 MOV #MESVRAM, R0 MOV #TEAM0NAM, R1 CMP CHALIFE(R5), #DEAD BNE 1$ MOV #TEAM1NAM, R1 1$: JSR PC, PRISTR MOV (SP)+, R5 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;---------print character on map------------------------------------------------- ;;;display all characters PRIACHA:MOV R5, -(SP) 1$: JSR PC, PRI1CHA TST (R5)+ CMP R5, #MAXCHARANUMBER BLE 1$ MOV (SP)+, R5 RTS PC ;;;display and set CPOS of character PRI1CHA:MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) TST CHALIFE(R5) ;check character live or dead BEQ 1$ MOV CHAXPOS(R5), R2 MOV CHAYPOS(R5), R3 JSR PC, CAXYTOP MOV R5, CPOS(R4) ;set CPOS(p) MOV CHACHAR(R5), VRAM(R4) ;display 1$: MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;erase all character on display ERACHA: MOV R4, -(SP) CLR R4 1$: CLR VRAM(R4) TST (R4)+ CMP R4, #MAPSIZE BMI 1$ MOV (SP)+, R4 RTS PC ;;;-------------draw map----------------------------------------------------------- ;;;draw map ;;;p (GEOMAP[p]'s), or x position is given in R3 ;;;shift bit number, or y position is given in R2 ;;;R4 is geographical data of each GEOMAP[p] DRMAP: MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) CLR R3 ;now R3 is p 1$: MOV GEOMAP(R3), R4 ;geographical discrimination data is given in R4 MOV #9.,R2 ;R2 is shift bit number MOV R3, -(SP) ;save p ASR R3 ;p * 2 JSR PC, SHIFTR ;shift right R4 (R2 bit) JSR PC, DIVETEN ;(x) R3 = R3 % 80. (y) R2 = R3 / 80. JSR PC, MULTEN ;(x) R3 * 10. JSR PC, MULFTEN ;(y) R2 * 15. JSR PC, DRGEO ;draw fillrect at (x, y) MOV (SP)+, R3 ;recover p TST (R3)+ CMP R3, #TWICEMAPSIZE BMI 1$ MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;draw fillrect at (x, y) ;;;(x, y) = (R3, R2) ;;; param: R3 x pos ;;; R2 y pos ;;; R4 geographical distinction number DRGEO: MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) CMP R4, #0. ;plain BEQ 1$ CMP R4, #1. ;hill BEQ 2$ CMP R4, #2. ;load BEQ 3$ CMP R4, #3. ;river BEQ 4$ CMP R4, #4. ;wood BEQ 5$ BR 6$ 1$: MOV #0, @#7$ ;set color of plain MOV #177777, @#7$+2 MOV #100000, @#7$+4 BR 6$ 2$: MOV #100000, @#7$ ;set color of hill MOV #100000, @#7$+2 MOV #0, @#7$+4 BR 6$ 3$: MOV #170000, @#7$ ;set color of load MOV #170000, @#7$+2 MOV #100000, @#7$+4 BR 6$ 4$: MOV #0, @#7$ ;set color of river MOV #0, @#7$+2 MOV #177777, @#7$+4 BR 6$ 5$: MOV #0, @#7$ ;set color of wood MOV #100000, @#7$+2 MOV #0, @#7$+4 6$: JSR R5, @#SETCOLOR 7$: .WORD 0, 0, 0 MOV R3, @#8$ MOV R2, @#8$+2 JSR R5, @#FILLRECT ;draw fillrect 8$: .WORD 0., 0., 10., 15. ;fillrect x position, fillrect y position MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;----------draw faces------------------------------------------------------------ ;;;draw two faces DRFACES:MOV R0, -(SP) MOV R5, -(SP) MOV #UEFACE, R5 MOV #TEAM0FACEXADRESS, R0 JSR PC, DRFACE MOV #TEAM1FACEXADRESS, R0 MOV #TAFACE, R5 JSR PC, DRFACE MOV (SP)+, R5 MOV (SP)+, R0 RTS PC ;;;draw face subroutine ;;; param: R5 top adress of graphic data ;;; R0 top x adress where user want to draw DRFACE: MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) CLR R1 1$: MOVB (R5)+, R4 JSR PC, DIV32 ASL R2 ASL R3 ADD #FACEYADRESS, R2 ADD R0, R3 JSR PC, DRDOT INC R1 CMPB R4, #DOTEND ;draw dot until end data appear BNE 1$ MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 RTS PC ;;;draw fillrect at (x, y) ;;;(x, y) = (R3, R2) ;;; param: R3 x pos ;;; R2 y pos ;;; R4 geographical distinction number DRDOT: MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) CMPB R4, #WHI BEQ 1$ CMPB R4, #LGR BEQ 2$ CMPB R4, #DGR BEQ 3$ CMPB R4, #BLK BEQ 4$ CMPB R4, #YEL BEQ 5$ CMPB R4, #BRO BEQ 6$ CMPB R4, #RED BEQ 7$ CMPB R4, #DBL BEQ 8$ CMPB R4, #LPI BEQ 9$ CMPB R4, #GRE BEQ 10$ CMPB R4, #RBR BEQ 11$ CMPB R4, #PBR BEQ 12$ CMPB R4, #LBL BEQ 13$ 1$: MOV #177777, @#15$ MOV #177777, @#15$+2 MOV #177777, @#15$+4 BR 14$ 2$: MOV #100000, @#15$ MOV #100000, @#15$+2 MOV #100000, @#15$+4 BR 14$ 3$: MOV #170000, @#15$ MOV #170000, @#15$+2 MOV #170000, @#15$+4 BR 14$ 4$: MOV #0, @#15$ MOV #0, @#15$+2 MOV #0, @#15$+4 BR 14$ 5$: MOV #177777, @#15$ MOV #177777, @#15$+2 MOV #0, @#15$+4 BR 14$ 6$: MOV #177777, @#15$ MOV #100000, @#15$+2 MOV #10000, @#15$+4 BR 14$ 7$: MOV #177777, @#15$ MOV #0, @#15$+2 MOV #0, @#15$+4 BR 14$ 8$: MOV #0, @#15$ MOV #100000, @#15$+2 MOV #177777, @#15$+4 BR 14$ 9$: MOV #177777, @#15$ MOV #120000, @#15$+2 MOV #120000, @#15$+4 BR 14$ 10$: MOV #0, @#15$ MOV #177777, @#15$+2 MOV #0, @#15$+4 BR 14$ 11$: MOV #130000, @#15$ MOV #0, @#15$+2 MOV #0, @#15$+4 BR 14$ 12$: MOV #100000, @#15$ MOV #10000, @#15$+2 MOV #10000, @#15$+4 BR 14$ 13$: MOV #0, @#15$ MOV #170000, @#15$+2 MOV #177777, @#15$+4 14$: JSR R5, @#SETCOLOR 15$: .WORD 0, 0, 0 MOV R3, @#16$ MOV R2, @#16$+2 JSR R5, @#FILLRECT 16$: .WORD 0, 0, 2, 2 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;----------display & print information------------------------------------------- ;;;draw frame at information area DRFRAME:MOV R5, -(SP) JSR R5, @#SETCOLOR ;draw gray fillrect .WORD 60000, 60000, 60000 JSR R5, @#FILLRECT .WORD 0., 240., 800., 15. JSR R5, @#SETCOLOR .WORD 100000, 100000, 100000 JSR R5, @#FILLRECT .WORD 0., 255., 800., 120. JSR R5, @#SETCOLOR ;draw black lines .WORD 0, 0, 0 JSR R5, @#DRAWLINE .WORD 0., 240., 800., 240. JSR R5, @#DRAWLINE .WORD 0., 255., 800., 255. JSR R5, @#DRAWLINE .WORD 9., 240., 9., 375. JSR R5, @#DRAWLINE .WORD 189., 240., 189., 375. JSR R5, @#DRAWLINE .WORD 209., 240., 209., 375. JSR R5, @#DRAWLINE .WORD 229., 240., 229., 375. JSR R5, @#DRAWLINE .WORD 259., 240., 259., 375. JSR R5, @#DRAWLINE .WORD 319., 240., 319., 375. JSR R5, @#DRAWLINE .WORD 289., 240., 289., 375. JSR R5, @#DRAWLINE .WORD 479., 240., 479., 375. JSR R5, @#DRAWLINE .WORD 489., 240., 489., 375. JSR R5, @#DRAWLINE .WORD 669., 240., 669., 375. JSR R5, @#DRAWLINE .WORD 689., 240., 689., 375. JSR R5, @#DRAWLINE .WORD 709., 240., 709., 799. JSR R5, @#DRAWLINE .WORD 739., 240., 739., 375. JSR R5, @#DRAWLINE .WORD 769., 240., 769., 375. JSR R5, @#DRAWLINE .WORD 799., 240., 799., 375. JSR R5, @#FILLRECT .WORD 320., 255., 159., 105. JSR R5, @#SETCOLOR ;white fillrect .WORD 177777, 177777, 177777 JSR R5, @#FILLRECT .WORD 320., 355., 159., 20. MOV (SP)+, R5 RTS PC ;;;print information name PRIINF: MOV R0, -(SP) MOV R1, -(SP) MOV #INFNAMEVRAM, R0 MOV #INFNAM, R1 JSR PC, PRISTR MOV #MESVRAM, R0 MOV #METURN, R1 JSR PC, PRISTR MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;print all character's all data PRICDAT:MOV R5, -(SP) CLR R5 1$: TST CHALIFE(R5) BEQ 2$ JSR PC, PRICCHA JSR PC, PRICNAM JSR PC, PRICAB JSR PC, PRICTYP JSR PC, PRICSOL JSR PC, PRICMOR 2$: TST (R5)+ CMP R5, #MAXCHARANUMBER BLE 1$ MOV (SP)+, R5 RTS PC ;;;set VRAM by team type ;;;ID < MAXTEAM0NUMBER, set R0(VRAM) at left area ;;; param: R5 character's ID ;;; return: R0 VRAM adress SETVRAM:MOV R5, -(SP) MOV #CHADATVRAM, R0 CMP R5, #MAXTEAM0NUMBER BLE 1$ MOV #OTHERCHADATVRAM, R0 1$: MOV (SP)+, R5 RTS PC ;;;print character's character ;;;check CHATEAM number, print out each team's information area ;;; param: R5 character's ID PRICCHA:MOV R0, -(SP) MOV R5, -(SP) JSR PC, SETVRAM JSR PC, ADDVRAM MOV CHACHAR(R5), (R0) MOV (SP)+, R5 MOV (SP)+, R0 RTS PC ;;print character's name ;;check CHATEAM number, print out each team's information area ;; param: R5 character's ID PRICNAM:MOV R0, -(SP) MOV R3, -(SP) MOV R5, -(SP) JSR PC, SETVRAM ADD #SHIFTNAMEVRAM, R0 JSR PC, ADDVRAM MOV R5, R3 JSR PC, MULTEN JSR PC, PRICN MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R0 RTS PC ;;;print character name at adress (R0) ;;; param: R0 VRAM adress ;;; R3 pointer for ASCIICODE of character's name PRICN: MOV R0, -(SP) DEC R3 ;before in loop, revice R3 TST -(R0) ;before in loop, revice R0 1$: INC R3 TST (R0)+ MOVB CHANAME(R3), (R0) BNE 1$ MOV (SP)+, R0 RTS PC ;;;print out character's attack and defence ability ;;; param: R5 character's ID PRICAB: MOV R0, -(SP) MOV R3, -(SP) MOV R5, -(SP) JSR PC, SETVRAM ADD #SHIFTABVRAM, R0 JSR PC, ADDVRAM MOV CHAATAB(R5), R3 JSR PC, NUMOUT2 ADD #4., R0 ;move VRAM to next information area MOV CHADEAB(R5), R3 JSR PC, NUMOUT2 MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R0 RTS PC ;;;print soldier number ;;; param: R5 character's ID PRICSOL:MOV R0, -(SP) MOV R1, -(SP) MOV R3, -(SP) MOV R5, -(SP) CMP CHALIFE(R5), #LIVE BEQ 1$ JSR PC, SETVRAM JSR PC, ADDVRAM MOV #CHADEAD, R1 JSR PC, PRISTR BR 2$ 1$: JSR PC, SETVRAM ADD #SHIFTSOLVRAM, R0 JSR PC, ADDVRAM MOV CHASOL(R5), R3 JSR PC, NUMOUT3 2$: MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;print character morale ;;; param: R5 character's ID PRICMOR:MOV R0, -(SP) MOV R1, -(SP) MOV R3, -(SP) MOV R5, -(SP) CMP CHALIFE(R5), #LIVE BEQ 1$ JSR PC, SETVRAM JSR PC, ADDVRAM MOV #CHADEAD, R1 JSR PC, PRISTR BR 2$ 1$: JSR PC, SETVRAM ADD #SHIFTMORVRAM, R0 JSR PC, ADDVRAM MOV CHAMORA(R5), R3 JSR PC, NUMOUT3 2$: MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;print character type ;;; param: R5 character's ID PRICTYP:MOV R0, -(SP) MOV R1, -(SP) MOV R5, -(SP) JSR PC, SETVRAM ADD #SHIFTTYPVRAM, R0 JSR PC, ADDVRAM CMP CHATYPE(R5), #KIBA BNE 1$ MOV #CHAKIBA, R1 BR 3$ 1$: CMP CHATYPE(R5), #YARI BNE 2$ MOV #CHAYARI, R1 BR 3$ 2$: MOV #CHATEPO, R1 3$: JSR PC, PRISTR MOV (SP)+, R5 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;----------get movable area subroutine------------------------------------------- ;;; set all CPOS[p] = #NOCHARACTER CLRCPOS:MOV R4, -(SP) CLR R4 1$: MOV #NOCHARACTER, CPOS(R4) TST (R4)+ CMP R4, #TWICEMAPSIZE BMI 1$ MOV (SP)+, R4 RTS PC ;;;display MPOS[p] ;;;if MPOS[p] = #NOCHECKMPOS, display nothing ;;;if MPOS[p] = 1, 2, ... display "1","2",... PRIMPOS:MOV R1, -(SP) CLR R1 1$: CMP MPOS(R1), #NOCHECKMPOS ;check MPOS[p] == #NOCHECKMPOS BEQ 2$ ;if MPOS[p] == #NOCHECKMPOS, do nothing and next p ADD #'0, MPOS(R1) ;else display "MPOS[p]" MOV MPOS(R1), VRAM(R1) SUB #'0, MPOS(R1) ;reset MPOS[p] 2$: TST (R1)+ CMP R1, #TWICEMAPSIZE BMI 1$ MOV (SP)+, R1 RTS PC ;;;set all MPOS[p] = #NOCHECKMPOS ;;;set all MOABPOS[p] = #0 CLRMPOS:MOV R1, -(SP) CLR R1 1$: MOV #NOCHECKMPOS, MPOS(R1) CLR MOABPOS(R1) TST (R1)+ CMP R1, #TWICEMAPSIZE BMI 1$ MOV (SP)+, R1 RTS PC ;;;erase movable information on display ERMPOS: MOV R1, -(SP) CLR R1 1$: CMP MPOS(R1), #NOCHECKMPOS ;if character doesn't exist, not erase BEQ 2$ CMP CPOS(R1), #NOCHARACTER ;if character exist, not erase BNE 2$ MOV #0, VRAM(R1) 2$: TST (R1)+ CMP R1, #TWICEMAPSIZE BMI 1$ MOV (SP)+, R1 RTS PC ;;;set character position and move ability, ;;;then call BODMPOS ;;; param: R1 character's move ability ;;; R5 character's ID SETMPOS:MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R5, -(SP) MOV #FIRSTMPOS, R0 MOV CHAXPOS(R5), R2 MOV CHAYPOS(R5), R3 JSR PC, BODMPOS MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;if the position movable, set MPOS[p] = 0, 1, 2,... ;;;this subroutine is main body of MOVABLE ;;; param: R1 character's move ability ;;; R2 character's x position ;;; R3 character's y position BODMPOS:MOV R0, -(SP) ;save move times MOV R1, -(SP) ;save m MOV R2, -(SP) ;save x MOV R3, -(SP) ;save y MOV R4, -(SP) ;save R4 MOV CHAMORA(R5), -(SP) ;save CMP R1, #0. ;check m >= 0 BMI 5$ CMP R2, #MINXPOS ;check x >= 0 BMI 5$ CMP R2, #MAXXPOS ;check x <= 79 BGT 5$ CMP R3, #MINYPOS ;check y >= 0 BMI 5$ CMP R3, #MAXYPOS ;check y <= 15 BGT 5$ JSR PC, CAXYTOP ;p = 2 * ( x + y * 80. ) JSR PC, SUBMORA ;character's morale - (comsumption / 4) TST CHAMORA(R5) BLE 5$ ;if character's morale <= 0, serch end CMP CPOS(R4), #NOCHARACTER ;if character is not exist BNE 1$ ;serch continiue BR 2$ 1$: CMP CPOS(R4), R5 ;if character's ID on map == R5 BNE 5$ ;serch continiue 2$: INC R0 ;culcurate minimum distance CMP R0, MPOS(R4) BMI 3$ CMP R1, MOABPOS(R4) BMI 5$ 3$: MOV R1, MOABPOS(R4) MOV R0, MPOS(R4) ;set MPOS[p] = R0 JSR PC, SUBCOMS DEC R2 ;Case BODMPOS(m-1,x-1,y) JSR PC, BODMPOS INC R2 DEC R3 ;Case BODMPOS(m-1,x,y-1) JSR PC, BODMPOS INC R3 INC R2 ;Case BODMPOS(m-1,x+1,y) JSR PC, BODMPOS DEC R2 INC R3 ;Case BODMPOS(m-1,x,y+1) JSR PC, BODMPOS DEC R3 5$: MOV (SP)+, CHAMORA(R5) MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;----------character contorol subroutines by player------------------------------ ;;;print fillrect at information area ;;; param: R5 character ID number PRILAMI:MOV R0, -(SP) MOV R5, -(SP) MOV #INFTEAM0XVRAM, @#2$ CMP R5, #MAXTEAM0NUMBER BLE 1$ MOV #INFTEAM1XVRAM, @#2$ 1$: MOV #INFAREAYVRAM, R0 JSR PC, ADDDRAW MOV R0, @#2$+2 JSR R5, @#FILLRECT 2$: .WORD 0., 0., 9., 15. MOV (SP)+, R5 MOV (SP)+, R0 RTS PC ;;;print fillrect at map area ;;; param: R5 character ID number PRILAMM:MOV R2, -(SP) MOV R3, -(SP) MOV R5, -(SP) MOV CHAXPOS(R5), R3 ;x position JSR PC, MULTEN MOV R3, @#1$ MOV CHAYPOS(R5), R2 ;y position JSR PC, MULFTEN MOV R2, @#1$+2 JSR R5, FILLARCT 1$: .WORD 0., 0., 9., 14., 0., 55000 MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;print map graphic at the position of character whose ID is R5 ;;; param: R5 character ID number ERLAMM: MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) MOV CHAXPOS(R5), R2 MOV CHAYPOS(R5), R3 JSR PC, CAXYTOP MOV GEOMAP(R4), R4 MOV #9., R2 ;R2 is shift bit number JSR PC, SHIFTR ;shift right R4 (R2 bit) MOV CHAXPOS(R5), R3 JSR PC, MULTEN MOV CHAYPOS(R5), R2 JSR PC, MULFTEN JSR PC, DRGEO MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;character's move phase contorol MOVCHA: MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) JSR R5, @#SETCOLOR .WORD 0, 140000, 177777 JSR PC, PRILAMI ;print FILLRECT at information area MOV CHAXPOS(R5), -(SP) ;------------------------------------- MOV CHAYPOS(R5), -(SP) ;save state because of cancel command MOV CHAMORA(R5), -(SP) ; MOV CHAMOAB(R5), R1 ;------------------------------------- 1$: MOV CHAXPOS(R5), R2 MOV CHAYPOS(R5), R3 JSR PC, CAXYTOP MOV R5, CPOS(R4) JSR R5, @#SETCOLOR .WORD 0, 140000, 177777 JSR PC, PRILAMM ;print fillrect at map area JSR PC, CLRMPOS ;------------------------------------- JSR PC, SETMPOS ;serch movable area and print JSR PC, PRIMPOS ; JSR PC, PRI1CHA ;------------------------------------- JSR PC, PRICMOR ;print morale JSR PC, ERATA ;------------------------------------- JSR PC, CLRATA ;serch enemy which can be attacked JSR PC, SERATA ;and print lamp at the enemy JSR PC, PRIATA ;------------------------------------- 2$: JSR PC, @#CHIN JSR PC, ERLAMM JSR PC, ERMPOS CMPB #'4, R0 ;character go left BEQ 3$ CMPB #'6, R0 ;character go right BEQ 4$ CMPB #'8, R0 ;character go up BEQ 5$ CMPB #'2, R0 ;character go down BEQ 6$ CMPB #'5, R0 ;move cancel and locate the character BEQ 7$ ;on the first position CMPB #'0, R0 ;end move BEQ 8$ BR 9$ 3$: JSR PC, LEFTMOV ;left move BR 1$ 4$: JSR PC, RIGHMOV ;right move BR 1$ 5$: JSR PC, UPMOV ;up move BR 1$ 6$: JSR PC, DOWNMOV ;down move BR 1$ 7$: MOV 4(SP), CHAXPOS(R5) ;move cancel, return the state before move MOV 2(SP), CHAYPOS(R5) MOV (SP), CHAMORA(R5) MOV CHAMOAB(R5), R1 MOV #NOCHARACTER, CPOS(R4) MOV #0, VRAM(R4) BR 1$ 8$: JSR PC, ENDMOV ;move end and turn next character BR 10$ ;morale is up when this command execute 9$: JSR PC, ATTACK CMP R0, #NOTATTACKEXECUTE ;if player doesn't execute attack, branch 1$ BEQ 1$ 10$: JSR PC, ERATA JSR R5, @#SETCOLOR .WORD 100000, 100000, 100000 JSR PC, PRILAMI ;print gray fillrect at information area ADD #6., SP MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;character left move ;;; param: R2 character x position ;;; R5 character's ID LEFTMOV:MOV R0, -(SP) MOV R2, -(SP) CMP R2, #MINXPOS BEQ 1$ MOV R4, R0 SUB #2., R0 CMP MPOS(R0), #NOCHECKMPOS BEQ 1$ DEC CHAXPOS(R5) JSR PC, AFTRMOV 1$: MOV (SP)+, R2 MOV (SP)+, R0 RTS PC ;;;character right move ;;; param: R2 character x position ;;; R5 character's ID RIGHMOV:MOV R0, -(SP) MOV R2, -(SP) CMP R2, #MAXXPOS ;if CHAPOSX ==79., do nothing BEQ 1$ MOV R4, R0 ADD #2., R0 CMP MPOS(R0), #NOCHECKMPOS ;if MPOS[p] == 0, do nothing BEQ 1$ INC CHAXPOS(R5) JSR PC, AFTRMOV 1$: MOV (SP)+, R2 MOV (SP)+, R0 RTS PC ;;;character up move ;;; param: R3 character y position ;;; R5 character's ID UPMOV: MOV R0, -(SP) MOV R3, -(SP) CMP R3, #MINYPOS ;if CHAYPOS== 0., do nothing BEQ 1$ MOV R4, R0 SUB #160., R0 CMP MPOS(R0), #NOCHECKMPOS ;if MPOS[p] == 0, do nothing BEQ 1$ DEC CHAYPOS(R5) JSR PC, AFTRMOV 1$: MOV (SP)+, R3 MOV (SP)+, R0 RTS PC ;;;character down move ;;; param: R3 character y position ;;; R5 character's ID DOWNMOV:MOV R0, -(SP) MOV R3, -(SP) CMP R3, #MAXYPOS ;if CHAYPOS == 15., do nothing BEQ 1$ MOV R4, R0 ADD #160., R0 CMP MPOS(R0), #NOCHECKMPOS ;if MPOS[p] == 0, do nothing BEQ 1$ INC CHAYPOS(R5) JSR PC, AFTRMOV 1$: MOV (SP)+, R3 MOV (SP)+, R0 RTS PC ;;;after character move ;;; param: R4 position AFTRMOV:JSR PC, SUBCOMS JSR PC, SUBMORA MOV #NOCHARACTER, CPOS(R4) MOV #0, VRAM(R4) RTS PC ;;;move end ;;; param: R5 character's ID ENDMOV: MOV R0, -(SP) MOV R5, -(SP) MOV CHAATAB(R5), R0 ADD CHADEAB(R5), R0 ASL R0 ADD #7., R0 ASR R0 ASR R0 ASR R0 ADD R0, CHAMORA(R5) CMP CHAMORA(R5), #MAXMORALE ;chack character morale =< 120. BLE 1$ MOV #MAXMORALE, CHAMORA(R5) 1$: JSR PC, PRICMOR MOV (SP)+, R5 MOV (SP)+, R0 RTS PC ;;;--------character contorol subroutines by computer------------------------------ ;;;computer move contorol ;;; param: R5 character's ID COMMOV: MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) JSR R5, @#SETCOLOR .WORD 0, 140000, 177777 JSR PC, PRILAMI ;print FILLRECT at information area MOV CHAMOAB(R5), R1 ;value of R1 can be discarded JSR PC, CLRMPOS JSR PC, SETMPOS JSR PC, NEARPOS JSR PC, SERROUT ;R2 is stack pointer CLR R3 ;R3 is move times 1$: JSR PC, COMMSET ;set data before move MOV (R2)+, R0 ;pop the route data JSR PC, ERLAMM ;erase lamp on map TST R3 ;if move times == 0, not execute attack command BNE 7$ CMP R0, #COMMOVEND ;if ( move times == 0 && character can't move ) BNE 8$ ;attack execute 7$: JSR PC, COMATA CMP R1, #MAXCHARANUMBER ;if attack is not executed, character move BLE 6$ 8$: INC R3 ;incliment move times CMP R0, #COMRIGHTMOV BEQ 2$ CMP R0, #COMLEFTMOV BEQ 3$ CMP R0, #COMDOWNMOV BEQ 4$ CMP R0, #COMUPMOV BEQ 5$ CMP R0, #COMMOVEND BEQ 6$ 2$: JSR PC, RIGHMOV BR 1$ 3$: JSR PC, LEFTMOV BR 1$ 4$: JSR PC, DOWNMOV BR 1$ 5$: JSR PC, UPMOV BR 1$ 6$: JSR PC, ENDMOV JSR PC, ERLAMM ;erase lamp on map JSR R5, @#SETCOLOR .WORD 100000, 100000, 100000 JSR PC, PRILAMI ;erase lamp at information area MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;character data set before move ;;; param: R5 character ID number ;;; return: R4 character position COMMSET:MOV R2, -(SP) ;save R2 MOV R3, -(SP) MOV CHAXPOS(R5), R2 MOV CHAYPOS(R5), R3 JSR PC, CAXYTOP MOV R5, CPOS(R4) JSR R5, @#SETCOLOR .WORD 0, 140000, 177777 JSR PC, PRILAMM ;print FILLARCT at map area JSR PC, PRI1CHA ;print 1character JSR PC, PRICMOR ;print morale JSR PC, CLRATA ;clear all attack frag JSR PC, SERATA ;serch enemy character which can be attacked MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;serch the nearest position toward enemy captain ;;;return the value of the position ;;; return: R0 nearest position of enemy NEARPOS:MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV #16., R1 ;team1 captain TST CHATEAM(R5) BEQ 1$ MOV #0., R1 ;team0 captain 1$: MOV #CHANOTMOVE, R0 ;character don't move CLR R4 MOV #MAXDISTANCE, R3 ;R3 is minimum distance, now set first value 2$: CMP MPOS(R4), #NOCHECKMPOS ;if position is not movable, not compare BEQ 3$ TST MPOS(R4) ;the position where character now exist BEQ 3$ ;not compare JSR PC, CULDIST CMP R2, R3 ;compare culclate distance and minimum distance BGT 3$ MOV R2, R3 ;if culclate distance < minimum distance, MOV R4, R0 ;set this position 3$: TST (R4)+ CMP R4, #TWICEMAPSIZE BMI 2$ CMP R0, #CHANOTMOVE ;if character can't move, BNE 4$ ;set the position where character now exist MOV CHAXPOS(R5), R2 MOV CHAYPOS(R5), R3 JSR PC, CAXYTOP MOV R4, R0 4$: MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 RTS PC ;;;culculate the distance ;;; param: R4 positon ;;; R1 character ID number ;;; return: R2 distance CULDIST:MOV R1, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) MOV R4, R3 ASR R3 JSR PC, DIVETEN ;( R2, R3 ) = ( x, y ) SUB CHAYPOS(R1), R2 JSR PC, ABSR2 ;x distance MOV R2, -(SP) ;save x distance value MOV R3, R2 SUB CHAXPOS(R1), R2 JSR PC, ABSR2 ;y distance ADD (SP)+, R2 ;sum distance MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R1 RTS PC ;;;serch the route from final purpose position ;;;and pop the route data at #CROUTE ;;;R2 is stack pointer ;;; param: R0 purpose position ;;; return: R2 stack pointer SERROUT:MOV R0, -(SP) MOV R1, -(SP) MOV #CROUTE, R2 ;set R2 (stack pointer) at #CROUTE+2 ADD #COMROUTESIZE+2, R2 ; MOV #COMMOVEND, -(R2) ;pop end move data MOV MPOS(R0), R1 1$: TST R1 BEQ 6$ DEC R1 SUB #2., R0 ;left CMP R1, MPOS(R0) BEQ 2$ ADD #4., R0 ;right CMP R1, MPOS(R0) BEQ 3$ SUB #162., R0 ;up CMP R1, MPOS(R0) BEQ 4$ ADD #320., R0 ;down CMP R1, MPOS(R0) BEQ 5$ BR 2$ 2$: MOV #COMRIGHTMOV, -(R2) BR 1$ 3$: MOV #COMLEFTMOV, -(R2) BR 1$ 4$: MOV #COMDOWNMOV, -(R2) BR 1$ 5$: MOV #COMUPMOV, -(R2) BR 1$ 6$: MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;character's moveability - GEOMAP[p]'s comsumption data ;;; param: R1 rest of move ability ;;; R4 GEOMAP[p]'s p ;;; return: R1 move ability after move SUBCOMS:MOV R0, -(SP) MOV R4, -(SP) MOV GEOMAP(R4), R0 BIC #7770, R0 ;get the each GEOMAP[p]'s SUB R0, R1 ; comsumption data of move ability MOV (SP)+, R4 MOV (SP)+, R0 RTS PC ;;;character's morale - (geographical comsumption / 2) ;;; param: R5 character's ID ;;; R4 GEOMAP[p]'s p SUBMORA:MOV R0, -(SP) MOV R4, -(SP) MOV GEOMAP(R4), R0 BIC #7770, R0 ASR R0 SUB R0, CHAMORA(R5) MOV (SP)+, R4 MOV (SP)+, R0 RTS PC ;;;----------subroutines which is concerned with attack---------------------------- ;;;computer attack subroutine ;;;if chracter which can be attacked exists, attack execute ;;;search enemy from small number ;;; param: R5 character ID number COMATA: MOV R5, -(SP) CLR R1 1$: TST CHAATBL(R1) BEQ 4$ JSR PC, DRIAECT CMP CHATYPE(R5), #TEPPOU ;check chracter type BNE 2$ ;if type is TEPPOU, execute SUBGATA JSR PC, SUBGATA BR 3$ 2$: JSR PC, SUBIATA 3$: JSR PC, SUBIMOR JSR PC, JUDLIDE ;judge enemy character live or dead MOV R1, -(SP) MOV R5, R1 JSR PC, JUDLIDE ;judge turn character live or dead MOV (SP)+, R1 JSR PC, PRICSOL JSR PC, PRICMOR ;print turn character information MOV R5, -(SP) ;save R5 MOV R1, R5 JSR PC, PRICSOL ;print enemy character information JSR PC, PRICMOR MOV (SP)+, R5 ;recover R5 BR 5$ ;attack is executed, break 4$: TST (R1)+ CMP R1, #MAXCHARANUMBER BLE 1$ 5$: MOV (SP)+, R5 RTS PC ;;;culclate fundamental damage which is given to enemy ;;;if this subroutine is called, the value of R4 is broken ;;; param: R1 enemy character ID number ;;; R5 character ID number ;;; return: R4 answer of dammage CULDAMG:MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R5, -(SP) MOV CHADEAB(R1), R0 ;enemy character defence ability MOV CHAXPOS(R1), R2 ;enemy character x position MOV CHAYPOS(R1), R3 ;enemy character y position JSR PC, CAXYTOP ;get enemy character GEOMAP[p]'s p MOV GEOMAP(R4), R4 ASR R4 ASR R4 ASR R4 BIC #770, R4 ;get enemy character's geographical defence effect ADD R4, R0 ;R0 has value of "defence + geographical effect" MOV R0, -(SP) ;save R0 MOV CHAATAB(R5), R0 ;character attack ability MOV CHAXPOS(R5), R2 ;character x position MOV CHAYPOS(R5), R3 ;character y position JSR PC, CAXYTOP MOV GEOMAP(R4), R4 ;get enemy character GEOMAP[p]'s p ASR R4 ASR R4 ASR R4 ASR R4 ASR R4 ASR R4 BIC #70, R4 ;get character's geographical attack effect ADD R4, R0 ASL R0 ASL R0 ADD #40., R0 ;R0 = "(attack + geographical effect) * 4 + 40." SUB (SP)+, R0 ;R0 ="{(attack + geographical effect) * 4 + 40.} ;-{defence + geographical effect}" MOV R0, R2 ;calculate the square of R0 MOV R0, R3 MOV R1, -(SP) ;save R1 (enemy ID number) JSR PC, MULFAST MOV R1, R0 ;answer is given in R0 MOV (SP)+, R1 ;recover R1 (enemy ID number) ASR R0 ASR R0 ASR R0 ASR R0 ASR R0 ASR R0 ASR R0 ;R0 / 128. MOV CHASOL(R5), R2 ADD #256., R2 ASR R2 ASR R2 ASR R2 ASR R2 ASR R2 ;R2 = (soldier + 256.) / 32. MOV CHAMORA(R5), R3 ADD #32., R3 ASR R3 ASR R3 ASR R3 ASR R3 ;R3 = (morale + 32.) / 16. MOV R1, -(SP) ;save R1 JSR PC, MULFAST MOV R1, R2 MOV (SP)+, R1 ;recover R1 ASR R2 ;R2 = R2 * R3 MOV R0, R3 JSR PC, MULFAST MOV R1, R4 ASR R4 ASR R4 ASR R4 ASR R4 ASR R4 ASR R4 ;answer is given in R4 MOV (SP)+, R5 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;CHASOL(R1) - (damage by fire) ;;;damage changes by distance between turn character and enemy character ;;; param: R1 enemy character ID ;;; R5 turn character ID SUBGATA:MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV CHAXPOS(R5), R2 MOV CHAXPOS(R1), R3 SUB R3, R2 JSR PC, ABSR2 ;culculate x distance MOV R2, -(SP) MOV CHAYPOS(R5), R2 MOV CHAYPOS(R1), R3 SUB R3, R2 JSR PC, ABSR2 ;culculate y distance ADD (SP)+, R2 ;sum distance JSR PC, CULDAMG JSR PC, SHIFTR ;damage / 2 (R2 times) SUB R4, CHASOL(R1) ;character soldier and morale < 0, set these values = 0 TST CHASOL(R1) BGT 1$ MOV #0., CHASOL(R1) BR 2$ 1$: TST CHAMORA(R1) BGT 2$ MOV #0., CHAMORA(R1) 2$: MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 RTS PC ;;;CHASOL(R1) - (damage by immediate attack) ;;;CHASOL(R5) - (damage by immediate attack) ;;; param: R1 defence character ID ;;; R5 attack character ID SUBIATA:MOV R1, -(SP) MOV R4, -(SP) ;CHASOL(R1) - (damage by immediate attack) JSR PC, CULDAMG SUB R4, CHASOL(R1) ;character soldier and morale < 0, set these values = 0 TST CHASOL(R1) BGT 1$ MOV #0., CHASOL(R1) BR 4$ 1$: TST CHAMORA(R1) BGT 2$ MOV #0., CHAMORA(R1) BR 4$ ;CHASOL(R5) - (damage by immediate attack) 2$: MOV R5, -(SP) ;exchange R1 and R5 MOV R1, R5 MOV (SP)+, R1 JSR PC, CULDAMG ASR R4 ;damage / 2 MOV R5, -(SP) ;exchange R1 and R5 MOV R1, R5 MOV (SP)+, R1 ;character soldier and morale < 0, set these values = 0 SUB R4, CHASOL(R5) TST CHASOL(R5) BGT 3$ MOV #0., CHASOL(R5) BR 4$ 3$: TST CHAMORA(R5) BGT 4$ MOV #0., CHAMORA(R5) 4$: MOV (SP)+, R4 MOV (SP)+, R1 RTS PC ;;; sub enemy morale SUBIMOR:MOV R0, -(SP) MOV R1, -(SP) MOV R5, -(SP) MOV CHAATAB(R5), R0 ASL R0 SUB CHADEAB(R1), R0 ASR R0 ASR R0 BGT 1$ CLR R0 1$: SUB R0, CHAMORA(R1) TST CHAMORA(R1) BGT 2$ MOV #0., CHAMORA(R1) 2$: MOV (SP)+, R5 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;attack subroutine ;;; param: R0 enemy character's character ;;; R5 character's ID ;;; return: R0 if attack is executed, return character ID, ;;; else, return #NOTATTACKEXECUTE ATTACK: MOV R1, -(SP) MOV R5, -(SP) CLR R1 TST CHATEAM(R5) ;if CHATEAM(R5) == 1, R0 - 40 BEQ 2$ SUB #40, R0 2$: CMPB CHACHAR(R1), R0 BEQ 3$ ADD #2., R1 CMP R1, #MAXCHARANUMBER BLE 2$ MOV #NOTATTACKEXECUTE, R0 BR 7$ 3$: TST CHAATBL(R1) BNE 4$ MOV #NOTATTACKEXECUTE, R0 BR 7$ 4$: JSR PC, DRIAECT CMP CHATYPE(R5), #TEPPOU BNE 5$ JSR PC, SUBGATA BR 6$ 5$: JSR PC, SUBIATA 6$: JSR PC, SUBIMOR JSR PC, JUDLIDE MOV R1, -(SP) MOV R5, R1 JSR PC, JUDLIDE MOV (SP)+, R1 JSR PC, PRICSOL JSR PC, PRICMOR MOV R5, -(SP) ; save R5 MOV R1, R5 JSR PC, PRICSOL ; print enemy character information JSR PC, PRICMOR ; print enemy character information MOV (SP)+, R5 ; recover R5 7$: MOV (SP)+, R5 MOV (SP)+, R1 RTS PC ;;;print the mark at the enamy which can be attacked ;;; param: R5 character's ID ;;; R1 character's ID (being attacked) PRIATA: MOV R1, -(SP) MOV R5, -(SP) JSR R5, @#SETCOLOR .WORD 177777, 100000, 0 ;set color orange CLR R1 1$: TST CHAATBL(R1) BEQ 2$ MOV R1, R5 JSR PC, PRILAMM JSR PC, PRILAMI 2$: ADD #2., R1 ;get next character ID CMP R1, #MAXCHARANUMBER BLE 1$ MOV (SP)+, R5 MOV (SP)+, R1 RTS PC ;;;serch the enemy which can be attacked ;;; param: R5 character ID SERATA: MOV R1, -(SP) MOV #YARI, R1 CMP CHATYPE(R5), #TEPPOU BNE 1$ MOV #TEPPOU, R1 1$: JSR PC, SERABOD MOV (SP)+, R1 RTS PC ;;;serch the enemy which can be attacked ;;;maim routine ;;; param: R1 attack possible area size ;;; R2 x position ;;; R3 y posituon SERABOD:MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) CMP R1, #0. ;check attackable squer number >= 0 BMI 1$ CMP R2, #MINXPOS ;check x >= 0 BMI 1$ CMP R2, #MAXXPOS ;check x <= 79 BGT 1$ CMP R3, #MINYPOS ;check y >= 0 BMI 1$ CMP R3, #MAXYPOS ;check y <= 15 BGT 1$ JSR PC, CAXYTOP ;p = 2 * ( x + y * 80. ) JSR PC, GETATID DEC R1 DEC R2 ;Case BODMPOS(m-1,x-1,y) JSR PC, SERABOD INC R2 DEC R3 ;Case BODMPOS(m-1,x,y-1) JSR PC, SERABOD INC R3 INC R2 ;Case BODMPOS(m-1,x+1,y) JSR PC, SERABOD DEC R2 INC R3 ;Case BODMPOS(m-1,x,y+1) JSR PC, SERABOD DEC R3 1$: MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 RTS PC ;;;if the enemy which can be attacked exists, CHAATBL(R1) = 1 ;;;eles do nothing GETATID:MOV R1, -(SP) CMP CPOS(R4), #NOCHARACTER BEQ 1$ MOV CPOS(R4), R1 ;character's ID CMP CHATEAM(R5), CHATEAM(R1) BEQ 1$ MOV #1., CHAATBL(R1) 1$: MOV (SP)+, R1 RTS PC ;;;clear each character's attackable flag CLRATA: MOV R1, -(SP) CLR R1 1$: CLR CHAATBL(R1) TST (R1)+ CMP R1, #MAXCHARANUMBER BLE 1$ MOV (SP)+, R1 RTS PC ;;;erase the lamp of attackable character ERATA: MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) CLR R1 1$: TST CHAATBL(R1) BEQ 2$ MOV R1, R5 JSR PC, ERLAMM JSR R5, @#SETCOLOR .WORD 100000, 100000, 100000 JSR PC, PRILAMI 2$: ADD #2., R1 CMP R1, #MAXCHARANUMBER BLE 1$ MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 RTS PC ;;;draw graffic effect of attack DRIAECT:MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) MOV #INFTEAM0XVRAM, @#4$ ;effect on information area MOV #INFTEAM0XVRAM, @#5$ ;x position MOV #INFTEAM0XVRAM, @#7$ CMP R1, #MAXTEAM0NUMBER ;check team BLE 1$ MOV #INFTEAM1XVRAM, @#4$ ;effect on information area MOV #INFTEAM1XVRAM, @#5$ ;x position MOV #INFTEAM1XVRAM, @#7$ 1$: MOV #INFAREAYVRAM, R0 MOV R1, R5 JSR PC, ADDDRAW MOV R0, @#4$+2 ;effect on information area MOV R0, @#5$+2 ;y position MOV R0, @#7$+2 MOV CHAXPOS(R1), R3 ;enemy character effect JSR PC, MULTEN MOV R3, @#3$ MOV R3, @#6$ MOV CHAYPOS(R1), R2 JSR PC, MULFTEN MOV R2, @#3$+2 MOV R2, @#6$+2 MOV #100., R4 ;R4 is loop number 2$: JSR R5, @#SETCOLOR ;set color red .WORD 177777, 0, 0 JSR R5, @#FILLARCT ;draw red fillarct 3$: .WORD 0., 0., 10., 15., 0, 55000 JSR R5, @#FILLRECT ;draw red fillrect 4$: .WORD 0., 0., 189., 15. JSR R5, @#SETCOLOR ;set color white .WORD 177777, 177777, 177777 JSR R5, @#FILLRECT ;draw white fillrect 5$: .WORD 0., 0., 189., 15. JSR R5, @#FILLARCT ;draw white fillarct 6$: .WORD 0., 0., 10., 15., 0, 55000 DEC R4 TST R4 BNE 2$ JSR R5, @#SETCOLOR ;set color light gray .WORD 100000, 100000, 100000 JSR R5, @#FILLRECT 7$: .WORD 0., 0., 189., 15. MOV R1, R5 ;print map graphic at the position of JSR PC, ERLAMM ;character whose ID is R1 JSR R5, @#SETCOLOR ;set color black .WORD 0, 0, 0 JSR R5, @#DRAWLINE ;draw lines at information area .WORD 9., 240., 9., 375. JSR R5, @#DRAWLINE .WORD 489., 240., 489., 375. MOV (SP)+, R5 MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;judge character live or dead ;;; param: R1 character ID ;;; R4 position number JUDLIDE:MOV R0, -(SP) MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) TST CHASOL(R1) ;check morale or soldier == 0 BLE 1$ TST CHAMORA(R1) BLE 1$ BR 2$ 1$: MOV #DEAD, CHALIFE(R1) ;set character dead MOV CHAXPOS(R1), R2 MOV CHAYPOS(R1), R3 JSR PC, CAXYTOP MOV #NOCHARACTER, CPOS(R4) ;clear character data on CPOS MOV #40, VRAM(R4) ;erase character's character on map 2$: MOV (SP)+, R4 MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;----------multipurpose subloutines---------------------------------------------- ;;;change (x,y) to p (POS[p]'s) ;;;R4 = 2 * ( R2 + R3 * 80. ) ;;; p = 2 * ( x + y * 80. ) ;;; param: R2 x position ;;; R3 y position ;;; return R4 CAXYTOP:MOV R2, -(SP) MOV R3, -(SP) ASL R3 ;y * 2. ASL R3 ;y * 4. ASL R3 ;y * 8. JSR PC, MULTEN ;y * 80. ADD R2, R3 MOV R3, R4 ASL R4 MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;R2 = R3 / 10. ;;;R3 = R3 % 10. ;;; param: R3 dividend ;;; return: R2 quotient ;;; R3 remainder DIVTEN: CLR R2 1$: SUB #10., R3 BMI 2$ INC R2 BR 1$ 2$: ADD #10., R3 RTS PC ;;;(y) R2 = R1 / 32. ;;;(x) R3 = R1 % 32. ;;; param: R1 dividend ;;; return: R2 quotient ;;; R3 remainder DIV32: MOV R1, -(SP) MOV R1, R2 ASR R2 ASR R2 ASR R2 ASR R2 ASR R2 MOV R2, R3 ASL R3 ASL R3 ASL R3 ASL R3 ASL R3 SUB R3, R1 MOV R1, R3 MOV (SP)+, R1 RTS PC ;;;(y) R2 = R3 / 80. ;;;(x) R3 = R3 % 80. ;;; param: R3 dividend ;;; return: R2 quotient ;;; R3 remainder DIVETEN:CLR R2 1$: SUB #80., R3 BMI 2$ INC R2 BR 1$ 2$: ADD #80., R3 RTS PC ;;R2 = R3 / 100. ;;R3 = R3 % 100. ;; param: R3 dividend ;; return: R2 quotient ;; R3 remainder DIVHUND:CLR R2 1$: SUB #100., R3 BMI 2$ INC R2 BR 1$ 2$: ADD #100., R3 RTS PC ;;; fast multiply subroutine ;;; R1 = R2 * R3 ;;; param: R2 ;;; R3 ;;; return: R1 answer MULFAST:MOV R2, -(SP) MOV R3, -(SP) CLR R1 1$: BIT #1, R2 BEQ 2$ ADD R3, R1 2$: ASL R3 ASR R2 TST R2 BNE 1$ MOV (SP)+, R3 MOV (SP)+, R2 RTS PC ;;;R3 = R3 * 10. ;;; param: R3 ;;; return: R3 MULTEN: MOV R4, -(SP) MOV R3, R4 ASL R4 ASL R4 ADD R3, R4 ASL R4 MOV R4, R3 MOV (SP)+, R4 RTS PC ;;;R2 = R2 * 15. ;;; param: R2 ;;; return: R2 MULFTEN:MOV R4, -(SP) ;save R4 MOV R2, R4 ASL R2 ASL R2 ASL R2 ASL R2 SUB R4, R2 MOV (SP)+, R4 ;recover R4 RTS PC ;;;R4 = shift right R4 (R2 bit) ;;; param: R4 source of number ;;; R2 shift bit number ;;; return: R4 number after shift right SHIFTR :ASR R4 DEC R2 BGT SHIFTR RTS PC ;;print the value of R2(1digit number) to (R0) ;; param: R0 moniter routine adress ;; R2 the value of each digit PRIDIGT:MOV R2, -(SP) ADD #'0, R2 MOV R2, (R0)+ MOV (SP)+, R2 RTS PC ;;;print 2digit number of R3 from adress (R0) ;;; param: R3 number which you want to print ;;; R0 VRAM adress NUMOUT2:MOV R0, -(SP) MOV R2, -(SP) MOV R3, -(SP) JSR PC, DIVTEN JSR PC, PRIDIGT ;print ten's place MOV R3, R2 JSR PC, PRIDIGT ;print one's place MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R0 RTS PC ;;;print 3digit number of R3 from adress (R0) ;;; param: R3 number which you want to print ;;; R0 VRAM adress NUMOUT3:MOV R0, -(SP) MOV R2, -(SP) MOV R3, -(SP) JSR PC, DIVHUND JSR PC, PRIDIGT ;print hundred's place MOV R3, R2 JSR PC, DIVTEN JSR PC, PRIDIGT ;print ten's place MOV R3, R2 JSR PC, PRIDIGT ;print one's place MOV (SP)+, R3 MOV (SP)+, R2 MOV (SP)+, R0 RTS PC ;;;print strings ;;; param: R0 VRAM adress ;;; R1 top adress of strings PRISTR: MOV R0, -(SP) MOV R1, -(SP) SUB #2., R0 1$: TST (R0)+ MOVB (R1)+, (R0) BNE 1$ MOV (SP)+, R1 MOV (SP)+, R0 RTS PC ;;;R0 = R0 + R5 * #VRAMLOOP ;;; param: R5 character ID number ;;; return: R0 VRAM adress ADDVRAM:MOV R5, -(SP) CMP R5, #MAXTEAM0NUMBER BLE 1$ SUB #16., R5 1$: TST (R5)+ 2$: SUB #2., R5 BLE 3$ ADD #VRAMLOOP, R0 BR 2$ 3$: MOV (SP)+, R5 RTS PC ;;;R0 = R0 + R5 * #VRAMLOOP ;;; param: R5 character ID number ;;; return: R0 graphic y position ADDDRAW:MOV R5, -(SP) CMP R5, #MAXTEAM0NUMBER BLE 1$ SUB #16., R5 1$: TST (R5)+ 2$: SUB #2., R5 BLE 3$ ADD #15., R0 BR 2$ 3$: MOV (SP)+, R5 RTS PC ;;;ABS(R2) ;;; param: R2 ;;; return: R2 ABSR2: MOV R3, -(SP) MOV #177777, R3 TST R2 BGE 1$ XOR R3, R2 INC R2 1$: MOV (SP)+, R3 RTS PC .END MAIN
コメント