Listing of file='DEFPOP.MAC;0A' on disk='vmedia/life-sector.ccvf'
;========================================================= ; ; DEFINE INITIAL POPULATION ; ;========================================================= ; CURSCCI EQU 8 NORMCCI EQU 2 CR EQU 13 INDIV EQU 42 ;INDIVIDUAL IN WORLD BLANK EQU 32 ; EXTRN CURSOR,ERASE,GETCH,INDEX,JMPTAB,LIMIT,OSTR EXTRN CURSLOC EXTRN BEGSC,ENDSC,CENTSC,BEGWR,ENDWR ENTRY DEFPOP DEFPOP: CALL ERASE LXI H,TOP1 CALL OSTR LXI H,BOTT1 CALL OSTR ;SET UP INITIAL POPSCREEN LXI H,CENTSC CALL CURSOR ;PUT CURSOR IN CENTER OF SCREEN DIPCHAR: CALL GETCH STA TEMP LXI H,CMNDS ;SEE IF LEGAL COMMAND CALL INDEX JNZ DIP10 ;NO, CHECK CURSOR COMMANDS LXI H,CMDADR CALL JMPTAB PCHL ;GO EXECUTE COMMAND DIP10: LDA TEMP LXI H,CURDRN ;SEE IF VALID CURSOR DIRECTION CALL INDEX JNZ DIPCHAR ;BAD DIRECTION, OR NO MOVE LXI H,CURADD CALL JMPTAB ;GET OFFSET IN REFRESH RAM MOVE: LDA TEMP ;SAVE LAST DIRECTION STA LSTDIR CALL LIMIT ;MAKE SURE NOT OFF SCREEN CNC CURSOR ;MOVE CURSOR JMP DIPCHAR ;DO IT AGAIN NOMOVE: XRA A ;SET NO LAST DIRECTION STA TEMP DEFINE: LHLD CURSLOC MOV A,M CPI INDIV JZ DEF10 MVI M,INDIV ;IF NOT ONE BEFORE, MAKE IT ONE NOW JMP DEF20 DEF10: MVI M,BLANK ;IF IT WAS ONE, ERASE IT DEF20: LDA TEMP ;SEE IF CURSOR IS TO MOVE ORA A JZ DIPCHAR LDA LSTDIR ;MOVE CURSOR IN LAST DIRECTION STA TEMP JMP DIP10 HOME: LXI H,CENTSC CALL CURSOR XRA A STA LSTDIR JMP DIPCHAR RUN: RET ;------------------------DATA------------------------------- ; ; MESSAGES ; TOP1: DB 8,6,21H,11,3,20,0 DB 'PRESS RETURN TO GENERATE AN INDIVIDUAL' DB 6,NORMCCI,239 BOTT1: DB 3,0,31,6,21H,11,3,20,31 DB 'PRESS R TO RUN' DB 6,NORMCCI,3,64,0,239 ; ; LIST OF VALID COMMANDS ; CMNDS: DB 8 ;HOME DB 13 ;DEFINE WITH NO MOVEMENT DB '.' ;DEFINE WITH NO MOVEMENT DB '=' ;DEFINE THEN MOVE CURSOR DB '0' ;DEFINE THEN MOVE CURSOR DB '5' ;HOME DB 'R' ;RUN DB 0 ; ; ADDRESSES OF LEGAL COMMANDS ; CMDADR: DW HOME DW NOMOVE DW NOMOVE DW DEFINE DW DEFINE DW HOME DW RUN ; ; LIST OF VALID CURSOR COMMANDS ; CURDRN: DB 10 ;CURSOR DOWN DB 13 ;NO MOVEMENT DB 25 ;CURSOR RIGHT DB 26 ;CURSOR LEFT DB 28 ;CURSOR UP DB '1' ;DOWN LEFT DB '2' ;DOWN DB '3' ;DOWN RIGHT DB '4' ;LEFT DB '6' ;RIGHT DB '7' ;UP LEFT DB '8' ;UP DB '9' ;UP RIGHT DB 0 ; ; OFFSETS FROM CURRENT LOCATION IN REFRESH RAM FOR ; A CURSOR MOVE COMMAND ; CURADD: DW 128 DW 0 DW 2 DW -2 DW -128 DW 126 DW 128 DW 130 DW -2 DW 2 DW -130 DW -128 DW -126 TEMP: DB 0 ;TEMPORARY STORAGE LSTDIR: DB 0 ;LAST DIRECTION END