* * micro-C driver under FLEX * * 12-Dec-81 M.Ohta,H.Tezuka * ORG $100 _00000 LDX $CC2B LOAD MEM END LEAS 1,X JSR $CD24 CR/LF LEAS -256,S ALLOCATE WORK AREA LEAU 128,S POINT TO CONTENT OF ARGUMENT VECTOR STU ,S BSR _0C004 GET ARGV[0] CLRA ARGC*2 _0C000 ADDA #2 INCREMENT ARGC STU A,S PSHS A BSR _0C009 GET NEXT ARGV PULS A CMPU #-1 BNE _0C000 STU A,S LEAU 128,S TFR A,B _0C001 LDX A,S PSHU X SUBA #2 BNE _0C001 LDX ,S PSHU X LEAS ,U LSRB CLRA PSHS D,U push argc,argv LEAY _99999,PCR clear globals LDX #_GLOBALS _0C002 BEQ _0C003 CLR ,Y+ LEAX -1,X BRA _0C002 _0C003 LEAY _99999,PCR LBSR _INITIALIZE call initializer LBSR _main exit JSR $D403 FMS close JMP $CD03 WARMS _0C004 LDX $CC14 _0C005 CMPX #$C080 BEQ _0C007 LDB ,-X CMPB #$0D BEQ _0C006 CMPB $CC02 BNE _0C005 _0C006 LEAX 1,X _0C007 LDB ,X+ CMPB #' BEQ _0C008 STB ,U+ CMPX #$CC02 BLO _0C007 _0C008 CLR ,U+ RTS _0C009 JSR $CD27 CMPA #' BEQ _0C009 CMPA #$0D BEQ _0C013 CMPA $CC02 BEQ _0C013 _0C010 CMPA #'" BEQ _0C014 CMPA #'' BEQ _0C014 CMPA #' BEQ _0C012 CMPA #$0D BEQ _0C012 CMPA $CC02 BEQ _0C012 STA ,U+ _0C011 JSR $CD27 BRA _0C010 _0C012 CLR ,U+ RTS _0C013 LDU #-1 RTS _0C014 PSHS A LDX $CC14 _0C015 LDA ,X+ CMPA #$0D BEQ _0C016 CMPA ,S BEQ _0C017 STA ,U+ BRA _0C015 _0C016 LEAX -1,X _0C017 STX $CC14 PULS A BRA _0C011 * * run time support * FMS LDX 2,S LDA 5,S STA ,X LDA 7,S TST 59,X BMI _FMS1 CMPA #$0A BNE _FMS0 LDA #$0D _FMS0 CMPA #$09 BNE _FMS1 LDA #$20 _FMS1 JSR $D406 BNE _FMSERR TFR A,B TST 59,X BMI _FMS9 CMPB #$0D BNE _FMS8 LDB #$0A _FMS8 CMPB #$09 BNE _FMS9 LDB #$20 _FMS9 CLRA RTS _FMSERR LDD #-1 RTS GETCH PSHS X,Y,U JSR $CD15 get character TFR A,B ANDB #$7F CMPB #26 control-Z ? BNE _0G001 LDD #-1 PULS X,Y,U,PC _0G001 CMPB #$0D BNE _0G002 LDB #$0A _0G002 CLRA PULS X,Y,U,PC * PUTCH LDD 2,S PSHS D,X,Y,U TFR B,A CMPA #$09 BNE _0P001 LDA #$20 _0P001 CMPA #$0A BNE _0P002 JSR $CD24 put CR/LF PULS D,X,Y,U,PC _0P002 JSR $CD18 put character PULS D,X,Y,U,PC * PUTCH2 LDD 2,S PSHS D LDA $CC22 PSHS A LDA #$FF STA $CC22 LDD 1,S PSHS D BSR PUTCH LEAS 2,S PULS A STA $CC22 PULS D,PC * _00001 PSHS D,X,Y multiply LDA ,S LDB 3,S MUL STB 4,S LDD 1,S MUL STB 5,S LDA 1,S LDB 3,S MUL ADDA 4,S ADDA 5,S LEAS 6,S RTS * _00002 CLR ,-S signed divide CMPX #0 BPL _02000 COM ,S EXG D,X LBSR _00020 EXG D,X _02000 TSTA BPL _02001 COM ,S LBSR _00020 _02001 LBSR _00010 TFR X,D TST ,S+ BPL _02002 LBSR _00020 _02002 RTS * _00003 LBSR _00010 unsigned divide TFR X,D RTS * _00004 CLR ,-S signed modulous CMPX #0 BPL _04000 EXG D,X BSR _00020 EXG D,X _04000 TSTA BPL _04001 COM ,S BSR _00020 _04001 BSR _00010 TST ,S+ BPL _04002 BSR _00020 _04002 RTS * _00005 BSR _00010 unsigned modulous RTS * _00006 CMPX #0 signed left shift BMI _06001 _06000 BEQ _06009 LSLB ROLA LEAX -1,X BRA _06000 _06001 BEQ _06009 ASRA RORB LEAX 1,X BRA _06001 _06009 RTS * _00007 CMPX #0 unsined left shift BMI _07001 _07000 BEQ _07009 LSLB ROLA LEAX -1,X BRA _07000 _07001 BEQ _07009 LSRA RORB LEAX 1,X BRA _07001 _07009 RTS * _00008 CMPX #0 sined right shift BMI _08001 _08000 BEQ _08009 ASRA RORB LEAX -1,X BRA _08000 _08001 BEQ _08009 LSLB ROLA LEAX 1,X BRA _08001 _08009 RTS * _00009 CMPX #0 unsined right shift BMI _09001 _09000 BEQ _09009 LSRA RORB LEAX -1,X BRA _09000 _09001 BEQ _09009 LSLB ROLA LEAX 1,X BRA _09001 _09009 RTS * _00020 NEGA negate D reg NEGB SBCA #0 RTS * _00010 PSHS D,X divide subroutine CLRA CLRB LDX #17 _00011 SUBD 2,S BCC _00012 ADDD 2,S _00012 ROL 1,S ROL ,S ROLB ROLA LEAX -1,X BNE _00011 RORA RORB COM 1,S COM ,S PULS X LEAS 2,S RTS * * micro-C user program * * OPT LIST LIB c.out include compilers output * OPT NOL * * * _99999 EQU * global vars allocated here * END _00000