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  Default
49925  STA DOSVEC  dosvec
49927  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
50149  STA ICBAL,X
50152  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 and ram
50489  STA BRKKY  init
50492  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 point vpirq to
50549  STA VPIRQ  pll device id
50552  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
