EASy68K  
It is currently Sun Dec 08, 2019 3:55 am

All times are UTC




Post new topic Reply to topic  [ 24 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Tue Aug 02, 2011 3:33 pm 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
Code:
***************** Declarations ****************
PgCR      equ $800001         ;Port general control register
PaCR      equ $80000D             ;PortA control register
PaDDR      equ $800005         ;PortA data direction register
PaDR      equ $800011         ;PortA data register   
PbCR      equ $80000f             ;Portb control register
PbDDR      equ $800007         ;Portb data direction register
pbdr      equ $800013         ;Portb data register   




KeyStore   equ $400500      ;Temp store for keypressed
      
      Org $400400      ;Start address

Start      Move.b #$00,PgCR   ;Set port to general mode
      Move.b #$80,PaCR   ;Set portA to submode IX
      Move.b #$0F,PaDDR   ;Set bits PA0-PA3=outputs, PA4-PA7=inputs
      Move.b #$80,PbCR   ;Set portb to submode IX
      Move.b #$FF,PbDDR   ;Set bits PA0-PA7=outputs
      ;Move.b   #$00,pbdr

      Move.w   #3,D6      ;use D6 as 7segment counter
Again      Bsr     Get_Key      ;key pressed?
      Cmp.b   #$10,D0      ;if return code is $10
      Beq     Again      ;   check again
      Move.b  D0,KeyStore   ;Save key
      Bsr     Delay      ;Wait for a while
      Bsr     Get_Key      ;check key again
      Move.b  KeyStore,D1
      Cmp.b   D0,D1      ;is there a match?
      Bne     Again      ;no: check again
      Bsr     Display           ;if not $10 then display
      
      

haha      sub.b   #1,D6      ;use d5 as counter 7segment
      Cmp.b   #$00,D6      ;if not zero
      Beq   end
      Bra     Again           ;OR keep scanning

Get_Key      Movem.w D1-D3,-(SP)
      Clr.w   D0      ;Build hex. code in D0
      Move.b  #$FE,D1      ;Ground column 0
      Move.w   #4,D2      ;use D2 as counter
Next      Move.b   D1,PaDR      ;activate column line
      Move.b  PaDR,D0      ;read port A
      Andi.b   #$F0,D0      ;isolate column lines
      Cmp.b   #$F0,D0      ;any row line active?
      Beq    NextCol         ;yes: means no key goto next column
      Bra     EndScan    ;else same means key pressed
NextCol           Rol.b   #1,D1      ;rotate column code
      sub.b   #1,D2      ;decrement counter by one
      Cmp.b   #$00,D2      ;if not zero
      Bne     Next      ;   check key again
EndScan         Bsr     KeyCode
      Movem.w   (SP)+,D1-D3   ;restore registers
      Rts

KeyCode      Move.b   D1,D4           ;Store column
      Not.b   D4         ;Complement column code
      Move.b  D0,D5           ;Store row code
      Not.b   D5           ;Complement row code
      Andi.b  #$F0,D5           ;Mask bits 0-3
      Add.b   D4,D5           ;Combine row and column
      Move.b  D5,D0           ;Return new code
      bsr     IdKey
      rts

IdKey          Movem.w D1-D3,-(SP)
      move.b #$11,D1  ;key 1  ;A series of if-then-else 
              cmp.b  D1,D0      ;to identify the correct key
              beq    Key1
              move.b #$12,D1  ;key 2
              cmp.b  D1,D0
              beq    Key2
              move.b #$14,D1  ;key 3
              cmp.b  D1,D0
              beq    Key3
              move.b #$18,D1  ;key F
              cmp.b  D1,D0
              beq    KeyA
              move.b #$21,D1  ;key 4
              cmp.b  D1,D0
              beq    Key4
              move.b #$22,D1  ;key 5
              cmp.b  D1,D0
              beq    Key5
              move.b #$24,D1  ;key 6
              cmp.b  D1,D0
              beq    Key6
              move.b #$28,D1  ;key E
              cmp.b  D1,D0
              beq    KeyB
              move.b #$44,D1  ;key 9
              cmp.b  D1,D0
              beq    Key9
              move.b #$42,D1  ;key 8
              cmp.b  D1,D0
              beq    Key8
              move.b #$41,D1  ;key 7
              cmp.b  D1,D0
              beq    Key7
              move.b #$48,D1  ;key D
              cmp.b  D1,D0
              beq    KeyC
              move.b #$81,D1  ;key F
              cmp.b  D1,D0
              beq    KeyF
              move.b #$82,D1  ;key 0
              cmp.b  D1,D0
              beq    Key0
              move.b #$84,D1  ;key E
              cmp.b  D1,D0
              beq    KeyE
              move.b #$88,D1  ;key C
              cmp.b  D1,D0
      beq    KeyD
      Bra    Exist

Key1         move.b #$01,D0   ;
      bra    Exist
Key2      move.b #$02,D0   ;
      bra    Exist
Key3      move.b #$03,D0   ;
      bra    Exist
KeyF      move.b #$0F,D0   ;
      bra    Exist
Key4      move.b #$04,D0   ;
      bra    Exist
Key5      move.b #$05,D0   ;
      bra    Exist
Key6      move.b #$06,D0   ;
      bra    Exist
KeyE      move.b #$0E,D0   ;
      bra    Exist
Key9      move.b #$09,D0   ;
      bra    Exist
Key8      move.b #$08,D0   ;
      bra    Exist
Key7      move.b #$07,D0   ;
      bra    Exist
KeyD      move.b #$0D,D0   ;
      bra    Exist
KeyA      move.b #$0A,D0   ;
      bra    Exist
Key0      move.b #$00,D0   ;
      bra    Exist
KeyB      move.b #$0B,D0   ;
      bra    Exist
KeyC      move.b #$0C,D0   ;   
Exist      Movem.w   (SP)+,D1-D3
      rts
      

Delay      Movem.w D1-D3,-(SP)
      Move.l #95000,d1
Here          subq.l #1,d1
              Bne    Here
      Movem.w   (SP)+,D1-D3
              rts

Display      Trap   #11
      DC.W    8
      Trap   #11
      DC.W    3

      Andi.b  #$0F,D0
      cmp.b  #3,D6      ;to identify the correct number
              beq   satu
      cmp.b  #2,D6
      beq   dua
      cmp.b  #1,D6
      beq   tiga
      ;cmp.b  #3,D6
      ;beq   empat


satu      add.b   #$80,D0
      bsr   hihi
dua       add.b   #$40,D0
      bsr   hihi
tiga      add.b   #$20,D0
      bsr   hihi


hihi      Move.b   D0,pbdr
      bsr   delay
              Bsr     haha   
      
              
      RTS



delay   move.l   #55,d7
del1   subq.l   #1,d7
   bne   del1
   
   rts

end


(Admin edit - Added code tags)


this is an incomplete program that when the user push a keypad limited only 3 number, each number will be display on the monitor and 7 segment
but,when i enter number 4, there wil be an error,
but if i enter number 1 it can be continue


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 03, 2011 1:15 am 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
Well, I'd observe that different people wrote different parts of this code.

Some of the later code seems to confuse BRA (branch always) and BSR (branch subroutine), and how subroutines work and return. These problems probably cause it to malfunction in a couple of ways.

This code uses some unspecified board, using TRAP calls that aren't documented/explained. As such it's not going to be easy to test on EaSY68K, or debug.

The keypad is scanned, probably a 4x4, the decode is a little verbose.

What is the desired functionality?

Cleaned up so mortals can decipher it..
Code:
***************** Declarations ****************
PgCR    equ     $800001         ;Port general control register

PaCR    equ     $80000D         ;PortA control register
PaDDR   equ     $800005         ;PortA data direction register
PaDR    equ     $800011         ;PortA data register

PbCR    equ     $80000f         ;PortB control register
PbDDR   equ     $800007         ;PortB data direction register
PbDR    equ     $800013         ;PortB data register

;****************************************************************************

KeyStore equ    $400500         ;Temp store for keypressed

;****************************************************************************

        Org     $400400         ;Start address

;****************************************************************************

Start   Move.b  #$00,PgCR       ;Set port to general mode

        Move.b  #$80,PaCR       ;Set portA to submode IX
        Move.b  #$0F,PaDDR      ;Set bits PA0-PA3=outputs, PA4-PA7=inputs

        Move.b  #$80,PbCR       ;Set portb to submode IX
        Move.b  #$FF,PbDDR      ;Set bits PA0-PA7=outputs
        Move.b  #$00,PbDR

        Move.w   #3,D6          ;use D6 as 7segment counter
Again   Bsr     Get_Key         ;key pressed?
        Cmp.b   #$10,D0         ;if return code is $10
        Beq     Again           ;   check again

        Move.b  D0,KeyStore     ;Save key
        Bsr     Delay           ;Wait for a while
        Bsr     Get_Key         ;check key again
        Move.b  KeyStore,D1
        Cmp.b   D0,D1           ;is there a match?
        Bne     Again           ;no: check again

        Bsr     Display         ;if not $10 then display

haha    ;WHY?

        sub.b   #1,D6           ;use d5 as counter 7segment
        Cmp.b   #$00,D6         ;if not zero
        Beq     end             ;REALLY?

        Bra     Again           ;OR keep scanning

;****************************************************************************

Get_Key
        Movem.w D1-D3,-(SP)
        Clr.w   D0              ;Build hex. code in D0
        Move.b  #$FE,D1         ;Ground column 0
        Move.w  #4,D2           ;use D2 as counter
Next    Move.b  D1,PaDR         ;activate column line
        Move.b  PaDR,D0         ;read port A
        Andi.b  #$F0,D0         ;isolate column lines
        Cmp.b   #$F0,D0         ;any row line active?
        Beq     NextCol         ;yes: means no key goto next column
        Bra     EndScan         ;else same means key pressed
NextCol
        Rol.b   #1,D1           ;rotate column code
        sub.b   #1,D2           ;decrement counter by one
        Cmp.b   #$00,D2         ;if not zero
        Bne     Next            ;   check key again
EndScan
        Bsr     KeyCode
        Movem.w (SP)+,D1-D3     ;restore registers
        Rts

;****************************************************************************

KeyCode Move.b  D1,D4           ;Store column
        Not.b   D4              ;Complement column code
        Move.b  D0,D5           ;Store row code
        Not.b   D5              ;Complement row code
        Andi.b  #$F0,D5         ;Mask bits 0-3
        Add.b   D4,D5           ;Combine row and column
        Move.b  D5,D0           ;Return new code
        bsr     IdKey
        rts

;****************************************************************************

IdKey   Movem.w D1-D3,-(SP)

        move.b  #$11,D1         ;key 1  ;A series of if-then-else
        cmp.b   D1,D0           ;to identify the correct key
        beq     Key1

        move.b  #$12,D1         ;key 2
        cmp.b   D1,D0
        beq     Key2

        move.b  #$14,D1         ;key 3
        cmp.b   D1,D0
        beq     Key3

        move.b  #$18,D1         ;key F
        cmp.b   D1,D0
        beq     KeyA

        move.b  #$21,D1         ;key 4
        cmp.b   D1,D0
        beq     Key4

        move.b  #$22,D1         ;key 5
        cmp.b   D1,D0
        beq     Key5

        move.b  #$24,D1         ;key 6
        cmp.b   D1,D0
        beq     Key6

        move.b  #$28,D1         ;key E
        cmp.b   D1,D0
        beq     KeyB

        move.b  #$44,D1         ;key 9
        cmp.b   D1,D0
        beq     Key9

        move.b  #$42,D1         ;key 8
        cmp.b   D1,D0
        beq     Key8

        move.b  #$41,D1         ;key 7
        cmp.b   D1,D0
        beq     Key7

        move.b  #$48,D1         ;key D
        cmp.b   D1,D0
        beq     KeyC

        move.b  #$81,D1         ;key F
        cmp.b   D1,D0
        beq     KeyF

        move.b  #$82,D1         ;key 0
        cmp.b   D1,D0
        beq     Key0

        move.b  #$84,D1         ;key E
        cmp.b   D1,D0
        beq     KeyE

        move.b  #$88,D1         ;key C
        cmp.b   D1,D0
        beq     KeyD

        Bra     Exist

Key1    move.b  #$01,D0         ;
        bra     Exist

Key2    move.b  #$02,D0         ;
        bra     Exist

Key3    move.b  #$03,D0         ;
        bra     Exist

KeyF    move.b  #$0F,D0         ;
        bra     Exist

Key4    move.b  #$04,D0         ;
        bra     Exist

Key5    move.b  #$05,D0         ;
        bra     Exist

Key6    move.b  #$06,D0         ;
        bra     Exist

KeyE    move.b  #$0E,D0         ;
        bra     Exist

Key9    move.b  #$09,D0         ;
        bra     Exist

Key8    move.b  #$08,D0         ;
        bra     Exist

Key7    move.b  #$07,D0         ;
        bra     Exist

KeyD    move.b  #$0D,D0         ;
        bra     Exist

KeyA    move.b  #$0A,D0         ;
        bra     Exist

Key0    move.b  #$00,D0         ;
        bra     Exist

KeyB    move.b  #$0B,D0         ;
        bra     Exist

KeyC    move.b  #$0C,D0         ;

Exist   Movem.w (SP)+,D1-D3
        rts

;****************************************************************************

Delay   Movem.w D1-D3,-(SP)
        Move.l  #95000,d1
Here    subq.l  #1,d1
        Bne     Here
        Movem.w (SP)+,D1-D3
        rts

;****************************************************************************

Display Trap    #11
        DC.W    8

        Trap    #11
        DC.W    3

        Andi.b  #$0F,D0

        cmp.b   #3,D6           ;to identify the correct number
        beq     satu

        cmp.b   #2,D6
        beq     dua

        cmp.b   #1,D6
        beq     tiga

      ;cmp.b  #3,D6
      ;beq   empat

;DROPS HERE, WHY?

satu    add.b   #$80,D0
        bsr     hihi            ;REALLY?

dua     add.b   #$40,D0
        bsr     hihi            ;REALLY?

tiga    add.b   #$20,D0
        bsr     hihi            ;REALLY?

hihi    Move.b  D0,PbDR
        bsr     delay
        Bsr     haha            ;WHY?

        RTS

;****************************************************************************

delay   move.l  #55,d7
del1    subq.l  #1,d7
        bne     del1
        rts

;****************************************************************************

        end     Start


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 03, 2011 2:23 am 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
clive wrote:
Well, I'd observe that different people wrote different parts of this code.

Some of the later code seems to confuse BRA (branch always) and BSR (branch subroutine), and how subroutines work and return. These problems probably cause it to malfunction in a couple of ways.

This code uses some unspecified board, using TRAP calls that aren't documented/explained. As such it's not going to be easy to test on EaSY68K, or debug.

The keypad is scanned, probably a 4x4, the decode is a little verbose.

What is the desired functionality?

Cleaned up so mortals can decipher it..
Code:
***************** Declarations ****************
PgCR    equ     $800001         ;Port general control register

PaCR    equ     $80000D         ;PortA control register
PaDDR   equ     $800005         ;PortA data direction register
PaDR    equ     $800011         ;PortA data register

PbCR    equ     $80000f         ;PortB control register
PbDDR   equ     $800007         ;PortB data direction register
PbDR    equ     $800013         ;PortB data register

;****************************************************************************

KeyStore equ    $400500         ;Temp store for keypressed

;****************************************************************************

        Org     $400400         ;Start address

;****************************************************************************

Start   Move.b  #$00,PgCR       ;Set port to general mode

        Move.b  #$80,PaCR       ;Set portA to submode IX
        Move.b  #$0F,PaDDR      ;Set bits PA0-PA3=outputs, PA4-PA7=inputs

        Move.b  #$80,PbCR       ;Set portb to submode IX
        Move.b  #$FF,PbDDR      ;Set bits PA0-PA7=outputs
        Move.b  #$00,PbDR

        Move.w   #3,D6          ;use D6 as 7segment counter
Again   Bsr     Get_Key         ;key pressed?
        Cmp.b   #$10,D0         ;if return code is $10
        Beq     Again           ;   check again

        Move.b  D0,KeyStore     ;Save key
        Bsr     Delay           ;Wait for a while
        Bsr     Get_Key         ;check key again
        Move.b  KeyStore,D1
        Cmp.b   D0,D1           ;is there a match?
        Bne     Again           ;no: check again

        Bsr     Display         ;if not $10 then display

haha    ;WHY?

        sub.b   #1,D6           ;use d5 as counter 7segment
        Cmp.b   #$00,D6         ;if not zero
        Beq     end             ;REALLY?  => this one to end the program if 3 number is entered

        Bra     Again           ;OR keep scanning

;****************************************************************************

Get_Key
        Movem.w D1-D3,-(SP)
        Clr.w   D0              ;Build hex. code in D0
        Move.b  #$FE,D1         ;Ground column 0
        Move.w  #4,D2           ;use D2 as counter
Next    Move.b  D1,PaDR         ;activate column line
        Move.b  PaDR,D0         ;read port A
        Andi.b  #$F0,D0         ;isolate column lines
        Cmp.b   #$F0,D0         ;any row line active?
        Beq     NextCol         ;yes: means no key goto next column
        Bra     EndScan         ;else same means key pressed
NextCol
        Rol.b   #1,D1           ;rotate column code
        sub.b   #1,D2           ;decrement counter by one
        Cmp.b   #$00,D2         ;if not zero
        Bne     Next            ;   check key again
EndScan
        Bsr     KeyCode
        Movem.w (SP)+,D1-D3     ;restore registers
        Rts

;****************************************************************************

KeyCode Move.b  D1,D4           ;Store column
        Not.b   D4              ;Complement column code
        Move.b  D0,D5           ;Store row code
        Not.b   D5              ;Complement row code
        Andi.b  #$F0,D5         ;Mask bits 0-3
        Add.b   D4,D5           ;Combine row and column
        Move.b  D5,D0           ;Return new code
        bsr     IdKey
        rts

;****************************************************************************

IdKey   Movem.w D1-D3,-(SP)

        move.b  #$11,D1         ;key 1  ;A series of if-then-else
        cmp.b   D1,D0           ;to identify the correct key
        beq     Key1

        move.b  #$12,D1         ;key 2
        cmp.b   D1,D0
        beq     Key2

        move.b  #$14,D1         ;key 3
        cmp.b   D1,D0
        beq     Key3

        move.b  #$18,D1         ;key F
        cmp.b   D1,D0
        beq     KeyA

        move.b  #$21,D1         ;key 4
        cmp.b   D1,D0
        beq     Key4

        move.b  #$22,D1         ;key 5
        cmp.b   D1,D0
        beq     Key5

        move.b  #$24,D1         ;key 6
        cmp.b   D1,D0
        beq     Key6

        move.b  #$28,D1         ;key E
        cmp.b   D1,D0
        beq     KeyB

        move.b  #$44,D1         ;key 9
        cmp.b   D1,D0
        beq     Key9

        move.b  #$42,D1         ;key 8
        cmp.b   D1,D0
        beq     Key8

        move.b  #$41,D1         ;key 7
        cmp.b   D1,D0
        beq     Key7

        move.b  #$48,D1         ;key D
        cmp.b   D1,D0
        beq     KeyC

        move.b  #$81,D1         ;key F
        cmp.b   D1,D0
        beq     KeyF

        move.b  #$82,D1         ;key 0
        cmp.b   D1,D0
        beq     Key0

        move.b  #$84,D1         ;key E
        cmp.b   D1,D0
        beq     KeyE

        move.b  #$88,D1         ;key C
        cmp.b   D1,D0
        beq     KeyD

        Bra     Exist

Key1    move.b  #$01,D0         ;
        bra     Exist

Key2    move.b  #$02,D0         ;
        bra     Exist

Key3    move.b  #$03,D0         ;
        bra     Exist

KeyF    move.b  #$0F,D0         ;
        bra     Exist

Key4    move.b  #$04,D0         ;
        bra     Exist

Key5    move.b  #$05,D0         ;
        bra     Exist

Key6    move.b  #$06,D0         ;
        bra     Exist

KeyE    move.b  #$0E,D0         ;
        bra     Exist

Key9    move.b  #$09,D0         ;
        bra     Exist

Key8    move.b  #$08,D0         ;
        bra     Exist

Key7    move.b  #$07,D0         ;
        bra     Exist

KeyD    move.b  #$0D,D0         ;
        bra     Exist

KeyA    move.b  #$0A,D0         ;
        bra     Exist

Key0    move.b  #$00,D0         ;
        bra     Exist

KeyB    move.b  #$0B,D0         ;
        bra     Exist

KeyC    move.b  #$0C,D0         ;

Exist   Movem.w (SP)+,D1-D3
        rts

;****************************************************************************

Delay   Movem.w D1-D3,-(SP)
        Move.l  #95000,d1
Here    subq.l  #1,d1
        Bne     Here
        Movem.w (SP)+,D1-D3
        rts

;****************************************************************************

Display Trap    #11
        DC.W    8

        Trap    #11
        DC.W    3

        Andi.b  #$0F,D0

        cmp.b   #3,D6           ;to identify the correct number
        beq     satu

        cmp.b   #2,D6
        beq     dua

        cmp.b   #1,D6
        beq     tiga

      ; typo just now
;DROPS HERE, WHY? 

satu    add.b   #$80,D0
        bsr     hihi            ;REALLY? for this part, i use 4 7segment, which control by bit 7,6,5,4
;meanwhile for the numbering i use the 7segment decoder which controlled by bit 3,2,1,0

; thus when the 1st 7 segment is selected due to first number, i will add the value with 1000 0000 = 80h, that refer to first bit7

dua     add.b   #$40,D0
        bsr     hihi            ;REALLY?

tiga    add.b   #$20,D0
        bsr     hihi            ;REALLY?

hihi    Move.b  D0,PbDR
        bsr     delay
        Bsr     haha            ;WHY?

        RTS

;****************************************************************************

delay   move.l  #55,d7
del1    subq.l  #1,d7
        bne     del1
        rts

;****************************************************************************

        end     Start






i put some comment at the quote

yes this program has undergo a lot of modification, thus a lot of people has program it and modify it, but still could not work,


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 03, 2011 2:53 am 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
The lines I marked have serious issues with them which need fixing, some need deleting, some need the right instruction, some need some thought. Again look up BRA/BSR and understand which to use.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 03, 2011 7:10 am 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
ok, i will test the program at my lab tomorrow, n i will paste the problem here:)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Aug 04, 2011 11:33 am 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
Code:
***************** Declarations ****************
PgCR    equ     $800001         ;Port general control register

PaCR    equ     $80000D         ;PortA control register
PaDDR   equ     $800005         ;PortA data direction register
PaDR    equ     $800011         ;PortA data register

PbCR    equ     $80000f         ;PortB control register
PbDDR   equ     $800007         ;PortB data direction register
PbDR    equ     $800013         ;PortB data register

;****************************************************************************

KeyStore equ    $400500         ;Temp store for keypressed

;****************************************************************************

        Org $400400      ;Start address


Start      Move.b #$00,PgCR   ;Set port to general mode
      Move.b #$80,PaCR   ;Set portA to submode IX
      Move.b #$0F,PaDDR   ;Set bits PA0-PA3=outputs, PA4-PA7=inputs
      Move.b #$80,PbCR   ;Set portA to submode IX
      Move.b #$FF,PbDDR   ;Set bits PA0-PA7=outputs,       ;Move.b #$00,PbDR
      Move.b #$00,PbDR

;****************************************************************************

prestart          Move.w   #4,D6          ;use D6 as pin number counter
Again      Bsr     Get_Key      ;key pressed?
      Cmp.b   #$10,D0      ;if return code is $10
      Beq     Again      ;   check again
      Move.b  D0,KeyStore   ;Save key
      Bsr     Delay      ;Wait for a while
      Bsr     Get_Key      ;check key again
      Move.b  KeyStore,D1
      Cmp.b   D0,D1      ;is there a match?
      Bne     Again      ;no: check again
      Bsr     Display           ;if not $10 then display
      sub.b   #1,D6           ;minus 1 from pin number counter
       Cmp.b   #$00,D6         ;compare with zero
      Clr.w   D0
      beq   prestart
      Bra     Again           ;OR keep scanning
      

;****************************************************************************
Get_Key      Movem.w D1-D3,-(SP)
      Clr.w   D0      ;Build hex. code in D0
      Move.b  #$FE,D1      ;Ground column 0
      Move.w   #4,D2      ;use D2 as counter
      

;****************************************************************************
Next      Move.b   D1,PaDR      ;activate column line
      Move.b  PaDR,D0      ;read port A
      Andi.b   #$F0,D0      ;isolate column lines
      Cmp.b   #$F0,D0      ;any row line active?
      Beq    NextCol         ;yes: means no key goto next column
      Bra     EndScan    ;else same means key pressed
      

;****************************************************************************
NextCol           Rol.b   #1,D1      ;rotate column code
      sub.b   #1,D2      ;decrement counter by one
      Cmp.b   #$00,D2      ;if not zero
      Bne     Next      ;   check key again
      

;****************************************************************************
EndScan         Bsr     KeyCode
      Movem.w   (SP)+,D1-D3   ;restore registers
      Rts
       

;****************************************************************************
KeyCode      Move.b   D1,D4           ;Store column
      Not.b   D4         ;Complement column code
      Move.b  D0,D5           ;Store row code
      Not.b   D5           ;Complement row code
      Andi.b  #$F0,D5           ;Mask bits 0-3
      Add.b   D4,D5           ;Combine row and column
      Move.b  D5,D0           ;Return new code
      bsr     IdKey
      rts
      
;****************************************************************************


IdKey          Movem.w D1-D3,-(SP)
      move.b #$11,D1  ;key 1  ;A series of if-then-else 
              cmp.b  D1,D0      ;to identify the correct key
              beq    Key1
              move.b #$12,D1  ;key 2
              cmp.b  D1,D0
              beq    Key2
              move.b #$14,D1  ;key 3
              cmp.b  D1,D0
              beq    Key3
              move.b #$18,D1  ;key F
              cmp.b  D1,D0
              beq    KeyA
              move.b #$21,D1  ;key 4
              cmp.b  D1,D0
              beq    Key4
              move.b #$22,D1  ;key 5
              cmp.b  D1,D0
              beq    Key5
              move.b #$24,D1  ;key 6
              cmp.b  D1,D0
              beq    Key6
              move.b #$28,D1  ;key E
              cmp.b  D1,D0
              beq    KeyB
              move.b #$44,D1  ;key 9
              cmp.b  D1,D0
              beq    Key9
              move.b #$42,D1  ;key 8
              cmp.b  D1,D0
              beq    Key8
              move.b #$41,D1  ;key 7
              cmp.b  D1,D0
              beq    Key7
              move.b #$48,D1  ;key D
              cmp.b  D1,D0
              beq    KeyC
              move.b #$81,D1  ;key F
              cmp.b  D1,D0
              beq    KeyF
              move.b #$82,D1  ;key 0
              cmp.b  D1,D0
              beq    Key0
              move.b #$84,D1  ;key E
              cmp.b  D1,D0
              beq    KeyE
              move.b #$88,D1  ;key C
              cmp.b  D1,D0
      beq    KeyD
      Bra    Exist
      

;****************************************************************************

Key1         move.b #$01,D0   ;
      bra    Exist
Key2      move.b #$02,D0   ;
      bra    Exist
Key3      move.b #$03,D0   ;
      bra    Exist
KeyF      move.b #$0F,D0   ;
      bra    Exist
Key4      move.b #$04,D0   ;
      bra    Exist
Key5      move.b #$05,D0   ;
      bra    Exist
Key6      move.b #$06,D0   ;
      bra    Exist
KeyE      move.b #$0E,D0   ;
      bra    Exist
Key9      move.b #$09,D0   ;
      bra    Exist
Key8      move.b #$08,D0   ;
      bra    Exist
Key7      move.b #$07,D0   ;
      bra    Exist
KeyD      move.b #$0D,D0   ;
      bra    Exist
KeyA      move.b #$0A,D0   ;
      bra    Exist
Key0      move.b #$00,D0   ;
      bra    Exist
KeyB      move.b #$0B,D0   ;
      bra    Exist
KeyC      move.b #$0C,D0   ;   
Exist      Movem.w   (SP)+,D1-D3
      rts
      
      

;****************************************************************************
Delay      Movem.w D1-D3,-(SP)
      Move.l #95000,d1
Here          subq.l #1,d1
              Bne    Here
      Movem.w   (SP)+,D1-D3
              rts
      

;****************************************************************************

Display      Trap   #11
      DC.W    8
      Trap   #11
      DC.W    3
      ;RTS 
      Andi.b  #$0F,D0
      cmp.b   #4,D6           
           beq     satu
            cmp.b   #3,D6
            beq     dua
      cmp.b   #2,D6
            beq     tiga
      cmp.b   #1,D6
           beq     empat
 
satu       add.b   #$80,D0
           bra     view             

dua        add.b   #$40,D0
           bra     view           

tiga       add.b   #$20,D0
           bra     view           

empat      add.b   #$10,D0
           ;bra     view           

view       Move.b  D0,PbDR
               
      RTS       
         

;****************************************************************************

delay   move.l  #55,d7
del1    subq.l  #1,d7
        bne     del1
        rts

;****************************************************************************

        end   


{Admin - Added Code tags. Note. Press the "Code" button before and after pasting code to the forum. }




after i edit this program this is what the program does
1) user enter input
2) the input displayed at 7 segment, bit by bit,(we have 4 7segment, and the first number will be view at the first 7segment, the 2nd number will display at 2nd 7segment and soo on until the 4th number)
after this program display the 4th number it will repeat at prestart.


so, how i want to make the program display different number at each 7 segment, the connection of 7segment is connected to 7segment decoder for bit 0,1,2,3 and 7segment selector is at bit 4,5,6,7.

plus, i dont have enough storage, and i dont know where to store the 4 number..

can u give some ideas? tq btw:)


Top
 Profile  
 
 Post subject:
PostPosted: Fri Aug 05, 2011 2:37 am 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
You could store values at KeyStore, KeyStore+1, ..

Code:
prestart
      Move.w   #4,D6          ;use D6 as pin number counter
      lea     KeyStore,A5
Again
      Bsr     Get_Key      ;key pressed?
      Cmp.b   #$10,D0      ;if return code is $10
      Beq     Again      ;   check again
      Move.b  D0,(A5)    ;Save key
      Bsr     Delay      ;Wait for a while
      Bsr     Get_Key      ;check key again
      Move.b  (A5),D1
      Cmp.b   D0,D1      ;is there a match?
      Bne     Again      ;no: check again
      Bsr     Display           ;if not $10 then display
      sub.b   #1,D6           ;minus 1 from pin number counter
      Cmp.b   #$00,D6         ;compare with zero
      beq   prestart
      adda.l   #1,A5
      Bra     Again           ;OR keep scanning


Display might be more efficient as

Code:
Display
   LEA   Lookup,A0
   ANDI.B  #$0F,D0
   OR.B    -1(A0,D6.W),D0
   MOVE.B  D0,PbDR
        RTS
         
Lookup   DC.B $10,$20,$40,$80


So what do you want it to display? Do you need to to cycle through all four digits repeatedly so they all light at once.

Now

A...
.B..
..C.
....D

Desired

ABCD


Top
 Profile  
 
 Post subject:
PostPosted: Sat Aug 06, 2011 7:37 am 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
***************** Declarations ****************
PgCR equ $800001 ;Port general control register

PaCR equ $80000D ;PortA control register
PaDDR equ $800005 ;PortA data direction register
PaDR equ $800011 ;PortA data register

PbCR equ $80000f ;PortB control register
PbDDR equ $800007 ;PortB data direction register
PbDR equ $800013 ;PortB data register

;****************************************************************************

KeyStore equ $400500 ;Temp store for keypressed

;****************************************************************************

Org $400400 ;Start address


Start Move.b #$00,PgCR ;Set port to general mode
Move.b #$80,PaCR ;Set portA to submode IX
Move.b #$0F,PaDDR ;Set bits PA0-PA3=outputs, PA4-PA7=inputs
Move.b #$80,PbCR ;Set portA to submode IX
Move.b #$FF,PbDDR ;Set bits PA0-PA7=outputs, ;Move.b #$00,PbDR
Move.b #$00,PbDR

;****************************************************************************

prestart Move.w #4,D6 ;use D6 as pin number counter
lea KeyStore,A5

Again Bsr Get_Key ;key pressed?
Cmp.b #$10,D0 ;if return code is $10
Beq Again ; check again
Move.b D0,(A5) ;Save key
Bsr Delay ;Wait for a while
Bsr Get_Key ;check key again
Move.b (A5),D1
Cmp.b D0,D1 ;is there a match?
Bne Again ;no: check again
Bsr Display ;if not $10 then display
sub.b #1,D6 ;minus 1 from pin number counter
Cmp.b #$00,D6 ;compare with zero
Clr.w D0
adda.l #1,A5
Bra Again ;OR keep scanning


;****************************************************************************
Get_Key Movem.w D1-D3,-(SP)
Clr.w D0 ;Build hex. code in D0
Move.b #$FE,D1 ;Ground column 0
Move.w #4,D2 ;use D2 as counter


;****************************************************************************
Next Move.b D1,PaDR ;activate column line
Move.b PaDR,D0 ;read port A
Andi.b #$F0,D0 ;isolate column lines
Cmp.b #$F0,D0 ;any row line active?
Beq NextCol ;yes: means no key goto next column
Bra EndScan ;else same means key pressed


;****************************************************************************
NextCol Rol.b #1,D1 ;rotate column code
sub.b #1,D2 ;decrement counter by one
Cmp.b #$00,D2 ;if not zero
Bne Next ; check key again


;****************************************************************************
EndScan Bsr KeyCode
Movem.w (SP)+,D1-D3 ;restore registers
Rts


;****************************************************************************
KeyCode Move.b D1,D4 ;Store column
Not.b D4 ;Complement column code
Move.b D0,D5 ;Store row code
Not.b D5 ;Complement row code
Andi.b #$F0,D5 ;Mask bits 0-3
Add.b D4,D5 ;Combine row and column
Move.b D5,D0 ;Return new code
bsr IdKey
rts

;****************************************************************************


IdKey Movem.w D1-D3,-(SP)
move.b #$11,D1 ;key 1 ;A series of if-then-else
cmp.b D1,D0 ;to identify the correct key
beq Key1
move.b #$12,D1 ;key 2
cmp.b D1,D0
beq Key2
move.b #$14,D1 ;key 3
cmp.b D1,D0
beq Key3
move.b #$18,D1 ;key F
cmp.b D1,D0
beq KeyA
move.b #$21,D1 ;key 4
cmp.b D1,D0
beq Key4
move.b #$22,D1 ;key 5
cmp.b D1,D0
beq Key5
move.b #$24,D1 ;key 6
cmp.b D1,D0
beq Key6
move.b #$28,D1 ;key E
cmp.b D1,D0
beq KeyB
move.b #$44,D1 ;key 9
cmp.b D1,D0
beq Key9
move.b #$42,D1 ;key 8
cmp.b D1,D0
beq Key8
move.b #$41,D1 ;key 7
cmp.b D1,D0
beq Key7
move.b #$48,D1 ;key D
cmp.b D1,D0
beq KeyC
move.b #$81,D1 ;key F
cmp.b D1,D0
beq KeyF
move.b #$82,D1 ;key 0
cmp.b D1,D0
beq Key0
move.b #$84,D1 ;key E
cmp.b D1,D0
beq KeyE
move.b #$88,D1 ;key C
cmp.b D1,D0
beq KeyD
Bra Exist


;****************************************************************************

Key1 move.b #$01,D0 ;
bra Exist
Key2 move.b #$02,D0 ;
bra Exist
Key3 move.b #$03,D0 ;
bra Exist
KeyF move.b #$0F,D0 ;
bra Exist
Key4 move.b #$04,D0 ;
bra Exist
Key5 move.b #$05,D0 ;
bra Exist
Key6 move.b #$06,D0 ;
bra Exist
KeyE move.b #$0E,D0 ;
bra Exist
Key9 move.b #$09,D0 ;
bra Exist
Key8 move.b #$08,D0 ;
bra Exist
Key7 move.b #$07,D0 ;
bra Exist
KeyD move.b #$0D,D0 ;
bra Exist
KeyA move.b #$0A,D0 ;
bra Exist
Key0 move.b #$00,D0 ;
bra Exist
KeyB move.b #$0B,D0 ;
bra Exist
KeyC move.b #$0C,D0 ;
Exist Movem.w (SP)+,D1-D3
rts



;****************************************************************************
Delay Movem.w D1-D3,-(SP)
Move.l #95000,d1
Here subq.l #1,d1
Bne Here
Movem.w (SP)+,D1-D3
rts


;****************************************************************************

Display Trap #11
DC.W 8
Trap #11
DC.W 3
LEA Lookup,A1
ANDI.B #$0F,D0
OR.B -1(A1,D6.W),D0
MOVE.B D0,PbDR

RTS

Lookup DC.B $10,$20,$40,$80

RTS


;****************************************************************************

delay move.l #55,d7
del1 subq.l #1,d7
bne del1
rts

;****************************************************************************

end



after i add some of your program, i got this problem

Designed and Manufactured by Flight Electronics International Ltd.
Suppliers of high technology products to education.
Call 01703 227721. Fax 01703 330039.
Email sales@flight.demon.co.uk.
Compuserve 100043,3305.
Firmware Version V3.01 (C) Flight Electronics International Ltd. 1993
F> lt
LOAD "S" FORMAT OBJECT FILE FROM TERMINAL. TERMINATOR IS CONTROL T
ENTER OFFSET (<CR> IF NONE) :
LOAD COMPLETED
F> go
ENTER ADDRESS : 400400
1
*** BUS ERROR - ACCESS = FFFFFFFF
D0=00000010 D1=00000022 D2=00000000 D3=00000000 T S III XNZVC
D4=00000010 D5=00000010 D6=00000003 D7=00000000 SR=0010011100001101
A0=00000000 A1=0040061C A2=00000000 A3=00000000
A4=FFFFFFFF A5=00400501 A6=00000000 A7=004003D8 PC=00400508



i dont know why it got bus error...


after input 1 digit, the error come out,, i cant enter 4 pin number


Top
 Profile  
 
 Post subject:
PostPosted: Sat Aug 06, 2011 1:17 pm 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
sayyid wrote:
i dont know why it got bus error...
after input 1 digit, the error come out,, i cant enter 4 pin number

Probably because the code from your program extends beyond the $400500 address you set for KeyStore. Check how big your program has become by looking at the listing, or S-Records. Maybe $401000 would work? Or you could define it as a storage location, rather than an absolute address.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Aug 08, 2011 5:45 pm 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
i get the same problem if i changed it,

btw, its okay, i want to know is there any way to store data memory,
coz in the program i had to use D0-D6, whats left for me is only D7 to store 4 digit number,

can i use stack pointer? but i have already use the stack pointer in the program, can i use more than one stack pointer in a program?

if not posible, can i store the 4 digit in table?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Aug 08, 2011 7:06 pm 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
You only need one stack pointer, you just need to understand how the stack works. Review some books/texts on programming the 68K and look at examples posted within Easy68K and on the forum.

Wouldn't you just use :

KeyStore ds.b 4

You can define variables, load/store values to them, and push/pop registers onto the stack. There are lots of choices and possibilities.

I don't have your board, or it's documentation, so I'm not going to write/debug this. I have no way to test it.

I'd suggest you try to develop some equivalent code within the framework of Easy68K, test and understand that, and then use that knowledge to work on the Flight board.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 09, 2011 10:41 am 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
is it mean that i can test the code without using the 68k flight?

i want to put the picture for the circuit, but i dont know how,
btw what is mean by
trap#11
dc.b 8


is it mean the trap#11 is to store the constant of 8?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 10, 2011 9:09 pm 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
EASy68K comes with a simulator, and emulated hardware. The display hardware, and software traps are different to that of the Flight 68K board.

For the "TRAP#11 DC.W 8", you'll need to review the manual, from your earlier description of the functionality, I'd assume it send characters to your monitor (serial terminal) or something.

Quick Google found this :

http://viking.cmsa.wmin.ac.uk/flight/flight68k.html

08 outhex convert D0.B nibble to ASCII and print


Top
 Profile  
 
 Post subject:
PostPosted: Thu Aug 11, 2011 8:29 am 
Offline

Joined: Tue Aug 02, 2011 8:32 am
Posts: 13
i just look at the manual, and yes, its about print out value that assign in D0,

this is my latest program


***************** Declarations ****************
PgCR equ $800001 ;Port general control register

PaCR equ $80000D ;PortA control register
PaDDR equ $800005 ;PortA data direction register
PaDR equ $800011 ;PortA data register

PbCR equ $80000f ;PortB control register
PbDDR equ $800007 ;PortB data direction register
PbDR equ $800013 ;PortB data register

;****************************************************************************

KeyStore equ $400500 ;Temp store for keypressed

no1 equ $400600 ;Temp store for viewall
no2 equ $400700
no3 equ $400800
no4 equ $400900





;no1 ds.l 1
;no2 ds.l 1
;no3 ds.l 1
;no4 ds.l 1



;****************************************************************************

Org $400400 ;Start address


Start Move.b #$00,PgCR ;Set port to general mode
Move.b #$80,PaCR ;Set portA to submode IX
Move.b #$0F,PaDDR ;Set bits PA0-PA3=outputs, PA4-PA7=inputs
Move.b #$80,PbCR ;Set portA to submode IX
Move.b #$FF,PbDDR ;Set bits PA0-PA7=outputs, ;Move.b #$00,PbDR
Move.b #$ff,PbDR

;****************************************************************************

prestart Move.w #4,D6 ;use D6 as pin number counter
Again Bsr Get_Key ;key pressed?
Cmp.b #$10,D0 ;if return code is $10
Beq Again ; check again
Move.b D0,KeyStore ;Save key
Bsr Delay ;Wait for a while
Bsr Get_Key ;check key again
Move.b KeyStore,D1
Cmp.b D0,D1 ;is there a match?
Bne Again ;no: check again
Bsr Display ;if not $10 then display
Clr.w D0
sub.b #1,D6 ;minus 1 from pin number counter
Cmp.b #$00,D6 ;compare with zero
;beq prestart
beq viewall
Bra Again ;OR keep scanning

;****************************************************************************
Get_Key Movem.w D1-D3,-(SP)
Clr.w D0 ;Build hex. code in D0
Move.b #$FE,D1 ;Ground column 0
Move.w #4,D2 ;use D2 as counter


;****************************************************************************
Next Move.b D1,PaDR ;activate column line
Move.b PaDR,D0 ;read port A
Andi.b #$F0,D0 ;isolate column lines
Cmp.b #$F0,D0 ;any row line active?
Beq NextCol ;yes: means no key goto next column
Bra EndScan ;else same means key pressed


;****************************************************************************
NextCol Rol.b #1,D1 ;rotate column code
sub.b #1,D2 ;decrement counter by one
Cmp.b #$00,D2 ;if not zero
Bne Next ; check key again


;****************************************************************************
EndScan Bsr KeyCode
Movem.w (SP)+,D1-D3 ;restore registers
Rts


;****************************************************************************
KeyCode Move.b D1,D4 ;Store column
Not.b D4 ;Complement column code
Move.b D0,D5 ;Store row code
Not.b D5 ;Complement row code
Andi.b #$F0,D5 ;Mask bits 0-3
Add.b D4,D5 ;Combine row and column
Move.b D5,D0 ;Return new code
bsr IdKey
rts

;****************************************************************************


IdKey Movem.w D1-D3,-(SP)
move.b #$11,D1 ;key 1 ;A series of if-then-else
cmp.b D1,D0 ;to identify the correct key
beq Key1
move.b #$12,D1 ;key 2
cmp.b D1,D0
beq Key2
move.b #$14,D1 ;key 3
cmp.b D1,D0
beq Key3
move.b #$18,D1 ;key F
cmp.b D1,D0
beq KeyA
move.b #$21,D1 ;key 4
cmp.b D1,D0
beq Key4
move.b #$22,D1 ;key 5
cmp.b D1,D0
beq Key5
;****************************************************************************

move.b #$24,D1 ;key 6
cmp.b D1,D0
beq Key6

;****************************************************************************
move.b #$28,D1 ;key E
cmp.b D1,D0
beq KeyB
move.b #$44,D1 ;key 9
cmp.b D1,D0
beq Key9

;****************************************************************************
move.b #$42,D1 ;key 8
cmp.b D1,D0
beq Key8
;****************************************************************************
move.b #$41,D1 ;key 7
cmp.b D1,D0
beq Key7
move.b #$48,D1 ;key D
cmp.b D1,D0
beq KeyC
move.b #$81,D1 ;key F
cmp.b D1,D0
beq KeyF
move.b #$82,D1 ;key 0
cmp.b D1,D0
beq Key0
move.b #$84,D1 ;key E
cmp.b D1,D0
beq KeyE
move.b #$88,D1 ;key C
cmp.b D1,D0
beq KeyD
Bra Exist


;****************************************************************************

Key1 move.b #$01,D0 ;
bra Exist
Key2 move.b #$02,D0 ;
bra Exist
Key3 move.b #$03,D0 ;
bra Exist
KeyF move.b #$0F,D0 ;
bra Exist
Key4 move.b #$04,D0 ;
bra Exist
Key5 move.b #$05,D0 ;
bra Exist
Key6 move.b #$06,D0 ;
bra Exist
KeyE move.b #$0E,D0 ;
bra Exist
Key9 move.b #$09,D0 ;
bra Exist
Key8 move.b #$08,D0 ;
bra Exist
Key7 move.b #$07,D0 ;
bra Exist
KeyD move.b #$0D,D0 ;
bra Exist
KeyA move.b #$0A,D0 ;
bra Exist
Key0 move.b #$00,D0 ;
bra Exist
KeyB move.b #$0B,D0 ;
bra Exist
KeyC move.b #$0C,D0 ;
Exist Movem.w (SP)+,D1-D3
rts

;****************************************************************************
Delay Movem.w D1-D3,-(SP)
Move.l #95000,d1
Here subq.l #1,d1
Bne Here
Movem.w (SP)+,D1-D3
rts


;****************************************************************************

Display Andi.b #$0F,D0
cmp.b #4,D6
beq satu
cmp.b #3,D6
beq dua
cmp.b #2,D6
beq tiga
cmp.b #1,D6
beq empat

satu add.b #$80,D0
move.b D0,no1
bra view

dua add.b #$40,D0
move.b D0,no2
bra view

tiga add.b #$20,D0
move.b D0,no3
bra view

empat add.b #$10,D0
move.b D0,no4

view Move.b D0,PbDR
Trap #11
DC.W 8
Trap #11
DC.W 3
RTS

;****************************************************************************



;****************************************************************************

viewall Move.b no1,PbDR
Move.b no2,PbDR
Move.b no3,PbDR
Move.b no4,PbDR
bra viewall



;****************************************************************************

end




this time, i use address register to store the value pressed, but there will be a certain number on the keypad that will give illegal instruction error,
but without the viewall label, the value is corresponding into what the keypad pressed and without any error..


then i try to use


no1 ds.l 1
no2 ds.l 1
no3 ds.l 1
no4 ds.l 1

to store the value pressed, but it said that the adress is over the range..

is there any way to make sure the value is comfirm pass to data register?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Aug 11, 2011 12:30 pm 
Offline

Joined: Mon Jul 26, 2010 11:43 pm
Posts: 198
Location: Aurora, IL
You're falling in two traps here.

a) Your code extends from $400400 to $40068C at least, you simply can't place your data at arbitrary absolute locations in the middle of it. Look at the listing file generated by the assembler.

b) The assembler needs to know where the storage locations should be placed, it's going to have to be after the ORG statement, and ideally toward the end of the code. The EASy68K assembler is assuming a zero origin, and is not generating an error, are you using some other assembler?
Code:
00400400 Starting Address
Assembler used: EASy68K Editor/Assembler v5.6.1
Created On: 8/11/2011 7:30:49 AM

00000000                             1  ***************** Declarations ****************
00000000  =00800001                  2  PgCR    equ     $800001         ;Port general control register
00000000                             3 
00000000  =0080000D                  4  PaCR    equ     $80000D         ;PortA control register
00000000  =00800005                  5  PaDDR   equ     $800005         ;PortA data direction register
00000000  =00800011                  6  PaDR    equ     $800011         ;PortA data register
00000000                             7 
00000000  =0080000F                  8  PbCR    equ     $80000f         ;PortB control register
00000000  =00800007                  9  PbDDR   equ     $800007         ;PortB data direction register
00000000  =00800013                 10  PbDR    equ     $800013         ;PortB data register
00000000                            11 
00000000                            12  ;****************************************************************************
00000000                            13 
00000000                            14 
00000000                            15 
00000000                            16  ;****************************************************************************
00000000                            17 
00400400                            18          Org $400400             ;Start address
00400400                            19 
00400400                            20 
00400400  13FC 0000 00800001        21  Start           Move.b #$00,PgCR        ;Set port to general mode
00400408  13FC 0080 0080000D        22                  Move.b #$80,PaCR        ;Set portA to submode IX
00400410  13FC 000F 00800005        23                  Move.b #$0F,PaDDR       ;Set bits PA0-PA3=outputs, PA4-PA7=inputs
00400418  13FC 0080 0080000F        24                  Move.b #$80,PbCR        ;Set portA to submode IX
00400420  13FC 00FF 00800007        25                  Move.b #$FF,PbDDR       ;Set bits PA0-PA7=outputs,              ;Move.b #$00,PbDR
00400428  13FC 00FF 00800013        26                  Move.b #$ff,PbDR
00400430                            27 
00400430                            28  ;****************************************************************************
00400430                            29 
00400430  3C3C 0004                 30  prestart        Move.w   #4,D6          ;use D6 as pin number counter
00400434  6100 0032                 31  Again           Bsr     Get_Key         ;key pressed?
00400438  B03C 0010                 32                  Cmp.b   #$10,D0         ;if return code is $10
0040043C  67F6                      33                  Beq     Again           ;   check again
0040043E  13C0 0040068C             34                  Move.b  D0,KeyStore     ;Save key
00400444  6100 01A0                 35                  Bsr     Delay           ;Wait for a while
00400448  6100 001E                 36                  Bsr     Get_Key         ;check key again
0040044C  1239 0040068C             37                  Move.b  KeyStore,D1
00400452  B200                      38                  Cmp.b   D0,D1           ;is there a match?
00400454  66DE                      39                  Bne     Again           ;no: check again
00400456  6100 01A2                 40                  Bsr     Display         ;if not $10 then display
0040045A  4240                      41                  Clr.w   D0
0040045C  5306                      42                  sub.b   #1,D6           ;minus 1 from pin number counter
0040045E  BC3C 0000                 43                  Cmp.b   #$00,D6         ;compare with zero
00400462                            44                  ;beq    prestart
00400462  6700 01FE                 45                  beq     viewall
00400466  60CC                      46                  Bra     Again           ;OR keep scanning
00400468                            47 
00400468                            48  ;****************************************************************************
00400468  48A7 7000                 49  Get_Key         Movem.w D1-D3,-(SP)
0040046C  4240                      50                  Clr.w   D0              ;Build hex. code in D0
0040046E  123C 00FE                 51                  Move.b  #$FE,D1         ;Ground column 0
00400472  343C 0004                 52                  Move.w  #4,D2           ;use D2 as counter
00400476                            53                 
00400476                            54 
00400476                            55  ;****************************************************************************
00400476  13C1 00800011             56  Next            Move.b  D1,PaDR         ;activate column line
0040047C  1039 00800011             57                  Move.b  PaDR,D0         ;read port A
00400482  0200 00F0                 58                  Andi.b  #$F0,D0         ;isolate column lines
00400486  B03C 00F0                 59                  Cmp.b   #$F0,D0         ;any row line active?
0040048A  6700 0006                 60                  Beq     NextCol         ;yes: means no key goto next column
0040048E  6000 000C                 61                  Bra     EndScan         ;else same means key pressed
00400492                            62                 
00400492                            63 
00400492                            64  ;****************************************************************************
00400492  E319                      65  NextCol         Rol.b   #1,D1           ;rotate column code
00400494  5302                      66                  sub.b   #1,D2           ;decrement counter by one
00400496  B43C 0000                 67                  Cmp.b   #$00,D2         ;if not zero
0040049A  66DA                      68                  Bne     Next            ;   check key again
0040049C                            69                 
0040049C                            70 
0040049C                            71  ;****************************************************************************
0040049C  6100 0008                 72  EndScan         Bsr     KeyCode
004004A0  4C9F 000E                 73                  Movem.w (SP)+,D1-D3     ;restore registers
004004A4  4E75                      74                  Rts
004004A6                            75                 
004004A6                            76 
004004A6                            77  ;****************************************************************************
004004A6  1801                      78  KeyCode         Move.b  D1,D4           ;Store column
004004A8  4604                      79                  Not.b   D4              ;Complement column code
004004AA  1A00                      80                  Move.b  D0,D5           ;Store row code
004004AC  4605                      81                  Not.b   D5              ;Complement row code
004004AE  0205 00F0                 82                  Andi.b  #$F0,D5         ;Mask bits 0-3
004004B2  DA04                      83                  Add.b   D4,D5           ;Combine row and column
004004B4  1005                      84                  Move.b  D5,D0           ;Return new code
004004B6  6100 0004                 85                  bsr     IdKey
004004BA  4E75                      86                  rts
004004BC                            87                 
004004BC                            88  ;****************************************************************************
004004BC                            89 
004004BC                            90 
004004BC  48A7 7000                 91  IdKey           Movem.w D1-D3,-(SP)
004004C0  123C 0011                 92                  move.b #$11,D1  ;key 1  ;A series of if-then-else 
004004C4  B001                      93                  cmp.b  D1,D0            ;to identify the correct key
004004C6  6700 009C                 94                  beq    Key1
004004CA  123C 0012                 95                  move.b #$12,D1  ;key 2
004004CE  B001                      96                  cmp.b  D1,D0
004004D0  6700 009A                 97                  beq    Key2
004004D4  123C 0014                 98                  move.b #$14,D1  ;key 3
004004D8  B001                      99                  cmp.b  D1,D0
004004DA  6700 0098                100                  beq    Key3
004004DE  123C 0018                101                  move.b #$18,D1  ;key F
004004E2  B001                     102                  cmp.b  D1,D0
004004E4  6700 00DE                103                  beq    KeyA
004004E8  123C 0021                104                  move.b #$21,D1  ;key 4
004004EC  B001                     105                  cmp.b  D1,D0
004004EE  6700 0094                106                  beq    Key4
004004F2  123C 0022                107                  move.b #$22,D1  ;key 5
004004F6  B001                     108                  cmp.b  D1,D0
004004F8  6700 0092                109                  beq    Key5
004004FC                           110   ;****************************************************************************                 
004004FC                           111 
004004FC  123C 0024                112                  move.b #$24,D1  ;key 6
00400500  B001                     113                  cmp.b  D1,D0
00400502  6700 0090                114                  beq    Key6
00400506                           115 
00400506                           116   ;****************************************************************************
00400506  123C 0028                117                  move.b #$28,D1  ;key E
0040050A  B001                     118                  cmp.b  D1,D0
0040050C  6700 00C6                119                  beq    KeyB
00400510  123C 0044                120                  move.b #$44,D1  ;key 9
00400514  B001                     121                  cmp.b  D1,D0
00400516  6700 008C                122                  beq    Key9
0040051A                           123   
0040051A                           124  ;****************************************************************************
0040051A  123C 0042                125                  move.b #$42,D1  ;key 8
0040051E  B001                     126                  cmp.b  D1,D0
00400520  6700 008A                127                  beq    Key8
00400524                           128  ;****************************************************************************
00400524  123C 0041                129                  move.b #$41,D1  ;key 7
00400528  B001                     130                  cmp.b  D1,D0
0040052A  6700 0088                131                  beq    Key7
0040052E  123C 0048                132                  move.b #$48,D1  ;key D
00400532  B001                     133                  cmp.b  D1,D0
00400534  6700 00A6                134                  beq    KeyC
00400538  123C 0081                135                  move.b #$81,D1  ;key F
0040053C  B001                     136                  cmp.b  D1,D0
0040053E  6700 003C                137                  beq    KeyF
00400542  123C 0082                138                  move.b #$82,D1  ;key 0
00400546  B001                     139                  cmp.b  D1,D0
00400548  6700 0082                140                  beq    Key0
0040054C  123C 0084                141                  move.b #$84,D1  ;key E
00400550  B001                     142                  cmp.b  D1,D0
00400552  6700 0048                143                  beq    KeyE
00400556  123C 0088                144                  move.b #$88,D1  ;key C
0040055A  B001                     145                  cmp.b  D1,D0
0040055C  6700 005E                146                  beq    KeyD
00400560  6000 007E                147                  Bra    Exist
00400564                           148                 
00400564                           149 
00400564                           150  ;****************************************************************************
00400564                           151 
00400564  103C 0001                152  Key1            move.b #$01,D0   ;
00400568  6000 0076                153                  bra    Exist
0040056C  103C 0002                154  Key2            move.b #$02,D0   ;
00400570  6000 006E                155                  bra    Exist
00400574  103C 0003                156  Key3            move.b #$03,D0   ;
00400578  6000 0066                157                  bra    Exist
0040057C  103C 000F                158  KeyF            move.b #$0F,D0   ;
00400580  6000 005E                159                  bra    Exist
00400584  103C 0004                160  Key4            move.b #$04,D0   ;
00400588  6000 0056                161                  bra    Exist
0040058C  103C 0005                162  Key5            move.b #$05,D0   ;
00400590  6000 004E                163                  bra    Exist
00400594  103C 0006                164  Key6            move.b #$06,D0   ;
00400598  6000 0046                165                  bra    Exist
0040059C  103C 000E                166  KeyE            move.b #$0E,D0   ;
004005A0  6000 003E                167                  bra    Exist
004005A4  103C 0009                168  Key9            move.b #$09,D0   ;
004005A8  6000 0036                169                  bra    Exist
004005AC  103C 0008                170  Key8            move.b #$08,D0   ;
004005B0  6000 002E                171                  bra    Exist
004005B4  103C 0007                172  Key7            move.b #$07,D0   ;
004005B8  6000 0026                173                  bra    Exist
004005BC  103C 000D                174  KeyD            move.b #$0D,D0   ;
004005C0  6000 001E                175                  bra    Exist
004005C4  103C 000A                176  KeyA            move.b #$0A,D0   ;
004005C8  6000 0016                177                  bra    Exist
004005CC  103C 0000                178  Key0            move.b #$00,D0   ;
004005D0  6000 000E                179                  bra    Exist
004005D4  103C 000B                180  KeyB            move.b #$0B,D0   ;
004005D8  6000 0006                181                  bra    Exist
004005DC  103C 000C                182  KeyC            move.b #$0C,D0   ;     
004005E0  4C9F 000E                183  Exist           Movem.w (SP)+,D1-D3
004005E4  4E75                     184                  rts
004005E6                           185                 
004005E6                           186  ;****************************************************************************
004005E6  48A7 7000                187  Delay           Movem.w D1-D3,-(SP)
004005EA  223C 00017318            188                  Move.l #95000,d1
004005F0  5381                     189  Here            subq.l #1,d1
004005F2  66FC                     190                  Bne    Here
004005F4  4C9F 000E                191                  Movem.w (SP)+,D1-D3
004005F8  4E75                     192                  rts
004005FA                           193                 
004005FA                           194 
004005FA                           195  ;****************************************************************************
004005FA                           196 
004005FA  0200 000F                197  Display         Andi.b  #$0F,D0
004005FE  BC3C 0004                198                  cmp.b   #4,D6           
00400602  6700 001A                199                  beq     satu
00400606  BC3C 0003                200                  cmp.b   #3,D6
0040060A  6700 0020                201                  beq     dua
0040060E  BC3C 0002                202                  cmp.b   #2,D6
00400612  6700 0026                203                  beq     tiga
00400616  BC3C 0001                204                  cmp.b   #1,D6
0040061A  6700 002C                205                  beq     empat
0040061E                           206   
0040061E  0600 0080                207  satu            add.b   #$80,D0
00400622  13C0 00400690            208                  move.b  D0,no1
00400628  6000 0028                209                  bra     view             
0040062C                           210 
0040062C  0600 0040                211  dua             add.b   #$40,D0
00400630  13C0 00400694            212                  move.b  D0,no2
00400636  6000 001A                213                  bra     view           
0040063A                           214 
0040063A  0600 0020                215  tiga            add.b   #$20,D0
0040063E  13C0 00400698            216                  move.b  D0,no3
00400644  6000 000C                217                  bra     view           
00400648                           218 
00400648  0600 0010                219  empat           add.b   #$10,D0
0040064C  13C0 0040069C            220                  move.b  D0,no4
00400652                           221                 
00400652  13C0 00800013            222  view            Move.b  D0,PbDR
00400658  4E4B                     223                  Trap    #11
0040065A= 0008                     224                  DC.W    8
0040065C  4E4B                     225                  Trap    #11
0040065E= 0003                     226                  DC.W    3
00400660  4E75                     227                  RTS
00400662                           228 
00400662                           229  ;****************************************************************************
00400662                           230 
00400662                           231 
00400662                           232 
00400662                           233  ;****************************************************************************
00400662                           234 
00400662  13F9 00400690 00800013   235  viewall         Move.b  no1,PbDR
0040066C  13F9 00400694 00800013   236                  Move.b  no2,PbDR
00400676  13F9 00400698 00800013   237                  Move.b  no3,PbDR
00400680  13F9 0040069C 00800013   238                  Move.b  no4,PbDR
0040068A  60D6                     239                  bra     viewall
0040068C                           240         
0040068C                           241 
0040068C                           242  KeyStore ds.b    4         ;Temp store for keypressed
00400690                           243 
00400690                           244  no1      ds.l    1       
00400694                           245  no2      ds.l    1
00400698                           246  no3      ds.l    1
0040069C                           247  no4      ds.l    1
004006A0                           248 
004006A0                           249 
004006A0                           250  ;****************************************************************************
004006A0                           251 
004006A0                           252          END     START           ; last line of source

No errors detected
No warnings generated


SYMBOL TABLE INFORMATION
Symbol-name         Value
-------------------------
AGAIN               400434
DELAY               4005E6
DISPLAY             4005FA
DUA                 40062C
EMPAT               400648
ENDSCAN             40049C
EXIST               4005E0
GET_KEY             400468
HERE                4005F0
IDKEY               4004BC
KEY0                4005CC
KEY1                400564
KEY2                40056C
KEY3                400574
KEY4                400584
KEY5                40058C
KEY6                400594
KEY7                4005B4
KEY8                4005AC
KEY9                4005A4
KEYA                4005C4
KEYB                4005D4
KEYC                4005DC
KEYCODE             4004A6
KEYD                4005BC
KEYE                40059C
KEYF                40057C
KEYSTORE            40068C
NEXT                400476
NEXTCOL             400492
NO1                 400690
NO2                 400694
NO3                 400698
NO4                 40069C
PACR                80000D
PADDR               800005
PADR                800011
PBCR                80000F
PBDDR               800007
PBDR                800013
PGCR                800001
PRESTART            400430
SATU                40061E
START               400400
TIGA                40063A
VIEW                400652
VIEWALL             400662


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 24 posts ]  Go to page 1, 2  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group