// BRANDON Micromouse
// Test multitasking operating system for NMIT-0020 68HC11 board
#include "regs.asm" // 68HC11 register defines
#include "defs.asm" // definitions
// Start of each code/data section
// -----------------------------------------
SECT SECT_ZEROPAGE
// Used for small variables which are accessed often
*
* ZERO PAGE SECTION
*
ORG ZERO_PAGE_START
PORTO_Val RMB 1 // storage for current Port O value
// -----------------------------------------
SECT SECT_DATA
// Used for all global data
*
* DATA SECTION
*
// -----------------------------------------
SECT SECT_CCODE
*
* MAIN CODE
*
ORG C_CODE_START
// -----------------------------------------
SECT SECT_CODE
*
* MAIN CODE
*
ORG KERNEL_CODE_START
#undef INT_RESET
#define INT_RESET Reset // set reset vector
Reset:
LDAA #0x80 ; RAM 8000-80FF, Regs 0000-003F
STAA 0x103D
SoftReset:
BSET TMSK2 0x01 ; set main counter to 500khz
// Initialise serial system
LDAA #BAUD_9600
STAA BAUD // Baud rate = 9600
LDAA #SCCR2_TE+SCCR2_RE
STAA SCCR2 // Enable transmit and recieve using polling
BSET #OPTION OPTION_ADPU // power up A/D converter
LDAA #0
STAA SIO_Locked // unlock SIO to allow outputting of status
LDS #INIT_STACK ; load initialisation stack
JSR SIO_PutString
FCB 13,10,13,10,13,10
FCC 'Knl: Checking memory...'
FCB 13,10,0
JSR MM_CheckMem
JSR SIO_PutString
FCC 'Knl: Test complete'
FCB 13,10,13,10,0
JSR SIO_PutString
FCC 'Knl: Starting init code...'
FCB 13,10,13,10,0
JSR Init // initialise all systems
JSR SIO_PutString
FCB 13,10
FCC 'Knl: Starting main code...'
FCB 13,10,0
JSR _LED_off
JMP Start // start the main code
PutPortO
SEI
LDAA PORTO_Val
STAA PORTO
CLI
RTS
_Shutdown // void Shutdown() // resets the hc11
SEI
LDAA #0
STAA TMSK2 // Kill interrupt sources
STAA TMSK1 //
STAA PORTO // switch off motors, IR leds etc
JMP SoftReset
BadInterrupt // default interrupt handler
RTI
// -----------------------------------------
SECT SECT_INIT
// Each assembly module can put code in this section which will be
// executed at startup
*
* INITIALIZATION CODE
*
Init
LDAA #PORTO_LED_ENABLE
STAA PORTO_Val
JSR PutPortO
// -----------------------------------------
SECT SECT_OTHER
// All code/data with fixed destination addresses must go here
*
* VARIOUS OTHER CODE
*
ORG PORTA
FCB 16
// -----------------------------------------
#include "procman.asm"
#include "memman.asm"
#include "eventman.asm"
#include "serialio.asm"
#include "startup.asm"
#include "lcd.asm"
#include "keypad.asm"
// -----------------------------------------
SECT SECT_CODE
_EXITS_VAL:
FCB 1,2,4,8
_NUM_EXITS:
FCB 0,1,1,2,1,2,2,3
FCB 1,2,2,3,2,3,3,4
_DX:
FDB 0,1,-1,0
_DY:
FDB 1,0,0,-1
_DIRNAME
FCB 'N,'E,'W,'S
// -----------------------------------------
SECT SECT_INIT
RTS // return to caller at end of init section
// -----------------------------------------
SECT SECT_OTHER
ORG INT_VECTORS_START
#include "vectors.asm" // interrupt vectors
// -----------------------------------------