Mercurial > hg > Members > kono > nitros9-code
changeset 626:472f0651e644
exmode.asm is part of l2 utils package
author | boisy |
---|---|
date | Tue, 03 Dec 2002 21:52:37 +0000 |
parents | 085efbb80a5a |
children | d45d58e6a5f8 |
files | level2/cmds/exmode.asm level2/coco3/ChangeLog level2/coco3_6309/ChangeLog |
diffstat | 3 files changed, 0 insertions(+), 683 deletions(-) [+] |
line wrap: on
line diff
--- a/level2/cmds/exmode.asm Tue Dec 03 21:50:32 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,681 +0,0 @@ -******************************************************************** -* EXMode - Extended SCF device descriptor utility -* -* $Id$ -* -* Ed. Comments Who YY/MM/DD -* ------------------------------------------------------------------ -* 1 Bruce Isted version released to PD BRI 89/06/21 - - nam EXMode - ttl Extended SCF device descriptor utility - - ifp1 - use defsfile - endc - -BuffSize equ 10 max. CHAR string length -Edtn equ 1 -MaxSize equ $80 maximum module size -NameSize equ 4 maximum module name length -Vrsn equ 1 - - org 0 -Count rmb 1 number of option bytes -DataPtr rmb 2 current option ptr -HexIn rmb 2 2 byte hex number -ModAddr rmb 2 module address -ModSize rmb 2 module size -OptEnd rmb 2 option table end offset -ParmPtr rmb 2 next name DataPtr -PathNmbr rmb 1 file path -TxtPtr rmb 2 option name ptr -Buffer rmb BuffSize miscellaneous output buffer -ModBuff rmb MaxSize module work copy buffer -stack rmb $0200 stack and parameter space -MemSize equ . - - mod Size,Name,Prgrm+Objct,ReEnt+Vrsn,Entry,MemSize - -Name fcs "EXMode" - fcb Edtn edition number - -OptTable - fcc " nam" option name - fcb Sign+M$Name,NameSize offset to string offset & max. byte count to change - fcc " mgr" - fcb Sign+M$FMgr,0 offset to string offset & no changes allowed - fcc " ddr" - fcb Sign+M$PDev,0 - fcc " hpn" - fcb M$Port,1 option offset & byte count - fcc " hpa" - fcb M$Port+1,2 - fcc " upc" - fcb IT.UPC,1 - fcc " bso" - fcb IT.BSO,1 - fcc " dlo" - fcb IT.DLO,1 - fcc " eko" - fcb IT.EKO,1 - fcc " alf" - fcb IT.ALF,1 - fcc " nul" - fcb IT.NUL,1 - fcc " pau" - fcb IT.PAU,1 - fcc " pag" - fcb IT.PAG,1 - fcc " bsp" - fcb IT.BSP,1 - fcc " del" - fcb IT.DEL,1 - fcc " eor" - fcb IT.EOR,1 - fcc " eof" - fcb IT.EOF,1 - fcc " rpr" - fcb IT.RPR,1 - fcc " dup" - fcb IT.DUP,1 - fcc " psc" - fcb IT.PSC,1 - fcc " int" - fcb IT.INT,1 - fcc " qut" - fcb IT.QUT,1 - fcc " bse" - fcb IT.BSE,1 - fcc " ovf" - fcb IT.OVF,1 - fcc " par" - fcb IT.PAR,1 - fcc " bau" - fcb IT.BAU,1 - fcc " xon" - fcb IT.XON,1 - fcc " xof" - fcb IT.XOFF,1 - fcc " col" - fcb IT.COL,1 - fcc " row" - fcb IT.ROW,1 - fcc " xtp" - fcb IT.XTYP,1 - fcc " wnd" - fcb IT.WND,1 - fcc " val" - fcb IT.VAL,1 - fcc " sty" - fcb IT.STY,1 - fcc " cpx" - fcb IT.CPX,1 - fcc " cpy" - fcb IT.CPY,1 - fcc " fgc" - fcb IT.FGC,1 - fcc " bgc" - fcb IT.BGC,1 - fcc " bdc" - fcb IT.BDC,1 -TablOpts equ (*-OptTable)/6 number of table entries - fcb $80 end of option table - -UseMsg - fcb C$LF - fcc "Usage: EXMode [/<device> || -<pathlist> || -?] [option] [option] [...]" - fcb C$LF,C$LF - fcc "Purpose: To report or alter current option settings of SCF device" - fcb C$LF - fcc " descriptors in memory or on disk in single module files." - fcb C$LF,C$LF - fcc "Options: nam, mgr, ddr, hpn, hpa, upc, bso, dlo, eko, alf, nul, pau," - fcb C$LF - fcc " pag, bsp, del, eor, eof, rpr, dup, psc, int, qut, bse, ovf," - fcb C$LF - fcc " par, bau, xon, xof, col, row, xtp, wnd, val, sty, cpx, cpy," - fcb C$LF - fcc " fgc, bgc, bdc" - fcb C$LF,C$LF - fcc "Examples: exmode /t2" - fcb C$LF - fcc " Prints the current option settings of the /T2 descriptor" - fcb C$LF - fcc " in memory." - fcb C$LF - fcc " exmode -modules/t4.dd nam=T2 bau=6 hpa=ff6c eof=1B" - fcb C$LF - fcc " Changes the module name in the MODULES/T4.dd file to T2," - fcb C$LF - fcc " sets the baud rate code to 6, the hardware port address" - fcb C$LF - fcc " to $FF6C, and the end of file character to $1B." - fcb C$LF - fcc " exmode -?" - fcb C$LF - fcc " Prints more complete information on all of the options." - fcb C$CR -UseLen equ *-UseMsg - -HelpMsg - fcb C$LF - fcc "The NAM option accepts only a legal OS-9 module name with a maximum of" - fcb C$LF - fcc "4 characters. It is up to the user to ensure that there is adequate" - fcb C$LF - fcc "room for the module name, and if required to rename the disk file to" - fcb C$LF - fcc "suit the new module name. The MGR and DDR options can't be changed." - fcb C$LF - fcc "All other options require hexadecimal numbers (0 through FFFF). XTP is" - fcb C$LF - fcc "for certain ACIA descriptors only. WND, VAL, STY, CPX, CPY, FGC, BGC," - fcb C$LF - fcc "and BDC are for window descriptors only." - fcb C$LF,C$LF - fcc "nam Device Name mgr File Manager Name ddr Device Driver Name" - fcb C$LF - fcc "hpn H'ware Page Number hpa H'ware Port Address upc Case Lock Flag" - fcb C$LF - fcc "bso Backspace Method dlo Delete Line Method eko Screen Echo Flag" - fcb C$LF - fcc "alf Auto Linefeed Flag nul End Of Line Nulls pau Page Pause Flag" - fcb C$LF - fcc "pag Page Length bsp Backspace Character del Delete Line Char" - fcb C$LF - fcc "eor End Of Record Char eof End Of File Char rpr Reprint Line Char" - fcb C$LF - fcc "dup Duplicate Line Char psc Pause Character int Interrupt Character" - fcb C$LF - fcc "qut Quit Character bse Backspace Echo Char ovf Overflow Character" - fcb C$LF - fcc "par Type (Parity) Code bau Baud Rate Code xon XON Character" - fcb C$LF - fcc "xof XOFF Character col Display Columns row Display Rows" - fcb C$LF - fcc "xtp Extended Type Code wnd Window Number val Valid Window Flag" - fcb C$LF - fcc "sty Window Screen Type cpx X Corner Position cpy Y Corner Position" - fcb C$LF - fcc "fgc Foreground Colour bgc Background Colour bdc Border Colour" - fcb C$CR -HelpLen equ *-HelpMsg - -Equal fcc "=" - -TypeMsg - fcb C$LF - fcc "Not an SCF descriptor!" -CR fcb C$CR -TypeLen equ *-TypeMsg - -Sizemsg - fcb C$LF - fcc "Module size out of range!" - fcb C$CR -Sizelen equ *-Sizemsg - -SynMsg - fcb C$LF - fcc "Syntax error: " -SynLen equ *-SynMsg - -**************** -* miscellaneous error and help routines - -MuchHelp - leax HelpMsg,pc - ldy #HelpLen - bra Helpprnt - -BadSize - leax Sizemsg,pc - ldy #Sizelen - bra AddHelp - -BadType - leax TypeMsg,pc - ldy #TypeLen -AddHelp - lda #2 - os9 I$WritLn -Help - leax UseMsg,pc - ldy #UseLen -Helpprnt - lda #2 - os9 I$WritLn - lbra OkayEnd2 - -**************** -Entry - ldd #0 - std <ModAddr zero mod flag - sta <PathNmbr zero file flag - ldd ,x+ check for device name - cmpa #'- file option? - bne Link - cmpb #'? help option? - beq MuchHelp -* Use Filename to Get Desc: - lda #Updat. open path to module file - os9 I$Open - bcs Help - stx <ParmPtr - sta <PathNmbr save path number - ldy #MaxSize max size - leax ModBuff,u module buff - os9 I$Read get it - lbcs Error - ldb M$Opt,x - clra [D] = option table size - addd #M$DTyp add options start offset - std <OptEnd save options end offset - ldd M$Size,x get module size - cmpd #MaxSize module size OK? - bhi BadSize no, go return error... - std <ModSize - bra GotIt - -Link - cmpa #'/ else must be /<devicename> - bne Help - pshs u - lda #Devic - os9 F$Link link to module - bcs Help - stx <ParmPtr update after name - tfr u,x - puls u - stx <ModAddr - ldb M$Opt,x - clra [D] = option table size - addd #M$DTyp add options start offset - std <OptEnd save options end offset - ldd M$Size,x get module size - cmpd #MaxSize module size OK? - lbhi BadSize no, go report error... - std <ModSize - tfr d,y copy module size... - pshs u save data area pointer - leau ModBuff,u - -GetModLp - lda ,x+ - sta ,u+ - leay -1,y - bne GetModLp - puls u recover data area pointer - -GotIt - ldd <OptEnd get option table end offset - cmpd <ModSize is option table size OK? - lbhs BadSize no, go report error... - leax ModBuff,u - lda M$DTyp,x get device type - lbne BadType SCF = $00 - ldx <ParmPtr point to input parms - lbsr SkipSpac go skip leading spaces... - cmpa #C$CR no options? - lbeq Info ..yes, give info - leax -1,x - -**************** -* X=ParmPtr -* Find and Set Options: - -FindLp10 - lbsr SkipSpac get next input param - stx <ParmPtr save for syntax error use - cmpa #C$CR end? - lbeq Verify ..yes, update module CRC - leay OptTable-6,pc ready option table ptr - pshs u - ldu ,x++ get next two chars - ora #$20 convert 1st param char to lower case - exg d,u move [U] where we can convert param chars - ora #$20 convert 2nd param char... - orb #$20 convert 3rd... - exg d,u move back again - -FindLp20 - leay 6,y next option entry - tst ,y last entry? - bmi Syntax ..yes, bad option - cmpa 1,y - bne FindLp20 same name? - cmpu 2,y - bne FindLp20 ..no, loop -* Found Option - puls u - sty <TxtPtr - ldd ,x+ must be followed by "=", leave [X] pointing at char after "=" - cmpa #'= - bne Syntax - cmpb #C$CR rest of option missing? - beq Syntax yes, go report error - cmpb #C$SPAC rest of option missing? - beq Syntax yes, go report error - ldb 5,y get # of bytes - beq Syntax 0 bytes, not allowed to change this option - stb <Count - ldb 4,y get option offset or offset to option offset - bpl NumOpt option offset, go set hexadecimal option -* Get CHAR input and set option: - andb #^Sign clear sign bit of offset to string offset - clra [D] = offset to string offset within module - cmpd <ModSize is it OK? - bhs Syntax no, go report error... - leay ModBuff,u point to module - ldd b,y get offset to string - cmpd <ModSize is it OK? - bhs Syntax no, go report error... - leay d,y point to option - pshs y save option pointer - os9 F$PrsNam valid OS-9 name? - puls y recover option pointer (end of name pointer lost) - bcs Syntax no, go report error - cmpa #C$SPAC space delimiter char? - beq ChkLen yes, go check name length... - cmpa #C$CR <CR> delimiter char? - bne Syntax no, go report error - -ChkLen - cmpb <Count name length OK? - bhi Syntax no, go report error... - -SetChrLp - lda ,x+ get character - sta ,y+ save it to module copy - decb done yet? - bne SetChrLp no, go copy another char... - lda -1,y get last char - ora #Sign set sign bit - sta -1,y save last char - lbra FindLp10 go do next... - -* Syntax Error: -Syntax - leax SynMsg,pc - ldy #SynLen - lda #2 - os9 I$Write - ldx <ParmPtr - leax -1,x - pshs x - ldy #0 - -CntLoop - leay 1,y - lda ,x+ - cmpa #C$CR - beq SynSay - cmpa #C$SPAC - bne CntLoop - -SynSay - puls x - lda #2 - os9 I$Write output err - lbra OkayEnd - -* Get Hex Input and Set Option: -NumOpt - clra [D] = option offset within module - cmpd <OptEnd is it OK? - bhs Syntax no, go report error... - clr <HexIn zero hex input bytes - clr <HexIn+1 - -SetNumLp - lda ,x+ get next # - cmpa #C$SPAC end of number? - beq SetNum2 ..yes, set option - cmpa #C$CR end of line? - beq SetNum1 ..yes, set option -* Convert ASCII Hex-->Byte: - suba #$30 make number from ASCII - bmi Syntax - cmpa #10 is it number? - bcs Num - anda #$5F make uppercase - suba #$11-$0A make hex $A-$F - cmpa #$0A - bcs Syntax - cmpa #$10 not hex char? - bcc Syntax - -Num - ldb #16 fancy asl *4 - mul - pshs b save top 4 bits - ldd <HexIn - rol ,s - rolb - rola - rol ,s - rolb - rola - rol ,s - rolb - rola - rol ,s - rolb - rola - std <HexIn - puls b drop temp - bra SetNumLp ..loop - -SetNum1 - leax -1,x reset so can find <CR> - -SetNum2 - ldb 4,y get option offset - leay ModBuff,u point to module - leay b,y point to option - ldd <HexIn pick up hex input - dec <Count - beq SetOne - std ,y set two byte option - lbra FindLp10 - -SetOne - tsta - lbne Syntax - stb ,y set one byte option - -SetNDone - lbra FindLp10 - -* -------------- -* Skip Spaces: -SkipSpac - lda ,x+ - cmpa #C$SPAC - beq SkipSpac - rts - -* -------------- -* Update Module CRC: -Verify - pshs u save data ptr - leau ModBuff,u - tfr u,x X is mod address - ldy M$Size,x Y is mod size - leay -3,y beginning of chksum - tfr y,d Y is byte count - leau d,u set U to chksum - lda #$FF init chksum - sta ,u - sta 1,u - sta 2,u - pshs u - os9 F$CRC calc new crc - puls u - com ,u+ fix it up right - com ,u+ - com ,u - lda <PathNmbr was it file? - beq MemMod ..no, in memory - ldx #0 - tfr x,u - os9 I$Seek go back to file begin - bcs Error - puls u - leax ModBuff,u - ldy <ModSize - os9 I$Write update module file - bra OkayEnd - -MemMod - ldu ,s get data area pointer - leax ModBuff,u - ldy <ModSize - ldu <ModAddr - -PutModLp - lda ,x+ - sta ,u+ - leay -1,y - bne PutModLp - puls u recover data area pointer - bra OkayEnd2 - -OkayEnd - bsr OutCR - -OkayEnd2 - clrb okay - -Error - pshs b,cc - ldu <ModAddr - beq Bye - os9 F$UnLink - -Bye - puls b,cc - os9 F$Exit we're done... - -* -------------- -* Print a <CR>: -OutCR - leax CR,pc - ldy #1 - lda #1 - os9 I$WritLn - rts - -**************** -* Output Current Desc Info: -Info - bsr OutCR do a <CR> - ldb #TablOpts number of table entries - pshs b save counter - leax OptTable,pc point to text table - stx <TxtPtr - -InfoLoop - ldx <TxtPtr - ldy #4 - lbsr OutPut print option name - leax Equal,pc - ldy #1 - lbsr OutPut print = - ldx <TxtPtr - ldb 4,x get offset to HEX option; if minus, offset to option offset - bpl PrintHex go do simple offset to HEX option - andb #^Sign clear sign bit - clra [D] = offset to string offset within module - cmpd <ModSize is it OK? - bhs MovePtr no, skip this option... - leay ModBuff,u point [Y] to module work copy - ldd b,y get string offset within module - cmpd <ModSize is string offset OK? - bhs MovePtr no, skip this option... - leay d,y point [Y] to CHAR string - lda #BuffSize get max. chars to print - leax Buffer,u point [X] to CHAR string buffer - clr <Count init counter - -CharCopy ldb ,y+ get char - bpl NotLast sign bit clear so not last, go on... - andb #^Sign clear sign bit - lda #1 set up as last char - -NotLast stb ,x+ - inc <Count count chars in string - deca done yet? - bne CharCopy no, go do another char... - ldb <Count get chars in string ([A]=0, so [D]=char count) - tfr d,y module name length into [Y] - leax Buffer,u point [X] to CHAR string copy - bsr OutPut print CHAR string - bra MovePtr skip HEX output routine - -* Print Hex Option Values: -PrintHex - ldx <TxtPtr - ldb 5,x get # of digits - stb <Count - ldb 4,x get option offset in module - clra [D] = option offset within module - cmpd <OptEnd is option offset OK? - bhs MovePtr no, skip this option... - leax ModBuff,u point [X] to module work copy - abx point [X] to option - stx <DataPtr - -* Print One Byte: -NumLoop - ldx <DataPtr - lda ,x+ - stx <DataPtr - pshs a - lsra - lsra - lsra - lsra - bsr OutOne - puls a - anda #$0F - bsr OutOne - dec <Count - bne NumLoop - -MovePtr - ldx <TxtPtr - leax 6,x - stx <TxtPtr - dec ,s - lbeq OkayEnd done... - ldb ,s - bitb #$07 # of options remaining evenly divisible by eight? - lbne InfoLoop no, go print next option on same line - lbsr OutCR <CR> after every 8th option - lbra InfoLoop ..loop - -* -------------- -* Print 1/2 Byte Hex Char: -OutOne - cmpa #10 - bcs Number - adda #$11-10 make alpha - -Number - adda #$30 make ASCII - sta <Buffer - leax Buffer,u - ldy #1 - -OutPut - lda #1 std out - os9 I$Write - lbcs Error - rts - - emod -Size equ * - end -
--- a/level2/coco3/ChangeLog Tue Dec 03 21:50:32 2002 +0000 +++ b/level2/coco3/ChangeLog Tue Dec 03 21:52:37 2002 +0000 @@ -5,5 +5,4 @@ new improvements and features from that platform. - ASM now assembles 6309 op-codes. - Window descriptors now have proper initialization count. -- EXMode (Extended XMode) utility added, written by Bruce Isted.
--- a/level2/coco3_6309/ChangeLog Tue Dec 03 21:50:32 2002 +0000 +++ b/level2/coco3_6309/ChangeLog Tue Dec 03 21:52:37 2002 +0000 @@ -5,5 +5,4 @@ new improvements and features from that platform. - ASM now assembles 6309 op-codes. - Window descriptors now have proper initialization count. -- EXMode (Extended XMode) utility added, written by Bruce Isted.