; ; EMINIT.ASM - EMAX Initialization Routine ; ; Temporary program - Space will be reused for data storage ; LDX #INITX LDA #78 STA FILCOL ;Default fill value LDA #0 STA REDRFG STA COUNT STA COUNT+1 ;Val of 0 means do one STA MACNT STA MACNT+1 STA LITFLG ;Not in literals mode sta susout ;Output not suspended ; ; Open Keyboard and Screen ; Actually, assumes ch#0 = screen@edit ; jsr keyopn JSR EXINIT ;Mostly sets up buffer descriptors JSR CLRMAIN ;Set up buffer pointers JSR USRINI ;execute user initialization JSR TITLE JSR FULLRD ;full redraw LDA #0 STA 702 ;Lower case LDA #89 ;Just a little STA RMARGN ; offscreen ;Initialization done JMP MAIN ;Enter main loop ; keyopn: close 2 LOADIW KNAM, R0 OPEN 2, OREAD rts ; EXINIT: MOVIW KILBUF, KILLBOT ;Init MOVW KILLBOT, KILLTOP ; kill ;Clear file names and buffer data MOVIW FNAMES, TEMP2 LDY #0 CLRFNA: LDA #EOL STA (TEMP2),Y ;No file name INY BNE CLRFNA ;Set up bufbots FORB R0,0,15 ldy r0,x LDA #LOW [RAMTOP] ;Set buffer pointers STA bufbtl,Y ;at hi mem limit LDA #HIGH [RAMTOP] STA bufbth,Y lda #0 sta bflg,y NEXTB R0 ; LDA #0 STA SELBUF STA CURBUF STA KBDFG ;Not defining kbd macro STA KBDVAL ;Buf not valid STA PUSHCF ;no char pushed ; MOVC D1DEF, DEFALT ;def=D1: lda MEMLO sta TEXBOT sta bufbtl ;b0 lda MEMLO+1 sta TEXBOT+1 sta bufbth ;b0 MOVIW RAMTOP, TEXTOP RTS ; ; User Initialization facility ; ; USINRC = $6000 ; User's input ; lensav: db 0 ; USRINI: LOADIW CDEV, R0 USRIN1: OPEN 3, OREAD BMI USINEX ; Quit on any error USRIN2: LOADIW USINRC, R0 READREC 3 BMI USINEX ; Quit on any error storeb r0, lensav LDA USINRC ; Get command char CMP #'@' ; To file? BNE USRIN3 CLOSE 3 LOADIW USINRC+1, R0 JMP USRIN1 USRIN3: CMP #'X' BEQ DOAXIO CMP #'K' BEQ KEYDEF cmp #'P' beq poke CMP #'Q' BNE USRIN2 USINEX: CLOSE 3 RTS ; Now go to editor ; poke: ldy #2 ;Poke to memory - user had jsr gethex ;better know what he's doing bmi pokex sta r0+1,x dey jsr gethex bmi pokex sta r0,x jsr gethex bmi pokex sta (r0,x) pokex: jmp usrin2 ; KEYDEF: LDY #2 JSR GETHEX BMI KEYEX CMP #$60 BCS KEYEX ORA #LOW [CHTRAN] STA R0,X LDA #HIGH [CHTRAN] STA R0+1,X JSR GETHEX CMP #$65 BCS KEYEX STA (R0,X) KEYEX: JMP USRIN2 ; DOAXIO: LDY #2 JSR GETHEX BMI DOXEX STA IOCB5+ICCOM JSR GETHEX BMI DOXEX STA IOCB5+ICAX1 JSR GETHEX BMI DOXEX STA IOCB5+ICAX2 LDA #LOW [USINRC+11] STA IOCB5+ICBAL LDA #HIGH [USINRC+11] STA IOCB5+ICBAH sec lda lensav sbc #12 sta iocb5+icbll lda #0 sta iocb5+icblh TXA ! PHA LDX #$50 JSR CIOV PLA ! TAX CPY #0 BPL DOXEX JSR PRTSTAT ;Print always for now WXEP #EOL DOXEX: JMP USRIN2 ; GETHEX: LDA USINRC,Y JSR HEXCH BMI GETHXX ASL A ! ASL A ! ASL A ! ASL A STA TEMP2 INY LDA USINRC,Y JSR HEXCH BMI GETHXX ORA TEMP2 INY ! INY GETHXX: RTS ; HEXCH: CMP #'0' BCC HEX1 CMP #'9'+1 BCC HEX2 CMP #'A' BCC HEX1 CMP #'F'+1 BCS HEX1 SEC SBC #['A'-'9']-1 HEX2: SEC SBC #'0' RTS HEX1: LDY #$80 ;Flag invalid input RTS ; ;end