Mercurial > hg > Members > kono > nitros9-code
changeset 1849:72cd35a668a0
Separated level 1 and level 2 REL module sources.
author | cyouse |
---|---|
date | Fri, 01 Jul 2005 23:42:03 +0000 |
parents | 3cd265c0d704 |
children | cb874dd5c8d6 |
files | level1/modules/rel.asm level2/modules/rel.asm |
diffstat | 2 files changed, 271 insertions(+), 235 deletions(-) [+] |
line wrap: on
line diff
--- a/level1/modules/rel.asm Sun Jun 26 00:27:17 2005 +0000 +++ b/level1/modules/rel.asm Fri Jul 01 23:42:03 2005 +0000 @@ -12,6 +12,8 @@ * 2004/11/09 P.Harvey-Smith * Added code to flip Dragon Alpha into text mode on boot. * +* 2005/07/01 Charles Youse +* Removed level 2 REL code and moved it into a separate source file. nam REL ttl Relocation routine @@ -22,11 +24,7 @@ XX.Size equ 6 number of bytes before REL actually starts Offset equ Bt.Start+XX.Size - IFEQ Level-1 ScStart equ $8000 screen start in memory - ELSE -ScStart equ $8008 screen start in memory - ENDC tylg set Systm+Objct atrv set ReEnt+rev @@ -47,235 +45,6 @@ name fcs /REL/ fcb edition - IFGT Level-1 - -L001F fcb $6C MMU, IRQ, Vector page, SCS - fcb $00 map type 0 - fcb $00 no FIRQ - fcb $00 no IRQ - fdb $0900 timer - fcb $00 unused - fcb $00 unused - IFEQ TkPerSec-50 - fcb $0B 50Hz refresh, alphanumeric display, 8 lines/char row - ELSE - fcb $03 60Hz refresh, alphanumeric display, 8 lines/char row - ENDC - - IFEQ Width-80 - fcb $34 200 lines, 80 column mode, no attribute byte (monochrome) - fcb $3F white border -BOOTLINE set 11 80-col start line for BOOT/FAIL messages - ENDC - - IFEQ Width-40 - fcb $24 200 lines, 40-col, no attribute byte - fcb $3F white border -BOOTLINE set 13 40-col start line for BOOT/FAIL messages - ENDC - - IFEQ Width-32 - fcb $20 200 lines, 32-col, no attribute byte - fcb $00 black border -BOOTLINE set 13 32-col start line for BOOT/FAIL messages - ENDC - - fcb $00 display in lower 512k bank - fcb $00 vertical fine scroll set to 0 - fcb Bt.Block*4 display block where-ever - fcb $01 offset 8 bytes - fcb $00 no horizontal scroll - -crash lda #'* signal a crash error - jsr <D.BtBug - tfr b,a save error code - jsr <D.BtBug and dump this out, too - clrb - fcb $8C skip 2 bytes - -reset equ * later on, have reset different from start? -start ldb #$FF negative - do complete boot - clr >$FFDF added for OS-9 ROM Kit boots +BGP+ - -start1 orcc #IntMasks turn off IRQ's - clr >PIA0Base+3 turn off SAM IRQ's - clra make A=0 for later - IFNE H6309 - tfr 0,dp set direct page to $0000 - ELSE - tfr a,dp - ENDC - clr <D.CBStrt cold boot start: don't re-boot on reset - clr >$FFA0 map in block 0 - lds #$1FFF set stack to the end of the block - stb ,-s save status of start, $00=cold, $01=warm -* This is done so I can tell what went on in the direct page if there's -* a crash. 0(crash) 1(reset) -1(startup) - beq Cont --don't clear out direct page if it's a crash - ldb #$20 start out at $20 - tfr d,x here, too -L0072 sta ,x+ clear out the direct page - incb Boot won't be using any of it! - bne L0072 BUT RAMMER/MD DOES!!! - inc <D.Speed 0+1=1; high speed -Cont clrb --make sure B=0 - stb >$FFD9 set to high speed - leay <L001F,pcr point to the video setup data - ldx #$0090 set video mapping - deca now D=$FF00, versus STU >-$0100,x (saves 1 byte) -L0084 ldu ,y++ get the bytes - stu d,x save in the hardware - stu ,x++ and in the direct page - cmpx #$00A0 end of video hardware yet? - bcs L0084 - - IFEQ Width-32 - ldd #$1200 color 0=$12, 1=$00 i.e. black on green - ELSE - ldd #$3F00 color 0=$3F, 1=$00, i.e. black on white - ENDC - std >$FFB0 set only the first two palettes, B=$00 already - lda #Bt.Block - sta >$FFA4 map in the block - - ldx #$8000 start of the block - IFNE H6309 - ldq #Bt.Flag*65536+8 - ELSE - ldd #Bt.Flag - ENDC - tst ,s check status : 0(crash) 1(reset) -1(startup) - bmi StoreQ if NOT a crash or reset, start at the start... - cmpd ,x are they the same? - beq MoveTxt don't bother clearing the screen if it's there -StoreQ - IFNE H6309 - stq ,x otherwise save the bytes on-screen - ELSE - std ,x - ldd #8 - std 2,x - ENDC - - leax 8,x point to the start of the screen in memory - IFNE H6309 - ldw #$2000-8 clear out the entire block of memory - leau <L00E0,pcr point to $20, a space - tfm u,x+ clear out the screen - ELSE - ldy #$2000-8 - ldb #$20 -ClrLoop stb ,x+ - leay -1,y - bne ClrLoop -* ldd #$2000-8 -* ldu #$2020 -*ClrLoop stu ,x++ -* subd #$0002 -* bne ClrLoop - ENDC - -MoveTxt leau <L0011,pcr point to OS-9 Welcome Message - bsr Move1 E=$00 already from TFM above... -* 0 = crash -* 1 = reset -* -1 = startup - ldb ,s+ check state of boot - bne L00E2 if OK, continue -* U=<L0019 already from TFM above (call to L00FD) - bsr Move1 move it on-screen, E=$00 already - clr >$FF40 turn off disk drives -L00E0 bra L00E0 loop forever - -Move1 ldy ,u++ get where to put the text - IFNE H6309 -Move ldf ,u+ get the size of the block to move -L00FD tfm u+,y+ - ELSE -Move clra - ldb ,u+ - tfr d,x -L00FD lda ,u+ - sta ,y+ - leax -1,x - bne L00FD - ENDC - rts - -L0011 fdb ScStart+(BOOTLINE*Width)+((Width-L1)/2) - fcb L1 length of the text below -T1 equ * - fcc /NITROS9 BOOT/ -L1 equ *-T1 - - fdb ScStart+((BOOTLINE+2)*Width)+((Width-LFail)/2) - fcb LFail length of the 'FAILED' string -TFail fcc /FAILED/ -LFail equ *-TFail - -* saves 2 bytes over leax <L00E2,pc, cmpx #Bt.Start -L00E2 tfr pc,d get the address at which we're executing - cmpa #$26 the bootfile starts out at $2600 - bne L0101 if not at $26xx, continue with booting - ldu #$2600 else move rel, Boot, OS9p1 over - IFNE H6309 - ldw #$1200 size of track 34 boot file - ELSE - ldx #$1200 - ENDC - ldy #Bt.Start where to put it - bsr L00FD 1 byte smaller than tfm in place - jmp >Offset+L0101 - -BtDebug pshs cc,d,x save the register - orcc #IntMasks turn IRQ's off - ldb #Bt.Block block to map in - stb >$FFA0 map the boot screen into block 0 - ldx >$0002 where to put the bytes - sta ,x+ put the character on-screen - stx >$0002 save updated address - clr >$FFA0 map block 0 in again - puls cc,d,x,pc restore X and exit - -L0101 - lda #$7E RTS - sta <D.BtBug - leax <BtDebug,pc point to debug routine - stx <D.BtBug+1 - - leau <R.Crash,pcr point to D.Crash, D.CBStart - ldy #D.Crash move it over - bsr Move E=$00 from call to L00FD above. - IFNE H6309 - ldmd #$03 go to native mode, FIRQ saves all registers - inc <D.MDREG 0+1=1; set MD shadow register (clr'd from above) - ENDC - -* leax <eom,pcr point to the end of REL -* ldd M$Size,x get size of the next module -* leax d,x skip Boot, point to OS9p1 - ldx #$F000 we KNOW where OS9p1 starts in memory - ldd M$Exec,x get execution start address - jmp d,x jump to it - -* D.Crash -R.Crash fcb $10 size of the data to move over -L003F clr >$FF91 go to map type 0 - called by CC3Go from map 1 - jmp >Offset+crash - - fcb $00 warm start flag - fdb $0074 go to $0074, next routine - -* reset vector: map ROMs out and go to REL in the default DECB block map, -* which is still block $3F at the top fo memory - nop required for the ROMs to believe it's a reset vector - clr >$FFDF go to all RAM mode - jmp >Offset+reset and re-start the boot - -Pad fill $39,$127-* - - ELSE - start clr PIA0Base+3 IFNE Dragon64 @@ -343,8 +112,6 @@ fcc /BOOT/ BootMLen equ *-BootMsg - ENDC - emod eom equ * end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level2/modules/rel.asm Fri Jul 01 23:42:03 2005 +0000 @@ -0,0 +1,269 @@ +******************************************************************** +* REL - Relocation routine +* +* $Id$ +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 5r5 2003/07/31 Boisy G. Pitre +* Back ported NitrOS-9 REL to OS-9 Level Two. +* +* 2005/07/01 Charles Youse +* Created Level-2 specific REL source file. + + + nam REL + ttl Relocation routine + + IFP1 + use defsfile + ENDC + +XX.Size equ 6 number of bytes before REL actually starts +Offset equ Bt.Start+XX.Size +ScStart equ $8008 screen start in memory + +tylg set Systm+Objct +atrv set ReEnt+rev +rev set $05 +edition set 5 + +******************************************************************** +* Any changes to the next 3 lines requires changes in XX.Size, above + fcc /OS/ sync bytes + bra Start+XX.Size execution start + fdb $1205 filler bytes + +Begin mod eom,name,tylg,atrv,start,size + + org 0 +size equ . REL doesn't require any memory + +name fcs /REL/ + fcb edition + +L001F fcb $6C MMU, IRQ, Vector page, SCS + fcb $00 map type 0 + fcb $00 no FIRQ + fcb $00 no IRQ + fdb $0900 timer + fcb $00 unused + fcb $00 unused + IFEQ TkPerSec-50 + fcb $0B 50Hz refresh, alphanumeric display, 8 lines/char row + ELSE + fcb $03 60Hz refresh, alphanumeric display, 8 lines/char row + ENDC + + IFEQ Width-80 + fcb $34 200 lines, 80 column mode, no attribute byte (monochrome) + fcb $3F white border +BOOTLINE set 11 80-col start line for BOOT/FAIL messages + ENDC + + IFEQ Width-40 + fcb $24 200 lines, 40-col, no attribute byte + fcb $3F white border +BOOTLINE set 13 40-col start line for BOOT/FAIL messages + ENDC + + IFEQ Width-32 + fcb $20 200 lines, 32-col, no attribute byte + fcb $00 black border +BOOTLINE set 13 32-col start line for BOOT/FAIL messages + ENDC + + fcb $00 display in lower 512k bank + fcb $00 vertical fine scroll set to 0 + fcb Bt.Block*4 display block where-ever + fcb $01 offset 8 bytes + fcb $00 no horizontal scroll + +crash lda #'* signal a crash error + jsr <D.BtBug + tfr b,a save error code + jsr <D.BtBug and dump this out, too + clrb + fcb $8C skip 2 bytes + +reset equ * later on, have reset different from start? +start ldb #$FF negative - do complete boot + clr >$FFDF added for OS-9 ROM Kit boots +BGP+ + +start1 orcc #IntMasks turn off IRQ's + clr >PIA0Base+3 turn off SAM IRQ's + clra make A=0 for later + tfr a,dp set direct page to $0000 + clr <D.CBStrt cold boot start: don't re-boot on reset + clr >$FFA0 map in block 0 + lds #$1FFF set stack to the end of the block + stb ,-s save status of start, $00=cold, $01=warm +* This is done so I can tell what went on in the direct page if there's +* a crash. 0(crash) 1(reset) -1(startup) + beq Cont --don't clear out direct page if it's a crash + ldb #$20 start out at $20 + tfr d,x here, too +L0072 sta ,x+ clear out the direct page + incb Boot won't be using any of it! + bne L0072 BUT RAMMER/MD DOES!!! + inc <D.Speed 0+1=1; high speed +Cont clrb --make sure B=0 + stb >$FFD9 set to high speed + leay <L001F,pcr point to the video setup data + ldx #$0090 set video mapping + deca now D=$FF00, versus STU >-$0100,x (saves 1 byte) +L0084 ldu ,y++ get the bytes + stu d,x save in the hardware + stu ,x++ and in the direct page + cmpx #$00A0 end of video hardware yet? + bcs L0084 + + IFEQ Width-32 + ldd #$1200 color 0=$12, 1=$00 i.e. black on green + ELSE + ldd #$3F00 color 0=$3F, 1=$00, i.e. black on white + ENDC + std >$FFB0 set only the first two palettes, B=$00 already + lda #Bt.Block + sta >$FFA4 map in the block + + ldx #$8000 start of the block + IFNE H6309 + ldq #Bt.Flag*65536+8 + ELSE + ldd #Bt.Flag + ENDC + tst ,s check status : 0(crash) 1(reset) -1(startup) + bmi StoreQ if NOT a crash or reset, start at the start... + cmpd ,x are they the same? + beq MoveTxt don't bother clearing the screen if it's there +StoreQ + IFNE H6309 + stq ,x otherwise save the bytes on-screen + ELSE + std ,x + ldd #8 + std 2,x + ENDC + + leax 8,x point to the start of the screen in memory + IFNE H6309 + ldw #$2000-8 clear out the entire block of memory + leau <L00E0,pcr point to $20, a space + tfm u,x+ clear out the screen + ELSE + ldy #$2000-8 + ldb #$20 +ClrLoop stb ,x+ + leay -1,y + bne ClrLoop +* ldd #$2000-8 +* ldu #$2020 +*ClrLoop stu ,x++ +* subd #$0002 +* bne ClrLoop + ENDC + +MoveTxt leau <L0011,pcr point to OS-9 Welcome Message + bsr Move1 E=$00 already from TFM above... +* 0 = crash +* 1 = reset +* -1 = startup + ldb ,s+ check state of boot + bne L00E2 if OK, continue +* U=<L0019 already from TFM above (call to L00FD) + bsr Move1 move it on-screen, E=$00 already + clr >$FF40 turn off disk drives +L00E0 bra L00E0 loop forever + +Move1 ldy ,u++ get where to put the text + IFNE H6309 +Move ldf ,u+ get the size of the block to move +L00FD tfm u+,y+ + ELSE +Move clra + ldb ,u+ + tfr d,x +L00FD lda ,u+ + sta ,y+ + leax -1,x + bne L00FD + ENDC + rts + +L0011 fdb ScStart+(BOOTLINE*Width)+((Width-L1)/2) + fcb L1 length of the text below +T1 equ * + fcc /NITROS9 BOOT/ +L1 equ *-T1 + + fdb ScStart+((BOOTLINE+2)*Width)+((Width-LFail)/2) + fcb LFail length of the 'FAILED' string +TFail fcc /FAILED/ +LFail equ *-TFail + +* saves 2 bytes over leax <L00E2,pc, cmpx #Bt.Start +L00E2 tfr pc,d get the address at which we're executing + cmpa #$26 the bootfile starts out at $2600 + bne L0101 if not at $26xx, continue with booting + ldu #$2600 else move rel, Boot, OS9p1 over + IFNE H6309 + ldw #$1200 size of track 34 boot file + ELSE + ldx #$1200 + ENDC + ldy #Bt.Start where to put it + bsr L00FD 1 byte smaller than tfm in place + jmp >Offset+L0101 + +BtDebug pshs cc,d,x save the register + orcc #IntMasks turn IRQ's off + ldb #Bt.Block block to map in + stb >$FFA0 map the boot screen into block 0 + ldx >$0002 where to put the bytes + sta ,x+ put the character on-screen + stx >$0002 save updated address + clr >$FFA0 map block 0 in again + puls cc,d,x,pc restore X and exit + +L0101 + lda #$7E RTS + sta <D.BtBug + leax <BtDebug,pc point to debug routine + stx <D.BtBug+1 + + leau <R.Crash,pcr point to D.Crash, D.CBStart + ldy #D.Crash move it over + bsr Move E=$00 from call to L00FD above. + IFNE H6309 + ldmd #$03 go to native mode, FIRQ saves all registers + inc <D.MDREG 0+1=1; set MD shadow register (clr'd from above) + ENDC + +* leax <eom,pcr point to the end of REL +* ldd M$Size,x get size of the next module +* leax d,x skip Boot, point to OS9p1 + ldx #$F000 we KNOW where OS9p1 starts in memory + ldd M$Exec,x get execution start address + jmp d,x jump to it + +* D.Crash +R.Crash fcb $10 size of the data to move over +L003F clr >$FF91 go to map type 0 - called by CC3Go from map 1 + jmp >Offset+crash + + fcb $00 warm start flag + fdb $0074 go to $0074, next routine + +* reset vector: map ROMs out and go to REL in the default DECB block map, +* which is still block $3F at the top fo memory + nop required for the ROMs to believe it's a reset vector + clr >$FFDF go to all RAM mode + jmp >Offset+reset and re-start the boot + +Pad fill $39,$127-* + + emod +eom equ * + end