Mercurial > hg > Members > kono > nitros9-code
view level1/modules/rominfo.asm @ 2958:77500452de1c
bootman: Rename assembler files to .as
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Sun, 09 Feb 2014 22:53:29 +0100 |
parents | e93ace49362e |
children | 03ae05578ec0 |
line wrap: on
line source
******************************************************************** * ROMInfo - NitrOS-9 ROM Relocation Code * * $Id: rominfo.asm,v 1.1 2004/04/05 03:34:39 boisy Exp $ * * Edt/Rev YYYY/MM/DD Modified by * Comment * ------------------------------------------------------------------ * 1 1998/05/03 Boisy G. Pitre * Created for the Coyota project and later productized. nam ROMInfo ttl NitrOS-9 ROM Relocation Code ifp1 use defsfile endc tylg set Systm+Objct atrv set ReEnt+rev rev set $01 edition set 1 * Tested (for level 1) on XRoar * The ROMPak must be autostarting by firing FIRQ * IFNE ROMPak jmp $C000+start+3 Offset 3 due to this line PakOffs equ $C000-$8000 ELSE PakOffs equ 0 ENDC mod eom,name,tylg,atrv,start,size size equ . name fcs /ROMInfo/ fcb edition start equ * IFGT Level-1 * NitrOS-9 Level 2 - CoCo 3 * Bring the CoCo 3 to sanity orcc #IntMasks disable FIRQ, IRQ clr $FFD9 go into fast mode lda #$0A CC3 Mode, No MMU, 32K Int. ROM sta $FF90 clr $FFDE RAM/ROM mode (upper 16K ROM at $C000) * Setup MMU ldx #DAT.Regs leay MMUTbl,pcr IFNE H6309 ldw #16 tfm y+,x+ ELSE ldb #16 MMULoop lda ,y+ sta ,x+ decb bne MMULoop ENDC * Set up CoCo 3 Video Registers at $FF98-$FF9F ldd #$0000 std $FF98 std $FF9A std $FF9E ldd #$0FE0 std $FF9C * Initialize PIAs ldx #PIA1Base RG - Initialize the PIA 1 ldd #$FF34 clr 1,x clr 3,x deca sta ,x lda #$F8 sta 2,x stb 1,x stb 3,x clr 2,x lda #$02 sta ,x lda #$FF RG - Initialize the PIA 0 ldx #PIA0Base clr 1,x clr 3,x clr ,x sta 2,x stb 1,x stb 3,x tfr b,dp clr 2,x lda #$CA RG - CC2 mode, MMU, constant DRAM, 32K internal ROM sta $FF90 bra RelROM * MMU MMUTbl fcb $38,$39,$3A,$3B,$3C,$3D,$3E,$3F fcb $38,$39,$3A,$3B,$3C,$3D,$3E,$3F * ROM relocation code -- copies the boot track into $2600 and JMPs to it RelROM ldx #$EC00 src address (boot track in ROM) ldy #$2600 dst address (RAM) IFNE H6309 ldw #$1200 tfm x+,y+ ELSE copyloop ldd ,x++ get 2 bytes from src std ,y++ put 2 bytes to dst cmpx #$EC00+$1200 at end? blo copyloop nope, copy more... ENDC jmp $2602 jump to OS rel code ELSE * NitrOS-9 Level 1 - CoCo 1/2 ldx #PIA1Base PIA1 clr -3,x clear PIA0 Control Register A clr -1,x clear PIA0 Control Register B clr -4,x set PIA0 side A to input ldd #$FF34 sta -2,x set PIA0 side B to output stb -3,x enable PIA0 peripheral reg, disable PIA0 stb -1,x MPU interrupts, set CA2, CA1 to outputs clr 1,x $FF20 = DDR, motoroff clr 3,x $FF22 = DDR, sound disabled deca A = $FE after deca sta ,x bits 1-7 are outputs, bit 0 is input on PIA1 side A lda #$F8 sta 2,x bits 0-2 are inputs, bits 3-7 are outputs on B side stb 1,x enable peripheral registers, disable PIA1 MPU stb 3,x interrupts and set CA2, CB2 as outputs clr 2,x set 6847 mode to alphanumeric ldb #$02 stb ,x make RS-232 output marking clrb tfr b,dp B = 0 ldb #$04 clr -2,x bitb 2,x IFNE ROMPak lda #$36 inhibit ROMPak autostart FIRQ ELSE lda #$37 ENDC sta PIA1Base+3 lda PIA0Base+3 ora #$01 sta PIA0Base+3 lda PIA1Base+2 anda #$07 sta PIA1Base+2 * VDG Mode sta $FFC0 sta $FFC2 sta $FFC4 * 64K DRAM (M0=0, M1=1) sta $FFDA RESET M0 sta $FFDD SET M1 * ROM relocation code -- copies the boot track into $2600 RelROM ldx #$AE00+PakOffs src address (ROM) ldy #$2600 dst address (RAM) IFNE H6309 ldw #$1200 tfm x+,y+ ELSE copyloop ldd ,x++ get 2 bytes from src std ,y++ put 2 bytes to dst cmpx #$AE00+$1200+PakOffs at end? bne copyloop nope, copy more... ENDC * BOOT relocation code -- copies the bootfile into $2600+$1200 RelBOOT ldx #$8000+PakOffs ldy #$2600+$1200 IFNE H6309 ldw #$2E00 tfm x+,y+ ELSE cpy2loop ldd ,x++ std ,y++ cmpx #$8000+$2E00+PakOffs blo cpy2loop ENDC jmp $2602 jump to OS rel code ENDC emod eom equ * end