------------------------------------------------------------------------------- -- 1SBL TEST PAYLOAD -- -- DEVEMBER 2021 -- ------------------------------------------------------------------------------- 16#00# -> x"0000", ---- NOOP ---- Initialize all registers 16#01# -> x"0001", ---- NULL -> ADD.A ---- to zero. 16#02# -> x"0002", ---- NULL -> ADD.B ---- 16#03# -> x"0003", ---- NULL -> NEG.A ---- 16#04# -> x"0004", ---- NULL -> AND.A ---- 16#05# -> x"0005", ---- NULL -> AND.B ---- 16#06# -> x"0006", ---- NULL -> OR.A ---- 16#07# -> x"0007", ---- NULL -> OR.B ---- 16#08# -> x"0008", ---- NULL -> NOT.A ---- 16#09# -> x"0009", ---- NULL -> XNOR.A ---- 16#0A# -> x"000A", ---- NULL -> XNOR.B ---- 16#0B# -> x"000B", ---- NULL -> SRL.OP ---- 16#0C# -> x"000C", ---- NULL -> SRL.MAG ---- 16#0D# -> x"000D", ---- NULL -> SLL.OP ---- 16#0E# -> x"000E", ---- NULL -> SLL.MAG ---- 16#0F# -> x"000F", ---- 0x00 -> LIT.H ---- 16#10# -> x"0010", ---- 0x00 -> LIT.L ---- 16#11# -> x"0011", ---- NULL -> R.0 ---- 16#12# -> x"0012", ---- NULL -> R.1 ---- 16#13# -> x"0013", ---- NULL -> R.2 ---- 16#14# -> x"0014", ---- NULL -> R.3 ---- 16#15# -> x"0015", ---- NULL -> R.4 ---- 16#16# -> x"0016", ---- NULL -> R.5 ---- 16#17# -> x"0017", ---- NULL -> R.6 ---- 16#18# -> x"0018", ---- NULL -> R.7 ---- 16#19# -> x"0019", ---- NULL -> GA.0 ---- 16#1A# -> x"001A", ---- NULL -> GA.1 ---- 16#1B# -> x"001B", ---- NULL -> GA.2 ---- 16#1C# -> x"001C", ---- NULL -> GA.3 ---- 16#1D# -> x"0024", ---- NULL -> IV.0 ---- 16#1E# -> x"0025", ---- NULL -> IV.1 ---- 16#1F# -> x"0026", ---- NULL -> IV.2 ---- 16#20# -> x"0027", ---- NULL -> IV.3 ---- ------------------------------------------------------------------------------- -- CHECK FOR DIAGNOSTIC BOOT BIT SET -- ------------------------------------------------------------------------------- 16#21# -> x"1404", ---- STATUS -> AND.A --<- Mask STATUS[10] (DIAG_BOOT). 16#22# -> x"020F", ---- 0x02 -> LIT.H ---- 16#23# -> x"0308", ---- AND.Y -> NOT.A ---- 16#24# -> x"000F", ---- 0x00 -> LIT.H --<- Branch to 0xA0 when 16#25# -> x"A010", ---- 0xA0 -> LIT.L ---- DIAG_BOOT bit is set. 16#26# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#27# -> x"0520", ---- NOT.Y -> BRANCH.0 ---- ------------------------------------------------------------------------------- -- NORMAL BOOT, LOAD 4K WORDS FROM 2SBL OVER I2C -- ------------------------------------------------------------------------------- 16#28# -> x"100F", ---- 0x10 -> LIT.H --<- Start word counter at 4K. 16#29# -> x"FF10", ---- 0xFF -> LIT.L ---- 16#2A# -> x"0901", ---- LIT.Y -> ADD.A ---- 16#2B# -> x"FF0F", ---- 0xFF -> LIT.H --<- Load 0xFF (-1) into ADD.B. 16#2C# -> x"0902", ---- LIT.Y -> ADD.B ---- 16#2D# -> x"0111", ---- ADD.Y -> R.0 ---- Move SUM to R0/ADDRESS. 16#2E# -> x"000F", ---- 0x00 -> LIT.H --<- Prepare to jump to 0x60 16#2F# -> x"6010", ---- 0x60 -> LIT.L ---- 16#30# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#31# -> x"0022", ---- ENTER SUBROUTINE ---- 16#32# -> x"002A", ---- 0x00 -> REGION --<- Move to REGION = 0b00 and 16#33# -> x"0119", ---- ADD.Y -> GA.0 ---- store 2SBL word at same 16#34# -> x"001A", ---- 0x00 -> GA.1 ---- address in main memory. 16#35# -> x"001B", ---- 0x00 -> GA.2 ---- 16#36# -> x"001C", ---- 0x00 -> GA.3 ---- 16#37# -> x"1B1E", ---- R.1 -> M.STORE --<- Execute store. 16#38# -> x"0101", ---- ADD.Y -> ADD.A --<- Decrement word count. 16#39# -> x"000F", ---- 0x00 -> LIT.H --<- Branch past loop if carry 16#3A# -> x"3E10", ---- 0x3E -> LIT.L ---- 16#3B# -> x"0021", ---- BRANCH ON CARRY ---- 16#3C# -> x"2D10", ---- 0x2D -> LIT.L ---- 16#3D# -> x"001F", ---- JUMP --<- Loop to next address 16#3E# -> x"002B", ---- 0b0 -> BOOTMODE --<- DONE, boot from main memory. ------------------------------------------------------------------------------- -- SUBROUTINES DEFINED PAST THIS POINT -- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- 0x60 : READ SINGLE WORD FROM 2SBL -- -- R.0 = PARAM, ADDRESS -- -- R.1 = RETURN, READ DATA -- -- -- -- 2SBL AT LOCAL PERIPHERAL BUS (REGION 0b10), HWADDR 0x03 -- -- LPB DEVICE ADDRESSES: -- -- 0x0000..0020 - READY [R] -- -- 0x0000..0021 - STATUS [R] -- -- 0x0000..0022 - COMMAND [W] -- -- 0x0000..0023 - ADDRESS [W] -- -- 0x0000..0024 - DATA [R/W] -- ------------------------------------------------------------------------------- 16#60# -> x"000F", ---- 0x00 -> LIT.H --<- Prepare to access memory 16#01# -> x"0210", ---- 0x02 -> LIT.L ---- in REGION 0b10 (LPB). 16#62# -> x"092A", ---- LIT.Y -> REGION ---- 16#63# -> x"2010", ---- 0x20 -> LIT.L --<- Prepare to read from address 16#64# -> x"0919", ---- LIT.Y -> GA.0 ---- 0x0300000000000020, 16#65# -> x"0010", ---- 0x00 -> LIT.L ---- HWADDR=0x03, ADDR=0x00..20. 16#66# -> x"030F", ---- 0x03 -> LIT.H ---- 16#67# -> x"091C", ---- LIT.Y -> GA.3 ---- 16#68# -> x"001D", ---- EXECUTE M.LOAD --<- Read DEVICE READY register. 16#69# -> x"000F", ---- 0x00 -> LIT.H --<- Poll until DEVICE READY. 16#6A# -> x"6310", ---- 0x63 -> LIT.L ---- 16#6B# -> x"001C", ---- NULL -> GA.3 ---- 16#6C# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#6D# -> x"1220", ---- M.LOAD.Y -> BRANCH.0 ---- 16#6E# -> x"2310", ---- 0x23 -> LIT.L --<- Prepare to write ADDRESS. 16#6F# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#70# -> x"0010", ---- 0x00 -> LIT.L ---- 16#71# -> x"030F", ---- 0x03 -> LIT.H ---- 16#72# -> x"091C", ---- LIT.Y -> GA.3 ---- 16#73# -> x"0A1E", ---- R.0 -> M.STORE --<- Write ADDRESS = R.0 16#74# -> x"000F", ---- 0x00 -> LIT.H --<- Prepare to write COMMAND 16#75# -> x"2210", ---- 0x22 -> LIT.L ---- 16#76# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#77# -> x"0110", ---- 0x01 -> LIT.L ---- 16#78# -> x"091E", ---- LIT.Y -> M.STORE --<- Write COMMAND = 0x01 (READ). 16#79# -> x"2010", ---- 0x20 -> LIT.L --<- Wait until DEVICE READY. 16#7A# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#7B# -> x"0010", ---- 0x00 -> LIT.L ---- 16#7C# -> x"030F", ---- 0x03 -> LIT.H ---- 16#7D# -> x"091C", ---- LIT.Y -> GA.3 ---- 16#7E# -> x"001D", ---- EXECUTE M.LOAD --<- Read DEVICE READY register. 16#7F# -> x"000F", ---- 0x00 -> LIT.H --<- Poll until DEVICE READY. 16#80# -> x"7910", ---- 0x79 -> LIT.L ---- 16#81# -> x"001C", ---- NULL -> GA.3 ---- 16#82# -> x"0919", ---- LIT.Y -> GA.0 ---- 16#83# -> x"1220", ---- M.LOAD.Y -> BRANCH.0 ---- 16#84# -> x"0010", ---- 0x00 -> LIT.L --<- Finished READ, move DATA 16#85# -> x"030F", ---- 0x03 -> LIT.H ---- into R.1. 16#86# -> x"091C", ---- LIT.Y -> GA.3 ---- 16#87# -> x"000F", ---- 0x00 -> LIT.H ---- 16#88# -> x"2410", ---- 0x24 -> LIT.L ---- 16#89# -> x"001D", ---- EXECUTE M.LOAD ---- 16#8A# -> x"1212", ---- M.LOAD.Y -> R.1 ---- 16#8B# -> x"0023", ---- EXIT SUBROUTINE --<- Done, return. ------------------------------------------------------------------------------- -- 0xA0 : DIAGNOSTIC BOOT, REPROGRAM 2SBL OVER ROOT SERIAL PORT -- ------------------------------------------------------------------------------- 16#A0# -> x"0000", ---- NOOP ---- NOT IMPLEMENTED