09 .OPT NO LIST›10 ; SAVE #D1:INIT.M65›20 ;›30 ;›40 ; LOAD #D1:DISKOPS.M65›50 ;›60 ; *= $C290›70 LIST›80 .PAGE "Initiation"›49808 RESET SEI Perform warm›49809 LDA TRIG3 start unless›49812 CMP GINTLK cart pulled or›49815 BNE POWRUP inserted›49817 ROR A›49818 BCC ?NOCART›49820 JSR ?CARTCSUM Check cart›49823 BNE POWRUP boot if invalid›49825 ?NOCART LDA COLDST Boot if›49828 BNE POWRUP flag non-0›49830 LDA #$FF value for warmst›49832 BNE ?SETRAM Go always›49834 RESET1 SEI exec reset key›49835 LDX #$8C or vector›49837 ?DELAY DEY Nested delay›49838 BNE ?DELAY loops›49840 DEX›49841 BNE ?DELAY›49843 LDA PUPBT1 Check ram›49846 CMP #$5C integrity›49848 BNE POWRUP›49850 LDA PUPBT2›49853 CMP #$93›49855 BNE POWRUP›49857 LDA PUPBT3›49860 CMP #$25›49862 BEQ RESET Select warm/cold›49864 POWRUP LDA #0 Exec cold start›49866 ?SETRAM STA WARMST Preset ram›49868 SEI for cold or›49869 CLD warm start›49870 LDX #$FF continuation›49872 TXS›49873 JSR ?ANYCART Init cart or›49876 LDA #1 basic or kill›49878 STA NGFLAG basic›49880 LDA WARMST›49882 BNE ?CLRLORAM Skip on reset›49884 LDA #0 Test and clear›49886 LDY #8 all ram except›49888 STA RAMLO first 8 bytes›49890 STA RAMHI›49892 ?TESTRAM LDA #$FF›49894 STA (RAMLO),Y›49896 CMP (RAMLO),Y›49898 BEQ ?CLRRAM›49900 LSR NGFLAG›49902 ?CLRRAM LDA #0›49904 STA (RAMLO),Y›49906 CMP (RAMLO),Y›49908 BEQ ?NXTBYT›49910 LSR NGFLAG›49912 ?NXTBYT INY›49913 BNE ?TESTRAM›49915 INC RAMHI›49917 LDX RAMHI›49919 CPX TRAMSZ›49921 BNE ?TESTRAM›49923 LDA # BYE›49929 STA DOSVEC+1›49931 LDA PORTB›49934 AND #$7F Enable self›49936 STA PORTB test rom›49939 JSR VFR Check first 8k›49942 BCS ?ROMERR of rom›49944 JSR VSR and 2nd›49947 BCC ?ROMTESTDONE›49949 ?ROMERR LSR NGFLAG Flag err›49951 ?ROMTESTDONE LDA PORTB›49954 ORA #$80 Kill self›49956 STA PORTB test rom›49959 LDA #$FF›49961 STA COLDST›49964 BNE ?SETBFLG Go always›49966 ?CLRLORAM LDX #0›49968 LDA DERRF E: opened ok?›49971 BEQ ?CLRP23›49973 ASTX APPMHI No, show no›49976 ASTX APPMHI+1 memory›49979 TXA›49980 ?CLRP23 STA VDSLST,X Clear all›49983 CPX #$ED of page 2 and›49985 BCS ?SKIPFLGS page 3 except›49987 STA DDEVIC,X basicf, etc.›49990 ?SKIPFLGS DEX›49991 BNE ?CLRP23›49993 LDX #16 Clear $11-$7F›49995 ?CLRZ STA LNFLG,X›49997 INX›49998 BPL ?CLRZ›50000 ?SETBFLG LDX #0›50002 LDA PORTB›50005 AND #2 Check bit 1›50007 BEQ ?SETBFLG2 Go if Basic on›50009 INX else flag it off›50010 ?SETBFLG2 STX BASICF›50013 LDA #$5C Set check values›50015 STA PUPBT1›50018 LDA #$93›50020 STA PUPBT2›50023 LDA #$25›50025 STA PUPBT3›50028 LDA #2 Margins›50030 STA LMARGN›50032 LDA #39›50034 STA RMARGN›50036 LDA PAL Keyboard for›50039 AND #$0E pal or ntsc?›50041 BNE ?SETNTSC›50043 LDA #5 Set for pal›50045 LDX #1›50047 LDY #40›50049 BNE ?SETKBD Go always›50051 ?SETNTSC LDA #6 Set for ntsc›50053 LDX #0›50055 LDY #48›50057 ?SETKBD STA KEYREP›50060 STX PALNTS›50062 STY KRPDEL›50065 LDX #37›50067 ?VLOOP7 LDA ?INTVECS,X Copy›50070 STA VDSLST,X vectors›50073 DEX›50074 BPL ?VLOOP7›50076 LDX #14›50078 ?HTLOOP LDA ?DEVTABLE,X copy›50081 STA HATABS,X hatabs›50084 DEX›50085 BPL ?HTLOOP›50087 JSR ?INITRAM Init devices›50090 CLI›50091 LDA NGFLAG Bad ram?›50093 BNE ?RAMOK Go if not›50095 LDA PORTB Enable self›50098 AND #$7F test rOM›50100 STA PORTB›50103 LDA #2 normal chars›50105 STA CHACT and cursor›50108 LDA # >CHARSET1›50110 STA CHBAS›50113 JMP XRAMERR To selftest›50116 ?RAMOK LDX #0›50118 STX TRAMSZ›50120 LDX RAMSIZ Look for cart›50123 CPX #$B0›50125 BCS ?OPNEDITOR›50127 LDX CARTFLG›50130 BNE ?OPNEDITOR›50132 INC TRAMSZ Got one, calc›50134 JSR ?CARTCSUM csum and›50137 JSR ?INITCART init it›50140 ?OPNEDITOR LDA #3 Open E:›50142 LDX #0›50144 STA ICCOM,X›50147 LDA # ENAME›50154 STA ICBAH,X›50157 LDA #12›50159 STA ICAX1,X›50162 JSR CIOV›50165 BPL ?EWAIT›50167 JMP RESET1 Cio error›50170 ?EWAIT INX Nested delay›50171 BNE ?EWAIT loops›50173 INY›50174 BPL ?EWAIT›50176 JSR BOOTTAPE Try tape/disk boot›50179 LDA TRAMSZ›50181 BEQ ?NOCARTRIDGE›50183 LDA CARTOPT Option byte b0›50186 ROR A clear if no disk›50187 BCC ?NODSKWITHCART boot›50188 ; jsr boot or jsr (dosini)›50189 ?NOCARTRIDGE JSR INITDOS›50192 JSR PHR Init pd handler›50195 ?NODSKWITHCART LDA #0›50197 STA COLDST›50200 LDA TRAMSZ›50202 BEQ ?GOFMS›50204 LDA CARTOPT›50207 AND #4›50209 BEQ ?GOFMS›50211 JMP (CARTRUN)›50214 ?GOFMS JMP (DOSVEC)›50217 ?INITCART JMP (CARTINI)›50220 CLC Not referenced›50221 RTS›50222 ?DEVTABLE .BYTE 'P›50223 .WORD PRINTV›50225 .BYTE 'C›50226 .WORD CASETV›50228 .BYTE 'E›50229 .WORD EDITRV›50231 .BYTE 'S›50232 .WORD SCRENV›50234 .BYTE 'K›50235 .WORD KEYBDV›50237 MSGBERR .BYTE "BOOT ERROR",155›50248 ENAME .BYTE "E:",155›50251 ?INTVECS .WORD RTI Vdslst›50253 .WORD ?PLARTI Vprced›50255 .WORD ?PLARTI Vinter›50257 .WORD ?PLARTI vbreak›50259 .WORD KIR Vkeybd›50261 .WORD XSERIN Vserin›50263 .WORD XSEROUT Vseror›50265 .WORD XSEROC Vseroc›50267 .WORD ?PLARTI Vtimr1›50269 .WORD ?PLARTI Vtimr2›50271 .WORD ?PLARTI Vtimr4›50273 .WORD ?REGIRQ Vimirq›50275 .WORD 0 Cdtmv1›50277 .WORD 0 Cdtmv2›50279 .WORD 0 Cdtmv3›50281 .WORD 0 Cdtmv4›50283 .WORD 0 Cdtmv5›50285 .WORD DOSYSBV Vvblki›50287 .WORD DOXITBV Vvblkd›50289 ?ANYCART LDA TRIG3›50292 ROR A›50293 BCC ?BASICOFF›50295 LDA CARTFLG›50298 BNE ?BASICOFF›50300 LDA CARTOPT If -ve cart is›50303 BPL ?BASICOFF diagnostic›50305 JMP (CARTINI)›50308 ?BASICOFF JSR ?INIHDWARE›50311 LDA PORTB Kill basic rom›50314 ORA #2›50316 STA PORTB›50319 LDA WARMST If cold start›50321 BEQ ?OPTION? go check option›50323 LDA BASICF If on reset see›50326 BNE ?RAMTOP? if it should be›50328 BEQ ?ENABLEBASIC on›50330 ?OPTION? LDA CONSOL›50333 AND #4›50335 BEQ ?RAMTOP?›50337 ?ENABLEBASIC LDA PORTB›50340 AND #$FD›50342 STA PORTB›50345 ?RAMTOP? LDA #0 Find top of›50347 TAY ram›50348 STA RAMHI›50350 LDA #$28›50352 STA RAMHI+1 ramhi aka tramsz›50354 ?NEXTPG LDA (RAMHI),Y Read 1st›50356 EOR #$FF byte. Toggle›50358 STA (RAMHI),Y and compare›50360 CMP (RAMHI),Y›50362 BNE ?TOPFOUND›50364 EOR #$FF Restore byte›50366 STA (RAMHI),Y Compare again›50368 CMP (RAMHI),Y›50370 BNE ?TOPFOUND›50372 INC RAMHI+1›50374 BNE ?NEXTPG›50376 ?TOPFOUND RTS›50377 ?CARTCSUM LDA #0 Calculate›50379 TAX cartridge C/sum›50380 CLC and exit with›50381 ?CSLOOP ADC $BFF0,X ; s valid›50384 INX›50385 BNE ?CSLOOP›50387 CMP CARTCK›50390 STA CARTCK›50393 RTS›50394 ?INIHDWARE LDA #0 Hardware›50396 TAX init routines›50397 STA PBCTL›50400 ?HZLOOP STA HPOSP0,X Write 0›50403 STA DMACTL,X to all regs in›50406 STA AUDF1,X gtia pokey and›50409 CPX #1 antic but skip›50411 BEQ ?SKIPPIA portb›50413 STA PORTA,X›50416 ?SKIPPIA INX›50417 BNE ?HZLOOP›50419 LDA #$3C›50421 STA PBCTL Set portB›50424 LDA #$FF all pins to›50426 STA PORTB output›50429 LDA #$38 Set ports for›50431 STA PACTL direction›50434 STA PBCTL control (b3=1)›50437 LDA #0›50439 STA PORTA All input›50442 LDA #$FF›50444 STA PORTB All output›50447 LDA #$3C Ports as regs›50449 STA PACTL Motor off›50452 STA PBCTL Periph ctl id›50455 LDA PORTB Clear any ints›50458 LDA PORTA›50461 LDA #$22 Set Pokey for›50463 STA SKCTL kbd & clock out›50466 LDA #$A0 Set channels›50468 STA AUDC3 3&4 to pure tone›50471 STA AUDC4›50474 LDA #$28 Join ch 3/4›50476 STA AUDCTL at 1.79mhz›50479 LDA #$FF Clear serout›50481 STA SEROUT›50484 RTS›50485 ?INITRAM DEC BRKKEY Software›50487 LDA # ?XBRKKY›50494 STA BRKKY+1›50497 LDA TRAMSZ›50499 STA RAMSIZ›50502 STA MEMTOP+1›50505 LDA #0›50507 STA MEMTOP›50510 LDA # <$0700›50512 STA MEMLO›50515 LDA # >$0700›50517 STA MEMLO+1›50520 JSR EDITRV+12 Init devices›50523 JSR SCRENV+12›50526 JSR KEYBDV+12›50529 JSR PRINTV+12›50532 JSR CASETV+12›50535 JSR CIOINV Init i/o›50538 JSR SIOINV handlers›50541 JSR INTINV›50544 JSR DISKIV›50547 LDA # PDEVID routine›50554 STA VPIRQ+1›50557 JSR GPDVV+12 Init any found›50560 LDA CONSOL Check start key›50563 AND #1 and set flag for›50565 EOR #1 cassette boot.›50567 STA CKEY Is 1 for tape›50570 RTS›