From 24baf2c7fb432ac3fa05e63c6bcbc8b5a4c75097 Mon Sep 17 00:00:00 2001 From: Werner Johansson Date: Sun, 23 Mar 2003 13:05:26 -0800 Subject: [PATCH] v0.8 - Some text commands implemented, only static text for now though Signed-off-by: Werner Johansson --- wj-uni.asm | 357 +++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 256 insertions(+), 101 deletions(-) diff --git a/wj-uni.asm b/wj-uni.asm index 69624e6..253dbda 100644 --- a/wj-uni.asm +++ b/wj-uni.asm @@ -47,6 +47,7 @@ ;---------------------------------------------------------------- ; Version ; +; 0.8 Some text commands implemented, only static text for now though ; 0.7 Debug Serial TX in ISR now, checksum check for incoming packets in place, A/D works, solved the master reset prob ; (by calling the INT handler from TMR2 ISR code (too much interrupt latency when transmitting) ; 0.6 Some more LCD info and clean-up of the Unilink recovery code, some problems with master resetting :( @@ -95,54 +96,7 @@ ;---------------------------------------------------------------- ; FILE REGISTER USAGE ;---------------------------------------------------------------- -TrackName00 equ 20h ; Buffer for TrackName -TrackName01 equ 21h -TrackName02 equ 22h -TrackName03 equ 23h -TrackName04 equ 24h -TrackName05 equ 25h -TrackName06 equ 26h -TrackName07 equ 27h -TrackName08 equ 28h -TrackName09 equ 29h -TrackName0a equ 2ah -TrackName0b equ 2bh -TrackName0c equ 2ch -TrackName0d equ 2dh -TrackName0e equ 2eh -TrackName0f equ 2fh -TrackName10 equ 30h -TrackName11 equ 31h -TrackName12 equ 32h -TrackName13 equ 33h -TrackName14 equ 34h -TrackName15 equ 35h -TrackName16 equ 36h -TrackName17 equ 37h -TrackName18 equ 38h -TrackName19 equ 39h -TrackName1a equ 3ah -TrackName1b equ 3bh -TrackName1c equ 3ch -TrackName1d equ 3dh -TrackName1e equ 3eh -TrackName1f equ 3fh -TrackName20 equ 40h -TrackName21 equ 41h -TrackName22 equ 42h -TrackName23 equ 43h -TrackName24 equ 44h -TrackName25 equ 45h -TrackName26 equ 46h -TrackName27 equ 47h -TrackName28 equ 48h -TrackName29 equ 49h -TrackName2a equ 4ah -TrackName2b equ 4bh -TrackName2c equ 4ch -TrackName2d equ 4dh -TrackName2e equ 4eh -TrackName2f equ 4fh +; Free from 20h-4fh UnilinkRAD equ 50h ; Beginning of Unilink packet - the Receiving Address UnilinkTAD equ 51h ; Transmitter address @@ -196,38 +150,8 @@ IRQPCLATH equ 7dh ; ISH storage IRQSTATUS equ 7eh ; Needs to be located in a shared area accessible from all register banks IRQW equ 7fh ; -DiscName00 equ 0a0h ; Buffer for DiscName -DiscName01 equ 0a1h -DiscName02 equ 0a2h -DiscName03 equ 0a3h -DiscName04 equ 0a4h -DiscName05 equ 0a5h -DiscName06 equ 0a6h -DiscName07 equ 0a7h -DiscName08 equ 0a8h -DiscName09 equ 0a9h -DiscName0a equ 0aah -DiscName0b equ 0abh -DiscName0c equ 0ach -DiscName0d equ 0adh -DiscName0e equ 0aeh -DiscName0f equ 0afh -DiscName10 equ 0b0h -DiscName11 equ 0b1h -DiscName12 equ 0b2h -DiscName13 equ 0b3h -DiscName14 equ 0b4h -DiscName15 equ 0b5h -DiscName16 equ 0b6h -DiscName17 equ 0b7h -DiscName18 equ 0b8h -DiscName19 equ 0b9h -DiscName1a equ 0bah -DiscName1b equ 0bbh -DiscName1c equ 0bch -DiscName1d equ 0bdh -DiscName1e equ 0beh -DiscName1f equ 0bfh +RecvBuf equ 0a0h ; Buffer for received data from PC (31 bytes) +RecvBufLen equ 0bfh ; How many bytes have been received? subtitl "Startup" page @@ -625,12 +549,18 @@ IRQINTParseNot0112 goto IRQINTParseComplete call ClearUnilinkBuffer + movlw 70h ; Sending to Display Group addwf UnilinkParity1,f movwf UnilinkRAD movf UnilinkID,w ; This is my ID addwf UnilinkParity1,f movwf UnilinkTAD + + movf DisplayStatus,w + xorlw 80h ; First slave break? + bnz IRQINTParse0113Not80 + movlw 90h addwf UnilinkParity1,f movwf UnilinkCMD1 @@ -654,12 +584,226 @@ IRQINTParseNot0112 ; movlw 0c0h movf DisplayStatus,w andlw 0f0h + iorlw 0eh addwf UnilinkParity2M,f movwf UnilinkData4 - - incf DisplayStatus,f ; Temporary debug info - bsf DisplayStatus,7 + goto IRQINTParse0113Complete + +IRQINTParse0113Not80 + + movf DisplayStatus,w + xorlw 81h ; Second slave break? + bnz IRQINTParse0113Not81 + + movlw 0cdh ; Disc name + addwf UnilinkParity1,f + movwf UnilinkCMD1 + movlw 'N' + addwf UnilinkParity1,f + movwf UnilinkCMD2 + + movf UnilinkParity1,w ; Carry the parity forward + movwf UnilinkParity2 + + movlw 'o' + addwf UnilinkParity2,f + movwf UnilinkData1 + movlw ' ' + addwf UnilinkParity2,f + movwf UnilinkData2 + movlw 'M' + addwf UnilinkParity2,f + movwf UnilinkData3 + movlw 'P' + addwf UnilinkParity2,f + movwf UnilinkData4 + movlw '3' + addwf UnilinkParity2,f + movwf UnilinkData5 + movlw ' ' + addwf UnilinkParity2,f + movwf UnilinkData6 + movlw 'P' + addwf UnilinkParity2,f + movwf UnilinkData7 + movlw 0eh + addwf UnilinkParity2,f + movwf UnilinkData9 + goto IRQINTParse0113Complete + +IRQINTParse0113Not81 + + movf DisplayStatus,w + xorlw 82h ; Third slave break? + bnz IRQINTParse0113Not82 + + movlw 0cdh ; Disc name + addwf UnilinkParity1,f + movwf UnilinkCMD1 + movlw 'l' + addwf UnilinkParity1,f + movwf UnilinkCMD2 + + movf UnilinkParity1,w ; Carry the parity forward + movwf UnilinkParity2 + + movlw 'a' + addwf UnilinkParity2,f + movwf UnilinkData1 + movlw 'y' + addwf UnilinkParity2,f + movwf UnilinkData2 + movlw 'l' + addwf UnilinkParity2,f + movwf UnilinkData3 + movlw 'i' + addwf UnilinkParity2,f + movwf UnilinkData4 + movlw 's' + addwf UnilinkParity2,f + movwf UnilinkData5 + movlw 't' + addwf UnilinkParity2,f + movwf UnilinkData6 + movlw '!' + addwf UnilinkParity2,f + movwf UnilinkData7 + movlw 1eh + addwf UnilinkParity2,f + movwf UnilinkData9 + goto IRQINTParse0113Complete + +IRQINTParse0113Not82 + + movf DisplayStatus,w + xorlw 83h ; Fourth slave break? + bnz IRQINTParse0113Not83 + + movlw 0c9h ; Track name 1 + addwf UnilinkParity1,f + movwf UnilinkCMD1 + movlw 'N' + addwf UnilinkParity1,f + movwf UnilinkCMD2 + + movf UnilinkParity1,w ; Carry the parity forward + movwf UnilinkParity2 + + movlw 'o' + addwf UnilinkParity2,f + movwf UnilinkData1 + movlw ' ' + addwf UnilinkParity2,f + movwf UnilinkData2 + movlw 'M' + addwf UnilinkParity2,f + movwf UnilinkData3 + movlw 'P' + addwf UnilinkParity2,f + movwf UnilinkData4 + movlw '3' + addwf UnilinkParity2,f + movwf UnilinkData5 + movlw ' ' + addwf UnilinkParity2,f + movwf UnilinkData6 + movlw 'T' + addwf UnilinkParity2,f + movwf UnilinkData7 + movlw 0eh + addwf UnilinkParity2,f + movwf UnilinkData9 + + goto IRQINTParse0113Complete + +IRQINTParse0113Not83 + + movf DisplayStatus,w + xorlw 84h ; Fifth slave break? + bnz IRQINTParse0113Not84 + + movlw 0c9h ; Track name (2) + addwf UnilinkParity1,f + movwf UnilinkCMD1 + movlw 'r' + addwf UnilinkParity1,f + movwf UnilinkCMD2 + + movf UnilinkParity1,w ; Carry the parity forward + movwf UnilinkParity2 + + movlw 'a' + addwf UnilinkParity2,f + movwf UnilinkData1 + movlw 'c' + addwf UnilinkParity2,f + movwf UnilinkData2 + movlw 'k' + addwf UnilinkParity2,f + movwf UnilinkData3 + movlw 'n' + addwf UnilinkParity2,f + movwf UnilinkData4 + movlw 'a' + addwf UnilinkParity2,f + movwf UnilinkData5 + movlw 'm' + addwf UnilinkParity2,f + movwf UnilinkData6 + movlw 'e' + addwf UnilinkParity2,f + movwf UnilinkData7 + movlw 1eh + addwf UnilinkParity2,f + movwf UnilinkData9 + goto IRQINTParse0113Complete + +IRQINTParse0113Not84 + + movf DisplayStatus,w + xorlw 85h ; Sixth slave break? + bnz IRQINTParse0113Not85 + + movlw 90h + addwf UnilinkParity1,f + movwf UnilinkCMD1 + movlw 50h + addwf UnilinkParity1,f + movwf UnilinkCMD2 + + movf UnilinkParity1,w ; Carry the parity forward + movwf UnilinkParity2M + + movf DisplayStatus,w + addwf UnilinkParity2M,f + movwf UnilinkData1 + movlw 00h + addwf UnilinkParity2M,f + movwf UnilinkData2 + movlw 01h + addwf UnilinkParity2M,f + movwf UnilinkData3 + +; movlw 0c0h + movf DisplayStatus,w + andlw 0f0h + iorlw 0eh + + addwf UnilinkParity2M,f + movwf UnilinkData4 + + goto IRQINTParse0113Complete + +IRQINTParse0113Not85 + clrf DisplayStatus + incf DisplayStatus,f ; Skip step one for now + goto IRQINTParseComplete + +IRQINTParse0113Complete + + incf DisplayStatus,f ; Increment display state counter +; bsf DisplayStatus,7 goto IRQINTParseBypassClear ; Don't clear the data, the buffer will be sent as the next packet @@ -799,6 +943,19 @@ IRQINTParseNot01 IRQINTParseNot02 +; Check for CMD1 = 80h (Display button) + movf UnilinkCMD1,w + xorlw 080h + bnz IRQINTParseNot80 + + movf UnilinkID,w ; Check if I'm currently selected + xorwf UnilinkCurID,w + skpnz ; No, skip this command + bsf DisplayStatus,7 ; Make sure we update the display again + goto IRQINTParseComplete + +IRQINTParseNot80 + ; Check for CMD1 = 87h (Power control) movf UnilinkCMD1,w xorlw 087h @@ -1209,14 +1366,6 @@ MainSkipScroll ; Display scroll part ends here... -; movf DataCount,w ; Load bit counter (if 0 then byte is available) -; skpz -; goto MainLoop - -; decf DataCount,f ; Set it non-zero - -; movf DataStore,w -; call BootTXB ; Send to terminal goto MainLoop @@ -1277,12 +1426,12 @@ LCDInit ; This is a standard reset sequence for the LCD controller - movlw 160 ; Need to delay for at least 15ms, let's go for 16ms delay + movlw 170 ; Need to delay for at least 15ms, let's go for 17ms delay call DelayW movlw 3 ; Write 3 to the LCD call TxLCD ; Send to LCD - movlw 50 ; Need to delay for at least 4.1ms, let's go for 5ms delay + movlw 60 ; Need to delay for at least 4.1ms, let's go for 6ms delay call DelayW movlw 3 ; Write 3 to the LCD @@ -1616,7 +1765,15 @@ DefaultText1 DT "----- WJ", "MyID:xx ", "xx dB at", "Sel:xx B", "Inits:xx" DT " Unilink", "CurID:xx", "t Dsp:xx", "atxx.xxV", " " - +PCWaitText0 +; DT ">Waiting" +; DT "Wait->PC" + DT "Booting." +PCWaitText1 +; DT " for PC<" +; DT " Booting" + DT "..",0,0,0,0,0,0 + LookUp movwf PCL ; Go to it (this assumes PCLATH == 06h) @@ -1917,15 +2074,13 @@ BootEEX ; To produce compact code the end zero byte has to be in the LSB (that means an even number of chars in every string) BootStartText -; "WJBoot - press ESC to flash\x00" - DW 0x2bca,0x216f,0x37f4,0x102d,0x1070,0x3965,0x39f3,0x1045,0x29c3,0x1074,0x37a0,0x336c,0x30f3,0x3400 + DA "WJBoot - press ESC to flash\x00" + BootFlashText -; "\r\nSend INHX8 file now...\r\x00" - DW 0x068a,0x29e5,0x3764,0x1049,0x2748,0x2c38,0x1066,0x34ec,0x32a0,0x376f,0x3bae,0x172e,0x0680 -BootRunText -; "\r\nExiting loader\r\x00" - DW 0x068a,0x22f8,0x34f4,0x34ee,0x33a0,0x366f,0x30e4,0x32f2,0x0680 + DA "\r\nSend INHX8 file now...\r\x00" +BootRunText + DA "\r\nExiting loader\r\x00" ;---------------------------------------------------------------------- ; EE Data (64 bytes), located at 2100h -- 1.7.3