TITLE 'SYSTEM EQUATES'›SUBTTL 'File SYSEQU.AMA'›;›; Outputs a list of referenced system equates›; to the source-code file.›;›PROC›SYSEQULDA #LOW STR1 ;Get comment string›STA STRACC›LDA #HIGH STR1›STA STRACC+1›LDX #0›JSR WRTSTR ;Output it›LDA #EOL›STA LINEBF,X›JSR RECOUT›LDX #0›:LP1LDA PAGTAB,X;Identify a system page›STA SYSBAS›INX›LDA PAGTAB,X›STA SYSBAS+1›INX›LDA PAGTAB,X›STA PAGNO;Page nr we are on›INX›LDA PAGTAB,X›STA PAGTOP;How many labels on page›INX›INX›TXA›PHA;Save X›; Now we have the system page base address in SYSBAS(2),›; page number in PAGNO, page length in PAGTOP,›; and X (now the LINEBF pointer) saved on the stack.›JSR :PAGEQ;Do equates for this page›PLA›TAX;Recover X›CPX #[PTBEND-PAGTAB]›BCC :LP1;More pages to do›LDA #LOW STR2;"End of equates" comment›STA STRACC›LDA #HIGH STR2›STA STRACC+1›LDX #0›JSR WRTSTR;Output it›LDA #EOL›STA LINEBF,X›JSR RECOUT›RTS›;›; Private subroutine to output equates for 1 page›;›; Enter SYSBAS(2)=system page base address›; No exit parameters. No registers guaranteed.›;›:PAGEQLDA #0 ;Start of page›STA ADRBUF›:LP2JSR ADRSYS;Get label address›LDY #0›LDA (SYSACC),Y ;Hi bit indicates "ref'd"›BPL :NOTRF;Not referenced›JSR :SYSEQ;Ref'd, output equate›JSR RECOUT›:NOTRFINC ADRBUF›BEQ :PQXIT›LDA ADRBUF›CMP PAGTOP;End of page?›BCC :LP2;No, do another›BEQ :LP2›:PQXITRTS;Yes, page done›;›; Private subroutine to output one system equate›;›; EnterSYSACC(2)=pointer to label›; PAGTAB(4) reflects present system page›;(In SYSBAS,PAGNO)›;ADRBUF=lo byte of system address›;›; Exit LINEBF=one system equate pseudo-op›;›:SYSEQLDY #5›:LP3LDA (SYSACC),Y›STA LINEBF,Y›DEY›BPL :LP3›LDY #0;Clear ref bit on 1st char›LDA LINEBF,Y›AND #$7F›STA LINEBF,Y›LDA #' ';Some assemblers need this blank›STA LINEBF+6›LDA #'='›STA LINEBF+7;Always leaves at least 1 blank›LDA #' '›STA LINEBF+8›LDA #'$'›STA LINEBF+9›LDX #10;Set LINEBF pointer›LDA PAGNO ;Hi byte of address›BEQ :ZP;Don't output hi byte if p.0›JSR WRTHEX;Output one byte as ASCII›:ZPLDA ADRBUF;Lo byte of address›JSR WRTHEX›LDA #EOL›STA LINEBF,X›RTS›EPROC›;›; Table of page base addresses and lengths ›; for system labels›;›PAGTABDW SP0›DB 0,$7F,$FF›DW SP2›DB 2,$FF,$FF›DW SP3›DB 3,$4F,$FF›DW SPD0R›DB $D0,$13,1›DW SPD0W›DB $D0,$1F,0›DW SPD2R›DB $D2,$0F,1›DW SPD2W›DB $D2,$0F,0›DW SPD4›DB $D4,$0F,$FF›DW SPE4›DB $E4,$7F,$FF›PTBEND= *›;››