Nous écrivons un programme pour un ordinateur ALTAIR 8800 version 1975

Salut, Habr.





Dans l'histoire de l'informatique, certains événements ont influencé le cours de l'histoire. L'un de ceux-ci a été l'émergence du premier ordinateur personnel produit en série.





À l'époque, les ordinateurs n'étaient utilisés que par les scientifiques et les ingénieurs des grandes entreprises. Et puis un ordinateur apparaît, que tout le monde peut acheter. L'Altair 8800 contenait un processeur 8080, 256 octets de mémoire dans la première version et son prix était inférieur à 1000 $ - c'était le premier ordinateur personnel à être vendu. C'était le même ordinateur pour lequel Bill Gates et Paul Allen ont développé le langage BASIC, l'ordinateur grâce auquel des centaines et des milliers d'étudiants et d'écoliers enthousiastes sont venus au monde de la programmation.





Bien sûr, le bon marché avait un prix - la première version d'ALTAIR n'avait ni clavier ni écran, seulement un panneau de commutation à bascule, comme sur la photo. Il est devenu intéressant de comprendre comment écrire et exécuter un programme sur un tel PC. Pour ceux qui veulent savoir comment ça marche, la suite sous la coupe.





Code

. ALTAIR 64 , 8080, 2 .





, , 1 5:





; Code segment:

        ORG    0o       ; Set Program Counter to address 0
START:  LDA    I
        MOV    B,A      ; RegB => I (1..N)
        LDA    STEP
        MOV    C,A      ; RegC => STEP (always 1)
        LDA    SUM
        MOV    D,A      ; RegD => SUM (result)
LOOP:     MOV    A,D    ; Move value to Accumulator from Register D (SUM)
          ADD    B      ; Add value in Register B to value in Accumulator
          MOV    D,A    ; Save result back to D     I
          MOV    A,B    ; Mov B to A and decrement it
          SUB    C
          JZ     PEND   ; If A is zero, the calculation is complete
          MOV    B,A    ; If not, continue
          JMP    LOOP     
PEND:   MOV A,D         ; Save result in SUM value
        STA SUM
PWAIT:  JMP PWAIT       ; Nothing to do, infinite loop

; Data segment:

        ORG    200o     ; Set Program Counter to address 200
I:      DB     5o       ; Data Byte at address 200 = 5
STEP:   DB     1o       ; Data Byte at address 201 = 8 (10 octal)
SUM:    DB     0o       ; Data Byte at address 202 = 0

        END             ; End
      
      



, 3 , I, STEP SUM, 1 5 1. B, C D, . JZ (Jump if Zero) , . SUM. , (data segment) , 200o ("o" octet, 8- ).





, , Python :





s = sum(range(6))
      
      



, , - . .





, , . , LDA:





"LDA I", I 200 = 80h, 3A 80 00.





MOV B,A :





01000111b = 47h





- , ( ). , "" , , . :





3a 80 00 47 3a 81 00 4f 
3a 82 00 57 7a 80 57 78 
91 ca 18 00 47 c3 0c 00 
7a 32 82 00 c3 1c 00
      
      



- 38 . MZ, - 0. , , , 40...





ALTAIR 8800, github. :





, ALTAIR . - . , 1 10001000b, DEPOSIT, , DEPOSIT NEXT. , EXAMINE/EXAMINE NEXT. RUN SINGLE STEP.





, DEBUG , hex- . , .





. , 202 = 10000010b, EXAMINE. D7..D0 00001111b = 15, 1 5:





, , . , , , .





1975 BASIC ALTAIR, 1976 "Micro-Soft". IT.





. ALTAIR - , 50 . , . 2 , , , " ".





, ALTAIR . -, "", :





, ALTAIR simh, Linux, :





, .





Comme d'habitude, bonne chance à tous.








All Articles