.PAGE 'INITIALIZATION' ; START - SYSTEM RESET ; WILL GOTO ROM AT $8000... ; IF LOCS $8004-$8008 ; = 'CBM80' ; ^^^ > THESE HAVE MSB SET ; KERNAL EXPECTS... ; $8000- .WORD INITILIZE (HARD START) ; $8002- .WORD PANIC (WARM START) ; ... ELSE BASIC SYSTEM USED ; ******************TESTING ONLY*************** ; USE AUTO DISK/CASSETTE LOAD WHEN DEVELOPED... ; START LDX #$FF SEI TXS CLD JSR A0INT ;TEST FOR $A0 ROM IN BNE START1 JMP ($8000) ; GO INIT AS $A000 ROM WANTS START1 STX VICREG+22 ;SET UP REFRESH (.X=<5) JSR IOINIT ;GO INITILIZE I/O DEVICES JSR RAMTAS ;GO RAM TEST AND SET JSR RESTOR ;GO SET UP OS VECTORS ; JSR PCINT ;GO INITILIZE SCREEN NEWXXX CLI ;INTERRUPTS OKAY NOW JMP ($A000) ;GO TO BASIC SYSTEM .SKI 4 ; A0INT - TEST FOR AN $8000 ROM ; RETURNS Z - $8000 IN ; A0INT LDX #TBLA0E-TBLA0R ;CHECK FOR $8000 A0IN1 LDA TBLA0R-1,X CMP $8004-1,X BNE A0IN2 DEX BNE A0IN1 A0IN2 RTS ; TBLA0R .BYT $C3,$C2,$CD,'80' ;..CBM80.. TBLA0E .SKI 4 ; RESTOR - SET KERNAL INDIRECTS AND VECTORS (SYSTEM) ; RESTOR LDX #VECTSS CLC ; ; VECTOR - SET KERNAL INDIRECT AND VECTORS (USER) ; VECTOR STX TMP2 STY TMP2+1 LDY #VECTSE-VECTSS-1 MOVOS1 LDA CINV,Y ;GET FROM STORAGE BCS MOVOS2 ;C...WANT STORAGE TO USER LDA (TMP2)Y ;...WANT USER TO STORAGE MOVOS2 STA (TMP2)Y ;PUT IN USER STA CINV,Y ;PUT IN STORAGE DEY BPL MOVOS1 RTS ; VECTSS .WOR KEY,TIMB,NNMI .WOR NOPEN,NCLOSE,NCHKIN .WOR NCKOUT,NCLRCH,NBASIN .WOR NBSOUT,NSTOP,NGETIN .WOR NCLALL,TIMB ;GOTO BREAK ON A USRCMD JMP .WOR NLOAD,NSAVE VECTSE .PAGE 'INITILIZE CODE' ; RAMTAS - MEMORY SIZE CHECK AND SET ; RAMTAS LDA #0 ;ZERO LOW MEMORY TAY ;START AT 0002 RAMTZ0 STA $0002,Y ;ZERO PAGE STA $0200,Y ;USER BUFFERS AND VARS STA $0300,Y ;SYSTEM SPACE AND USER SPACE INY BNE RAMTZ0 ; ;ALLOCATE TAPE BUFFERS ; LDX #TBUFFR STX TAPE1 STY TAPE1+1 ; ; SET TOP OF MEMORY ; RAMTBT TAY ;MOVE $00 TO .Y LDA #3 ;SET HIGH INITAL INDEX STA TMP0+1 ; RAMTZ1 INC TMP0+1 ;MOVE INDEX THRU MEMORY RAMTZ2 LDA (TMP0)Y ;GET PRESENT DATA TAX ;SAVE IN .X LDA #$55 ;DO A $55,$AA TEST STA (TMP0)Y CMP (TMP0)Y BNE SIZE ROL A STA (TMP0)Y CMP (TMP0)Y BNE SIZE TXA ;RESTORE OLD DATA STA (TMP0)Y INY BNE RAMTZ2 BEQ RAMTZ1 ; SIZE TYA ;SET TOP OF MEMORY TAX LDY TMP0+1 CLC JSR SETTOP LDA #$08 ;SET BOTTOM OF MEMORY STA MEMSTR+1 ;ALWAYS AT $0800 LDA #$04 ;SCREEN ALWAYS AT $400 STA HIBASE ;SET BASE OF SCREEN RTS .SKI 3 BSIT .WOR WRTZ,WRTN,KEY,READ ;TABLE OF INDIRECTS FOR CASSETTE IRQ'S .PAG 'INITILIZE CODE' ; IOINIT - INITILIZE IO DEVICES ; IOINIT LDA #$7F ;KILL INTERRUPTS STA D1ICR STA D2ICR STA D1PRA ;TURN ON STOP KEY LDA #%00001000 ;SHUT OFF TIMERS STA D1CRA STA D2CRA STA D1CRB STA D2CRB ; CONFIGURE PORTS LDX #$00 ;SET UP KEYBOARD INPUTS STX D1DDRB ;KEYBOARD INPUTS STX D2DDRB ;USER PORT (NO RS-232) STX SIDREG+24 ;TURN OFF SID DEX STX D1DDRA ;KEYBOARD OUTPUTS LDA #%00000111 ;SET SERIAL/VA14/15 (CLKHI) STA D2PRA LDA #%00111111 ;SET SERIAL IN/OUT, VA14/15OUT STA D2DDRA ; ; SET UP THE 6510 LINES ; LDA #%11100111 ;MOTOR ON, HIRAM LOWRAM CHAREN HIGH STA R6510 LDA #%00101111 ;MTR OUT,SW IN,WR OUT,CONTROL OUT STA D6510 ; ;JSR CLKHI ;CLKHI TO RELEASE SERIAL DEVICES ^ ; IOKEYS LDA PALNTS ;PAL OR NTSC BEQ IO010 ;NTSC LDA #SIXTYP JMP IO020 IO010 LDA #SIXTY IO020 STA D1T1H JMP PIOKEY ;PATCH IOKEYS ; LDA #$81 ;ENABLE T1 IRQ'S ; STA D1ICR ; LDA D1CRA ; AND #$80 ;SAVE ONLY TOD BIT ; ORA #%00010001 ;ENABLE TIMER1 ; STA D1CRA ; JMP CLKLO ;RELEASE THE CLOCK LINE ; ; SIXTY HERTZ VALUES ; SIXTY = 17045 ;NTSC SIXTYP = 16421 ;PAL .PAGE 'INIT - SYS SUBS' SETNAM STA FNLEN STX FNADR STY FNADR+1 RTS .SKI 5 SETLFS STA LA STX FA STY SA RTS .SKI 5 READSS LDA FA ;SEE WHICH DEVICES' TO READ CMP #2 ;IS IT RS-232? BNE READST ;NO...READ SERIAL/CASS LDA RSSTAT ;YES...GET RS-232 UP PHA LDA #00 ;CLEAR RS232 STATUS WHEN READ STA RSSTAT PLA RTS SETMSG STA MSGFLG READST LDA STATUS UDST ORA STATUS STA STATUS RTS .SKI 5 SETTMO STA TIMOUT RTS .SKI 5 MEMTOP BCC SETTOP ; ;CARRY SET--READ TOP OF MEMORY ; GETTOP LDX MEMSIZ LDY MEMSIZ+1 ; ;CARRY CLEAR--SET TOP OF MEMORY ; SETTOP STX MEMSIZ STY MEMSIZ+1 RTS .SKI 5 ;MANAGE BOTTOM OF MEMORY ; MEMBOT BCC SETBOT ; ;CARRY SET--READ BOTTOM OF MEMORY ; LDX MEMSTR LDY MEMSTR+1 ; ;CARRY CLEAR--SET BOTTOM OF MEMORY ; SETBOT STX MEMSTR STY MEMSTR+1 RTS .END ; RSR 8/5/80 CHANGE IO STRUCTURE ; RSR 8/15/80 ADD MEMORY TEST ; RSR 8/21/80 CHANGE I/O FOR MOD ; RSR 8/25/80 CHANGE I/O FOR MOD2 ; RSR 8/29/80 CHANGE RAMTEST FOR HARDWARE MISTAKE ; RSR 9/22/80 CHANGE SO RAM HANG RS232 STATUS READ ; RSR 5/12/82 CHANGE START1 ORDER TO REMOVE DISK PROBLEM ; RSR 6/21/82 MODIFY FOR UNIVERSAL