# HG changeset patch # User Shinji KONO # Date 1531654195 -32400 # Node ID 01519215ec70711a499854d7c3bc5dcf682e08d8 # Parent 2032755628dc5560161198bdc5bcffb25830b18d add watch point 0xfe00 fixed ram area in MMU diff -r 2032755628dc -r 01519215ec70 a09.c --- a/a09.c Sun Jul 15 14:18:19 2018 +0900 +++ b/a09.c Sun Jul 15 20:29:55 2018 +0900 @@ -1290,7 +1290,7 @@ setlabel(lp); skipspace(); int sep = *srcptr; - if(sep=='\"' || sep=='/') { + if(sep=='\"' || sep=='/' || sep=='\'') { srcptr++; while(*srcptr!=sep&&*srcptr) putbyte(*srcptr++); diff -r 2032755628dc -r 01519215ec70 d09.c --- a/d09.c Sun Jul 15 14:18:19 2018 +0900 +++ b/d09.c Sun Jul 15 20:29:55 2018 +0900 @@ -1365,6 +1365,7 @@ fprintf(fp,"%0.2X %0.2X %0.2X %s%s [%s$%0.2X,%s]", code, postbyte, prog[pc+2], suffix, op->name, s, offset, IndexRegister(postbyte)); + extrabytes = 1; break; case 0x19 : offset = prog[pc+2] * 256 + prog[pc+3]; @@ -1377,6 +1378,7 @@ fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s %s$%0.4X,%s", code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset, IndexRegister(postbyte)); + extrabytes = 2; break; case 0x1a : break; diff -r 2032755628dc -r 01519215ec70 io.c --- a/io.c Sun Jul 15 14:18:19 2018 +0900 +++ b/io.c Sun Jul 15 20:29:55 2018 +0900 @@ -270,6 +270,10 @@ do_timer(a,c); } else if (a >= 0x10+(IOPAGE&0x1ff)) { /* mmu */ do_mmu(a,c); +#ifdef USE_MMU + } else { /* fixed ram */ + mem[ a + 0xfe00 ] = c; +#endif } } diff -r 2032755628dc -r 01519215ec70 os9/level1/boot.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os9/level1/boot.asm Sun Jul 15 20:29:55 2018 +0900 @@ -0,0 +1,58 @@ +******************************************************************** +* Boot - V09 Boot module +* +* $Id: boot_1773.asm,v 1.1.1.1 2001/02/21 23:30:54 boisy Exp $ +* +* Ed. Comments Who YY/MM/DD +* ------------------------------------------------------------------ + + nam Boot + ttl v09 Boot module + + ifp1 + use defsfile + use coco.d + endc + +* +* map extended rom on page 0x40- +* first two bytes are extra rom module size + +tylg set Systm+Objct +atrv set ReEnt+rev +rev set $01 +edition set 1 + + mod eom,name,tylg,atrv,start,size + +size equ . + +name fcs /Boot/ + fcb edition + +start + ldx #Bt.Start+Bt.Size-1 + ldy #$ff00 + pshs x,y,u +loop ldb #$87 + cmpb ,x + bne notfound + os9 F$VModul + bcs notfound + ldx ,s + ldu ,u + ldd 2,u size of mulde + leax d,x + bra loop +notfound + leax 1,x + stx ,s + cmpx 2,s + blo loop +last clra + clrb + puls x,y,u,pc + + emod +eom equ * + end diff -r 2032755628dc -r 01519215ec70 os9/level1/sysgo.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os9/level1/sysgo.asm Sun Jul 15 20:29:55 2018 +0900 @@ -0,0 +1,323 @@ +******************************************************************** +* SysGo - Kickstart program module +* +* $Id$ +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 5 1998/10/12 Boisy G. Pitre +* Taken from OS-9 L2 Tandy distribution and modified banner for V3. +* +* 5r2 2003/01/08 Boisy G. Pitre +* Fixed fork behavior so that if 'shell startup' fails, system doesn't +* jmp to Crash, but tries AutoEx instead. Also changed /DD back to /H0 +* for certain boot floppy cases. +* +* 2003/09/04 Boisy G. Pitre +* Back-ported to OS-9 Level One. +* +* 5r3 2003/12/14 Boisy G. Pitre +* Added SHIFT key check to prevent startup/autoex from starting if +* held down. Gene Heskett, this Bud's for you. + + nam SysGo + ttl Kickstart program module + + IFP1 + use defsfile + ENDC + +tylg set Prgrm+Objct +atrv set ReEnt+rev +rev set $03 +edition set $05 + + mod eom,name,tylg,atrv,start,size + + + org 0 +InitAddr rmb 2 + rmb 250 +size equ . + +name fcs /SysGo/ + fcb edition + +* Default process priority +DefPrior set 128 + +Banner equ * + fcc /(C) 2014 The NitrOS-9 Project/ +CrRtn fcb C$CR,C$LF + + IFEQ ROM + IFNE NOS9DBG + fcc "** DEVELOPMENT BUILD **" + fcb C$CR,C$LF + fcc "** NOT FOR DISTRIBUTION! **" + fcb C$CR,C$LF + ENDC +* dts + fcb C$CR,C$LF + fcc !http://www.nitros9.org! + fcb C$CR,C$LF + ENDC + + fcb C$LF +BannLen equ *-Banner + + IFEQ ROM +DefDev equ * + fcc "/D0" +* IFNE DD +* fcc "/DD" +* ELSE +* fcc "/H0" +* ENDC + fcb C$CR +HDDev equ * + fcc "/DD" +* IFNE DD +* fcc "/DD/" +* ELSE +* fcc "/H0/" +* ENDC +ExecDir fcc "/D0/CMDS" + fcb C$CR + ENDC + +Shell fcc "Shell" + fcb C$CR +AutoEx fcc "AutoEx" + fcb C$CR +AutoExPr fcc "" + fcb C$CR +AutoExPrL equ *-AutoExPr + + IFEQ ROM +Startup fcc "startup -p" + fcb C$CR +StartupL equ *-Startup + ENDC + +ShellPrm equ * + IFGT Level-1 + fcc "i=/1" + ENDC +CRtn fcb C$CR +ShellPL equ *-ShellPrm + +mdirprm fcc "-e" + fcb C$CR + +* Default time packet +DefTime +* dtb + + IFEQ atari+corsham + IFEQ Level-1 +* BASIC reset code (CoCo port only) +* BasicRst fcb $55 +* neg <$0074 +* nop +* clr >PIA0Base+3 +* nop +* nop +* sta >$FFDF turn off ROM mode +* jmp >Bt.Start+2 jump to boot +* BasicRL equ *-BasicRst + ENDC + ENDC + +Init fcs /Init/ + +* Entry: X = pointer to start of nul terminated string +* Exit: D = length of string +strlen pshs x + ldd #-1 +go@ addd #$0001 + tst ,x+ + bne go@ + puls x,pc + +* Display carriage-return/line-feed. +WriteCR pshs y + leax CrRtn,pcr + ldy #$0001 + os9 I$WritLn + puls y,pc + +********************************************************** +* SysGo Entry Point +********************************************************** +start leax >IcptRtn,pcr + os9 F$Icpt +* Set priority of this process + os9 F$ID + ldb #DefPrior + os9 F$SPrior + +* Write OS name and Machine name strings + leax Init,pcr + clra + pshs u + os9 F$Link + bcs SignOn + stx Banner,pcr + ldy #BannLen + lda #$01 standard output + os9 I$Write write out banner + +* Set default time +* leax >DefTime,pcr +* os9 F$STime set time to default + + IFEQ ROM +* Change EXEC and DATA dirs + leax >ExecDir,pcr + lda #EXEC. + os9 I$ChgDir change exec. dir + leax >DefDev,pcr +* Made READ. so that no write occurs at boot (Boisy on Feb 5, 2012) + lda #READ. + os9 I$ChgDir change data dir. + bcs L0125 + leax >HDDev,pcr + lda #EXEC. + os9 I$ChgDir change exec. dir to HD + ENDC + +L0125 equ * + pshs u,y + IFEQ atari+corsham + IFEQ Level-1 +* Setup BASIC code (CoCo port only) +* leax >BasicRst,pcr +* ldu #D.CBStrt +* ldb #BasicRL +*CopyLoop lda ,x+ +* sta ,u+ +* decb +* bne CopyLoop + ELSE + os9 F$ID get process ID + lbcs L01A9 fail + leax ,u + os9 F$GPrDsc get process descriptor copy + lbcs L01A9 fail + leay ,u + ldx #$0000 + ldb #$01 + os9 F$MapBlk + bcs L01A9 + +* lda #$55 set flag for Color BASIC +* sta Shell,pcr +* leau >Startup,pcr +* ldd #256 +* ldy #StartupL +* os9 F$Fork +* bcs DoAuto Startup failed.. +* os9 F$Wait +* ENDC + +* Fork AutoEx here +*DoAuto leax >AutoEx,pcr +* leau >CRtn,pcr +* ldd #$0100 +* ldy #$0001 +* os9 F$Fork +* bcs L0186 AutoEx failed.. +* os9 F$Wait + + leax >MDIR,pcr + leau >mdirprm,pcr + ldd #$0100 + ldy #$0003 + os9 F$Fork + bcs L0186 AutoEx failed.. + os9 F$Wait + bra L0186 +MDIR fcs "mdir" + fcb $0d + +L0186 equ * + puls u,y +FrkShell leax >ShellPrm,pcr + leay ,u + ldb #ShellPL +L0190 lda ,x+ + sta ,y+ + decb + bne L0190 +* Fork final shell here + leax >Shell,pcr + lda #$01 D = 256 (B already 0 from above) + ldy #ShellPL + IFGT Level-1 + os9 F$Chain Level 2/3. Should not return.. + ldb #$06 it did! Fatal. Load error code + bra Crash + +L01A9 ldb #$04 error code +Crash clr >DPort+$08 turn off disk motor + jmp next, b=b->next ) { - if (ppc==b->address /* || pcreg==b->laddr */) { +#ifdef USE_MMU + int watch = phymem[b->address]; +#else + int watch = mem[b->address]; +#endif + if (ppc==b->address || b->watch != watch ) { + b->watch = watch; if (b->count==-1) { // temporaly break point BPTR next = b->next; free(b); @@ -138,6 +161,7 @@ do_trace(stdout); if (trskip>1) { // show trace and step trskip--; + int watch; // watch point set_term(escchar); return; } @@ -181,9 +205,9 @@ case 'B': // break point list for(BPTR bp = breakpoint; bp ; bp = bp->next) { #ifdef USE_MMU - printf("%x %x %d\n", bp->laddr, bp->address, bp->count); + printf("0x%x p=0x%x c=%d w=0x%x\n", bp->laddr, bp->address, bp->count, bp->watch); #else - printf("%x %d\n", bp->address, bp->count); + printf("0x%x c=%d w=0x%x\n", bp->address, bp->count,bp->watch); #endif } goto restart; @@ -360,6 +384,11 @@ bp->count = count; bp->laddr = adr; bp->address = paddr(adr,mmu); +#ifdef USE_MMU + bp->watch = *mem0(phymem,adr,mmu); +#else + bp->watch = mem[adr]; +#endif } int nexti(void) {