Advertisement
yugorin

Pętle

May 23rd, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. :BasicUpstart2(main)
  2.  
  3. .var brkFile = createFile("breakpoints.txt")
  4.  
  5. .macro break() {
  6.   .eval brkFile.writeln("break " + toHexString(*))
  7. }
  8.  
  9. .const kursor = $FFF0
  10. .const CHROUT = $FFD2
  11. .const CLEAR = $E544
  12. .const GETIN  =  $FFE4
  13. .const SCNKEY =  $FF9F
  14. .const ekran = $0400
  15. .const ENTER = $C202
  16. .const MOVE  = $C203
  17. .const rog_ekranu = 39
  18. .const od_poczatku = 48
  19.  
  20. main:
  21. INIT:
  22.    
  23.     lda pozycja_kursoraX_start  // pozycja kursora po napisie podaj cyfrę. X = numer wiersza
  24.     sta pozycja_kursoraX        // zapisanie w zmiennej
  25.     lda pozycja_kursoraY_start  // pozycja kursora po napisie podaj cyfrę. Y = numer kolumny
  26.     sta pozycja_kursoraY        // zapisanie w zmiennej
  27.     jsr napis_wyswietl          // skok do podprogramu wyświetlającego napis
  28.  
  29. skan:
  30.  
  31.     jsr SCNKEY                  // skok do procedury kernela skanującej czy wciśnięto klawisz
  32.     jsr GETIN                   // skok do procedury kernela wrzucającej kod wciśniętego znaku do AKU
  33.     sta klawisz                 // zapis w zmiennej klawisz wartości z AKU żeby było wiadomo co zostało wciśnięte
  34.  
  35.    
  36.  
  37.     cmp ENTER                   // czy to enter?
  38.     beq KONIEC                  // TAK? Skocz do KONIEC, nie.. idź niżej
  39.  
  40.     cmp #$30                    // czy to cyfra 0?
  41.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  42.  
  43.     cmp #$31                    // czy to cyfra 0?
  44.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  45.  
  46.     cmp #$32                    // czy to cyfra 0?
  47.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  48.  
  49.     cmp #$33                    // czy to cyfra 0?
  50.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  51.  
  52.     cmp #$34                    // czy to cyfra 0?
  53.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  54.  
  55.     cmp #$35                    // czy to cyfra 0?
  56.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  57.  
  58.     cmp #$36                    // czy to cyfra 0?
  59.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  60.  
  61.     cmp #$37                    // czy to cyfra 0?
  62.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  63.  
  64.     cmp #$38                    // czy to cyfra 0?
  65.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  66.  
  67.     cmp #$39                    // czy to cyfra 0?
  68.     beq cyfra                   // TAK? skoczo do procedury cyfra, NIE? idź dalej
  69.    
  70.    
  71.     jmp skan                    // skocz do procedury skanowania klawiatury
  72.  
  73.  
  74.  
  75. cyfra:
  76.     clc                         // skasuj flagę C (potrzebne do procedury kernela ustawienia kursora we wskazanym miejscu)
  77.     ldx pozycja_kursoraX        // załaduj współrzędną X kursora do rejestru X
  78.     ldy pozycja_kursoraY        // załaduj współrzędną Y kursora do rejestru Y
  79.     jsr kursor                  // wykonaj procedurę kernela ustawiającą kursor we wskazanym w XY miejcu
  80.  
  81.  
  82.     lda klawisz                 // załaduj do AKU ostatnio wciśnięty klawisz
  83.     jsr $ffd2                   // wyświetl go we wskazanym miejscu kursora
  84.     // ldx #$00                 // chyba zbędne, śmieć źródłowy
  85.     inc pozycja_kursoraY        // zwiększ wartość pozycji Y kursora
  86.     inc kolejna_cyfra           // zwiększ wartości zmiennej kolejna_cyfra
  87.     lda kolejna_cyfra           // załaduj do AKU wartość kolejna_cyfra
  88.     sta ekran+$27 //$0427       // wyślij bezpośrednio na ekran tę cyfrę (z AKU)
  89.     cmp #$3a                    // czy AKU=3a? (czyli kolejna_cyfra)
  90.     bne skan                    // NIE? skanuj dalej, TAK - idź dalej
  91.     jsr zliczanie               // skok do procedury zliczanie
  92.     jmp skan                    // skocz do skanowania klawiatury
  93.  
  94.  
  95. KONIEC:
  96.     rts
  97.  
  98. zliczanie:
  99.     :break()
  100.     ldx od_poczatku             // załaduj '0' do X
  101.     stx ekran+rog_ekranu        // wyświetl '0' bezpośrednio na ekran (prawy górny róg)
  102.     lda od_poczatku+1           // załaduj '0' do AKU
  103.     sta ekran-1+rog_ekranu      // wyświetl bezpośrednio na ekran -1
  104.     lda od_poczatku
  105.     sta kolejna_cyfra
  106.     rts
  107.  
  108. napis:
  109.     .text "podaj cyfre: "
  110.  
  111. napis_wyswietl:
  112.     lda #$93
  113.     jsr CHROUT
  114.     lda #13
  115.     sta ENTER
  116.     ldx #$00
  117.     ldx pozycja_kursoraX_start
  118.     ldy pozycja_kursoraY_start
  119.     jsr kursor
  120.  
  121.     lda #$00
  122.     sta $cc
  123.  
  124. petla:    
  125.     lda napis,x
  126.     sta ekran,x
  127.     inx
  128.     cpx #13
  129.     bcc petla
  130.     rts
  131.          
  132.          
  133.          
  134.  
  135. .pc = $0900
  136.  
  137. pozycja_kursoraX:
  138.     .byte 0
  139.  
  140. pozycja_kursoraY:
  141.     .byte $0d
  142.  
  143. pozycja_kursoraX_start:
  144.     .byte $00
  145. pozycja_kursoraY_start:
  146.     .byte $0d
  147.  
  148.  
  149. klawisz:
  150.     .byte 0
  151.  
  152. BYTECOUNTER:
  153.     .byte 0
  154.  
  155. kolejna_cyfra:
  156.     .byte $30
  157.    
  158. // od_poczatku:
  159. //  .byte $30
  160.  
  161. //rog_ekranu:
  162. //  .byte $27
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement