// K1-16/16 Microcode // 2015-12-22 16:10:39 : i2cSendByte__6uint16_6uint16 ( uint16 -- uint16 ) Millicoded // Size: 25 microcodes mc Dup mc Sli15+15-8 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc i2cSendBit__5int16_5int16 mc Nip mc Int8+0 mc i2cReadBit__5int16_5int16 mc BraIf0+4 mc i2cSendEnd mc Int8+1 mc Nip mc Bra+2 mc Int8+0 mc Nip mc Ret : i2cReadByte__4bool_6uint16 ( bool -- uint16 ) Millicoded // Size: 21 microcodes mc Int8+0 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc i2cReadBit__5int16_5int16 mc Lget+255 mc BraIf0+3 mc i2cSendBit1 mc i2cSendEnd mc Bra+1 mc i2cSendBit0 mc Dup mc MNip0_Next-2 : i2cReadByte__6uint16 ( -- uint16 ) // logchar 'i' // ("i2c_RB "); // logchar '2' // logchar 'c' // logchar '_' // logchar 'R' // logchar 'B' // logchar ' ' psh alu xor alu jp i2cReadByte__4bool_6uint16 : i2cStartReading__6uint16 ( -- uint16 ) Millicoded // Size: 8 microcodes mc i2cSendStart mc Int8+161 mc i2cSendByte__6uint16_6uint16 mc Ret : i2cStartWritingAtAddress__6uint16_6uint16 ( uint16 -- uint16 ) Millicoded // Size: 30 microcodes mc i2cSendStart mc Int8+160 mc i2cSendByte__6uint16_6uint16 mc BraIf0+12 mc i2cWaitEndWriting__6uint16 mc BraIf0+3 mc Int8+1 mc Nip mc Bra+16 mc i2cSendStart mc Int8+160 mc i2cSendByte__6uint16_6uint16 mc BraIf0+3 mc Int8+1 mc Nip mc Bra+9 mc Dup mc Sru15+15-8 mc i2cSendByte__6uint16_6uint16 mc Or1 mc Bra+3 mc Dup mc i2cSendByte__6uint16_6uint16 mc Bool mc Nip mc Ret : i2cStartReadingAtAddress__6uint16_6uint16 ( uint16 -- uint16 ) Millicoded // Size: 13 microcodes mc Dup mc i2cStartWritingAtAddress__6uint16_6uint16 mc BraIf0+3 mc Int8+1 mc Nip mc Bra+2 mc i2cStartReading__6uint16 mc Nip mc Ret : i2cWaitEndWriting__6uint16 ( -- uint16 ) Millicoded // Size: 17 microcodes mc Int8+100 mc i2cStartReading__6uint16 mc BraIf0+6 mc PshHP mc mmPeek mc BraIf0+3 mc Int8+100 mc BusyWait mc Bra-8 mc i2cSendEnd mc Dup mc Not mc MNip0_Next-1 : i2cReadData__6uint16AEC_ ( uint16[]¢ ) Millicoded // Size: 17 microcodes mc Int8+0 mc Dup mc Lget+254 mc Count mc Ult mc BraIf0+6 mc i2cReadByte__6uint16 mc Lget+254 mc Lvar+254 mc Peekpp mc AtIndexPoke mc Bra-11 mc MDrop0_Next-2 : i2cReadData__6uint16_6uint16AEC_6uint16_6uint16_3Err ( uint16, uint16[]¢, uint16, uint16 -- Err ) Millicoded // Size: 24 microcodes mc Lget+253 mc i2cStartReadingAtAddress__6uint16_6uint16 mc BraIf0+2 mc Int8+3 mc Bra+14 mc Lget+255 mc Lget+255 mc Ult mc BraIf0+9 mc Lget+255 mc Lget+255 mc Eq mc i2cReadByte__4bool_6uint16 mc Lget+253 mc Lvar+253 mc Peekpp mc AtIndexPoke mc Bra-13 mc Int8+0 mc MNip0_Next-4 : i2cWriteData__6uint16_6uint16AEC_6uint16_6uint16_6uint16_3Err ( uint16, uint16[]¢, uint16, uint16, uint16 -- Err ) Millicoded // Size: 43 microcodes mc Lget+254 mc Lget+254 mc Ult mc BraIf0+33 mc Lget+252 mc i2cStartWritingAtAddress__6uint16_6uint16 mc BraIf0+2 mc Int8+3 mc Bra+29 mc Lget+255 mc Lget+253 mc Sub mc Lget+255 mc Lget+250 mc Lget+253 mc Subq+1 mc And mc Sub mc Umin mc Dup mc Lvar+250 mc AddPoke mc PshHP mc Peekmm mc BraIf0+9 mc Lget+252 mc Lvar+252 mc Peekpp mc AtIndexPeek mc i2cSendByte__6uint16_6uint16 mc BraIf0-9 mc Int8+2 mc MNip0-1 mc Bra+4 mc i2cSendEnd mc MDrop0-1 mc Bra-37 mc Int8+0 mc MNip0_Next-5 : i2cVerifyData__6uint16_6uint16AEC_6uint16_6uint16_3Err ( uint16, uint16[]¢, uint16, uint16 -- Err ) Millicoded // Size: 28 microcodes mc Lget+253 mc i2cStartReadingAtAddress__6uint16_6uint16 mc BraIf0+2 mc Int8+3 mc Bra+18 mc Lget+255 mc Lget+255 mc Ult mc BraIf0+13 mc Lget+254 mc Lvar+254 mc Peekpp mc AtIndexPeek mc Lget+254 mc Lget+254 mc Eq mc i2cReadByte__4bool_6uint16 mc Ne mc BraIf0-14 mc i2cSendEnd mc Int8+2 mc Bra+1 mc Int8+0 mc MNip0_Next-4 : i2cGetctl__11I2cDrvrDataC_6uint16_6uint16 ( I2cDrvrData¢, uint16 -- uint16 ) Millicoded // Size: 21 microcodes mc Dup mc Int8+7 mc Eq mc BraIf0+4 mc Lget+255 mc ItemGet+1 mc Msbit mc Bra+8 mc Dup mc Int8+8 mc Eq mc BraIf0+3 mc Lget+255 mc ItemGet+2 mc Bra+1 mc Int8+0 mc MNip0_Next-2 : i2cSetctl__11I2cDrvrDataC_6uint16_6uint16_ ( I2cDrvrData¢, uint16, uint16 ) Millicoded // Size: 5 microcodes mc MDrop0_Next-3 : i2cWriteBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err ( I2cDrvrData¢, uint32, uint16[]¢, uint16, uint16 -- Err ) Millicoded // Size: 17 microcodes mc Lget+251 mc ItemGet+0 mc Select mc Lget+253 mc Lget+253 mc Lget+253 mc Lget+253 mc Lget+247 mc ItemGet+1 mc i2cWriteData__6uint16_6uint16AEC_6uint16_6uint16_6uint16_3Err mc Deselect mc Dup mc MNip0_Next-7 : i2cReadBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err ( I2cDrvrData¢, uint32, uint16[]¢, uint16, uint16 -- Err ) Millicoded // Size: 15 microcodes mc Lget+251 mc ItemGet+0 mc Select mc Lget+253 mc Lget+253 mc Lget+253 mc Lget+253 mc i2cReadData__6uint16_6uint16AEC_6uint16_6uint16_3Err mc Deselect mc Dup mc MNip0_Next-7 : i2cVerifyBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err ( I2cDrvrData¢, uint32, uint16[]¢, uint16, uint16 -- Err ) Millicoded // Size: 15 microcodes mc Lget+251 mc ItemGet+0 mc Select mc Lget+253 mc Lget+253 mc Lget+253 mc Lget+253 mc i2cVerifyData__6uint16_6uint16AEC_6uint16_6uint16_3Err mc Deselect mc Dup mc MNip0_Next-7 : new__8ucs2charAEC_6uint16_14I2cBlockDevice ( ucs2str¢, uint16 -- I2cBlockDevice ) Millicoded // Size: 46 microcodes mc Dup mc Select mc i2c_log2eepromsize__6uint16 mc Dup mc Sru15+15-1 mc Subq+1 mc Deselect mc Lget+253 mc Int8+11 mc Int16+128 mc Int8+3 mc Alloc mc ToR mc Int8+1 mc Lget+253 mc Sl mc PeekR mc ItemSet+1 mc Int8+1 mc Lget+252 mc Lget+252 mc Sub mc Sl mc PeekR mc ItemSet+2 mc Lget+252 mc PeekR mc ItemSet+0 mc FromR mc DupToR mc Int8+i2cGetctl__11I2cDrvrDataC_6uint16_6uint16&$FF mc Int16+(i2cGetctl__11I2cDrvrDataC_6uint16_6uint16>>8)&$FF mc Int8+i2cSetctl__11I2cDrvrDataC_6uint16_6uint16_&$FF mc Int16+(i2cSetctl__11I2cDrvrDataC_6uint16_6uint16_>>8)&$FF mc Int8+i2cReadBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err&$FF mc Int16+(i2cReadBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err>>8)&$FF mc Int8+i2cWriteBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err&$FF mc Int16+(i2cWriteBlocks__11I2cDrvrDataC_6uint32_6uint16AEC_6uint16_6uint16_3Err>>8)&$FF mc new__8ucs2charAEC_6uint16_8DrvrDataC_6uint16B8DrvrDataC6uint16D_4voidB8DrvrDataC6uint166uint16D_3ErrB8DrvrDataC6uint326uint16AEC6uint166uint16D_3ErrB8DrvrDataC6uint326uint16AEC6uint166uint16D_11BlockDevice mc FromR mc DropStr mc MNip0_Next-4 : i2cD0C0 () ld dnop,io_i2c, i2c_data=0, i2c_clk=0 // Data:0 Clock:0 jp i2cDelay : i2cD1C0 () ld dnop,io_i2c, i2c_data=1, i2c_clk=0 // Data:1 Clock:0 jp i2cDelay : i2cD0C1 () ld dnop,io_i2c, i2c_data=0, i2c_clk=1 // Data:0 Clock:1 jp i2cDelay : i2cD1C1 () ld dnop,io_i2c, i2c_data=1, i2c_clk=1 // Data:1 Clock:1 jp i2cDelay : i2cD1C0AddBit__5int16_5int16 ( int16 -- int16 ) ld dtmp,io_i2c, i2c_data=1, i2c_clk=0 // Data:1 Clock:0 and read & append bit to alu tst dtmp if bit0 add_c alu // nodelay else add alu // nodelay then jp i2cDelay : i2cDelay () // io // 1 // jp // 2 clr clock4 // 1..4 nop // 4 set clock4 // 4 next_m // 3 : i2cSendStart () Millicoded // Size: 8 microcodes mc i2cD1C1 mc i2cD0C1 mc i2cD0C0 mc Ret : i2cSendEnd () Millicoded // Size: 8 microcodes mc i2cD0C0 mc i2cD0C1 mc i2cD1C1 mc Ret : i2cSendBit1 () Millicoded // Size: 8 microcodes mc i2cD1C0 mc i2cD1C1 mc i2cD1C0 mc Ret : i2cSendBit0 () Millicoded // Size: 8 microcodes mc i2cD0C0 mc i2cD0C1 mc i2cD0C0 mc Ret : i2cSendBit__5int16_5int16 ( int16 -- int16 ) add alu // nodelay ld cmd,ival :bit15 if 1 dw i2cSendBit1 :bit15 else dw i2cSendBit0 :bit15 then : i2cReadBit__5int16_5int16 ( int16 -- int16 ) Millicoded // Size: 10 microcodes mc i2cD1C0 mc i2cD1C1 mc Dup mc i2cD1C0AddBit__5int16_5int16 mc Nip mc Ret : i2c_log2eepromsize__6uint16 ( -- uint16 ) Millicoded // Size: 64 microcodes mc Int8+16 mc Alloc mc Int8+0 mc Lget+255 mc RangeAll mc i2cReadData__6uint16_6uint16AEC_6uint16_6uint16_3Err mc BraIf0+2 mc Int8+3 mc Bra+47 mc Int8+16 mc PshHP mc Peekmm mc And0 mc Bra+5 mc Lget+255 mc Lget+255 mc AtIndexPeek mc Int8+255 mc Eq mc BraIf1-10 mc Dup mc Int8+0 mc Lt mc BraIf0+14 mc Int8+254 mc Lget+254 mc Int8+0 mc AtIndexPoke mc Int8+0 mc Lget+254 mc Int8+0 mc Int8+1 mc Int8+16 mc i2cWriteData__6uint16_6uint16AEC_6uint16_6uint16_6uint16_3Err mc BraIf0+3 mc Int8+3 mc MNip0-1 mc Bra+18 mc Int8+14 mc Int8+1 mc Lget+255 mc Sl mc Lget+253 mc RangeAll mc i2cVerifyData__6uint16_6uint16AEC_6uint16_6uint16_3Err mc Int8+0 mc Eq mc BraIf0+5 mc PshHP mc mmPeek mc Int8+2 mc Ugt mc BraIf1-14 mc Dup mc Addq+1 mc MNip0-2 mc ToR mc DropStr mc FromR mc Ret