v0.8 - Some text commands implemented, only static text for now though
authorWerner Johansson <wj@xnk.nu>
Sun, 23 Mar 2003 21:05:26 +0000 (13:05 -0800)
committerWerner Johansson <wj@xnk.nu>
Sun, 17 Oct 2010 00:36:02 +0000 (17:36 -0700)
Signed-off-by: Werner Johansson <wj@xnk.nu>

wj-uni.asm

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