User Tag List

Страница 12 из 12 ПерваяПервая ... 89101112
Показано с 111 по 111 из 111

Тема: Кросскомпилятор Си под 8080

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    07.05.2015
    Адрес
    г. Ульяновск
    Сообщений
    352
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    63
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пожалуй, выложу свое поделие на тему С-- для 8080.
    Есть декомпилятор, компилятор и IDE. Изначально это делалось под архитектуру AVR, сейчас неспешно адаптирую под 8080/8085.
    Представление о синтаксисе можно сложить по примеру кода под спойлером (это декомпилированная игра "тетрис" под ЮТ88).
    Если очень кратко, то можно писать как на обычном асме, так и использовать си-подобные выражения. Также сейчас есть условия if и цикл loop. А ещё есть препроцессор.

    Скрытый текст


    PHP код:
    var figureLandedbyte absolute 0x3659    0/FF
    var figureCoordinatesword absolute 0x365A
    var currentRotationbyte absolute 0x365C
    var figureAddressword absolute 0x365D
    var figureBufferbyte[6absolute 0x365F
    var nextFigureDatabyte[6absolute 0x3665
    var rotationPreviewBufferbyte[6absolute 0x366B
    var remainingDelaybyte absolute 0x3671            Remaining delay until next game tick occurs (when space is pressed ticks go faster)
    var 
    difficultybyte absolute 0x3672
    var randomSeedbyte absolute 0x3673
    var nextFigureIndexbyte absolute 0x3674            1 based
    var currentFigureIndexbyte absolute 0x3675        1 based
    var figureXbyte absolute 0x3676
    var figureYbyte absolute 0x3677
    var completedLinesbyte absolute 0x3678
    var fullLineFlagbyte absolute 0x3679
    var notSkipDrawingbyte absolute 0x367A    Bypass drawingonly calculations (0x01 draw0x00 bypass)
    var 
    gameBufferbyte[64*25absolute 0x367F




    #define CURSOR_LEFT            0x08  ; Переместить курсор на позицию левее
    #define RESET_CURSOR            0x0c    ; Переместить курсор в начало экрана (верхний левый угол)
    #define CURSOR_RIGHT            0x18  ; Переместить курсор на позицию правее
    #define CURSOR_UP                0x19    ; Переместить курсор на строку выше
    #define CURSOR_DOWN            0x1a    ; Переместить курсор на строку ниже
    #define CLS                        0x1f  ; Очистить экран
    #define CURSOR_TO(x, y)        0x1b, 0x59, 0x20 + (y), 0x20 + (x)

    extern proc biosPrintChar(chCabsolute 0xF809
    extern proc biosKeyboardReadChar
    () absolute 0xF803
    extern proc biosKeyboardCheck
    () absolute 0xF812        ; -> A=не нажатаA=FF нажата
    extern proc biosExitToMonitor
    () absolute 0xF800


    #define GLASS_CHAR    '#' ;':'
    #define FIGURE_CHAR    '▉';'[';'▉';'#'
    #define EMPTY_CHAR    '.'

    #define FIELD_WIDTH    10
    #define FIELD_HEIGHT    20


    inline proc waitCycleBC() {
    cycle:
        
    BC--
        
    B
        A 
    |= C
        jnz    cycle    
    }

    $encoding("ut88")
    $output("tetris-out.rkr")
    $org(0x3000)

    proc init() {
        
    notSkipDrawing 1
        SP 
    0x3F7F
    }

    proc startGame() {
        
    call    printChar(CLS)    
        
    call    printMessage(msg_keys_info)
        
    HL 0x1F10
        saveregs 
    (HL) {        
            
    GLASS_CHAR
            loop 
    (FIELD_HEIGHT+1) {
                
    call    drawBlock(yHxLchA)
                
    H--
            }
            
    H++
            
    loop (FIELD_WIDTH+2) {
                
    call    drawBlock(yHxLchA)
                
    L++
            }
            
    L--    
            
    loop (FIELD_HEIGHT+1) {
                
    call    drawBlock(yHxLchA)
                
    H++
            }
        }
        
    L++

        
    EMPTY_CHAR
        loop 
    (FIELD_HEIGHT) {
            
    saveregs (HL) {
                
    loop (FIELD_WIDTH) {
                    
    call    drawBlock(yHxLchA)
                    
    L++
                }
            }
            
    H--
        }
    select_level:
        
    call    printMessage(msg_select_level)
        
    call    readKeyboard
        call    printChar
    (A)
        
    -= 0x30
        jc        select_level
        cpi    8
        jnc    select_level
        cma
        A 
    &= 0x07
        difficulty 
    = ++A
        
        BC 
    0x4000

    lbl_307D
    :
        
    BC--
        
    B
        A 
    |= C
        jnz    lbl_307D
        
        call    printMessage
    (msg_press_any_key)
    lbl_3089:
        
    call    checkAndReadKeyboard
        A 
    |= A
        HL
    ++
        
    jm    lbl_3089
        H 
    A
        A 
    ^= L
        B 
    mem[HL]
        
    ^= M
        L 
    A
        C 
    mem[HL]
    lbl_3097:
        
    HL += BC
        C
    --
        
    jp    lbl_3097
        randomSeed 
    L
        completedLines 
    0
        figureLanded 
    = --A
        call    printMessage
    (msg_full_lines)
        
    jmp    gameLoop
    }

    proc collapseLines() {
        
    figureLanded 0
        remainingDelay 
    difficulty
        HL 
    0x0C11
        B 
    FIELD_HEIGHT
    lbl_30C1
    :
        
    fullLineFlag 0xFF
        loop 
    (FIELD_WIDTH) {
            
    call    getCell
            
    if (== FIGURE_CHAR) goto lbl_30D4
            fullLineFlag 
    0
        lbl_30D4
    :
            
    L++
        }
        
    0x11
        A 
    fullLineFlag
        A 
    |= A
        jp    lbl_314F
        A 
    difficulty-1
        A 
    = ~A
        A 
    &= 0x07
        A 
    <<= 1
        D 
    A
        A 
    <<= 1
        A 
    += 5
        A 
    <<= 1
        D 
    A
        A 
    completedLines 1
        cmp    D
        cz    increaseDifficulty
        
    if (!= 0x64) goto lbl_3100
        A 
    0
    lbl_3100
    :
        
    completedLines A
        C 
    0
    lbl_3105
    :
        
    C++
        
    -= 0x0A
        jnc    lbl_3105
        A 
    += 0x3A
        xchg
        HL 
    0x1E0B
        call    drawBlock
    (yHxLchA)
        
    L--
        
    call    drawBlock(yHxLch' ')
        
    0x2F '/'
        
    call    printChar(A)
        
    xchg
        saveregs 
    (HL) {
    lbl_3123:
            
    1
            loop 
    (FIELD_WIDTH) {
                
    L
                xchg
                call    getCell
                xchg
                call    drawBlock
    (yHxLchA)
                
    L++
            }
            
    H++
            
    0x11
            A 
    H
            
    if (!= 0x1F) goto lbl_3123
            HL 
    0x1F11
            A 
    EMPTY_CHAR
            loop 
    (FIELD_WIDTH) {
                
    call    drawBlock(yHxLchA)
                
    L++
            }
        }
        
    H--
    lbl_314F:
        
    H++
        
    B--
        
    jnz    lbl_30C1
        figureAddress 
    HL figureBuffer
        xchg
        HL 
    nextFigureData
        loop 
    (sizeof(nextFigureData)) {
            
    mem[DE++] = mem[HL++]
        }
    }    
        
    proc gameLoop() {
        
    HL 0x3447
        DE 
    0x0018
        call    randomValue
        loop 
    (A) {
            
    HL += DE
        
    }
        
    DE nextFigureData
        saveregs 
    (DE) {
            
    loop (sizeof(nextFigureData)) {
                
    mem[DE++] = mem[HL++]
            }
        }
        
    HL 0x0F06
    lbl_3188
    :
        
    call    drawBlock(yHxLch' ')
        
    call    printChar(' ')
        
    = ++L
        
    if (!= 0x0C) goto lbl_3188
        L 
    6
        A 
    = ++H
        
    if (!= 0x11) goto lbl_3188
        call    drawFigure
    (coords0x1007addressDEchFIGURE_CHAR)
                
        
    figureLanded
        A 
    |= A
        jnz    collapseLines
        currentRotation 
    A
        figureCoordinates 
    HL 0x1F15
        figureX 
    A
        figureY 
    A
        call    checkCollisions
        jc        gameOver
        call    drawCurrentFigureAt
    (FIGURE_CHAR)
    }

    proc nextCycle() {
        
    remainingDelay
        C 
    1
    }

    proc keyInputLoop() {
        
    call    checkAndReadKeyboard
        A 
    |= A
        jm    noKeyInput
    ()
        if (
    == '6') goto handleSpeedUp        Ускорение
        
    if (== '7') goto handleLeft            Влево
        
    if (== '8') goto handleRotate        Вращение
        
    if (== '9') goto handleRight        Вправо
        
    if (== 0x03) goto gameOver            Ctrl C
        
    if (== 'S') goto handlePause        Пауза
        DE 
    0x3671
        
    if (== ' ') goto handleSpace
    }

    proc noKeyInput() {
        
    BC--
        
    B
        A 
    |= C
        jnz    keyInputLoop
        figureX 
    A
        figureY 
    = --A
        call    calcMove
        jnc    nextCycle
        jmp    collapseLines
    }

    proc gameOver() {
        
    call    printMessage(msg_game_over_repeat)
        
    call    readKeyboard
        
    if (== 'Y') goto startGame
        
    if (== 'N') goto biosExitToMonitor
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
    }

    proc handlePause() {
        
    saveregs (HL) {
            
    call    printMessage(msg_pause)
            
    saveregs (BC) {
                
    BC 0
            lbl_323A
    :
                
    BC--
                
    B
                A 
    |= C
                jnz    lbl_323A
            
    }
    waitKey:
            
    call    checkAndReadKeyboard
            A 
    |= A
            jm    waitKey
            call    printMessage
    (msg_clear_message)
        }
        
    jmp    noKeyInput()
    }

    proc printMessage(msgHL) {
        
    loop {
            
    mem[HL]
            
    |= A
            rz
            C 
    A
            HL
    ++
            
    call    printChar
        
    }
    }

    proc printChar(chC) {
        
    saveregs (HLDEBC) {
    @
    printCharInternal:
            
    saveregs (PSW) {
                
    call    biosPrintChar(C)
            }
        }
        
    ret
    }

    proc ckeckKeyboard() {
        
    saveregs (HLDEBC) {
            
    call    biosKeyboardCheck
        
    }
        
    ret
    }

    proc readKeyboard() {
        
    saveregs (HLDEBC) {
            
    call    biosKeyboardReadChar
        
    }
        
    ret
    }

    proc checkAndReadKeyboard() {
        
    call    ckeckKeyboard
        A 
    |= A
        jnz    readKeyboard
        A 
    |= 0xFF
        ret
    }

    Clear current figure at current coordinates
    ;
    The function will clear cells under figure's blocks with '.'

    proc clearCurrentFigure() {
        C = EMPTY_CHAR
    }

    ; Draw current figure at current coordinates
    ;
    ; Draw the currently falling figure at its coordinates stored in 0x365a
    ; The function uses 0x365d currently falling figure buffer
    ; C - symbol to draw the figure with
    proc drawCurrentFigure(ch: C) {
        HL = figureCoordinates
    }

    ; Draw current figure
    ;
    ; Draw the currently falling figure at HL logic coordinates. 
    ; The function uses 0x365d currently falling figure buffer
    ; C - symbol to draw the figure with

    proc drawCurrentFigureAt(ch: C) {
        xchg
        HL = figureAddress
        xchg
    }


    ; Draw the figure
    ;
    ; Arguments:
    ; HL - logic coordinates of the figure
    ; DE - address of the figure buffer
    ; C - symbol to draw the figure with

    proc drawFigure(coords: HL, address: DE, ch: C) {
        call    drawBlock(y: H, x: L, ch: C)
        saveregs (HL) {
            loop (B = 3) {
                L = A = mem[DE++] + L
                H = A = mem[DE++] + H
                call    drawBlock(y: H, x: L, ch: C)
            }
            call    printChar(RESET_CURSOR)
        }
        ret
    }

    ; Generate next random value in range 1-7. 

    proc randomValue() {
        currentFigureIndex = A = nextFigureIndex
        randomSeed = A = randomSeed + 0xBB
        saveregs (BC) {
            B = A
            A >>= 3
            A ^= B
        }
        A &= 0x07
        jz    randomValue
        nextFigureIndex = A
        ret
    }

    proc increaseDifficulty() {
        saveregs    (PSW) {
            A = difficulty - 1
            cpi    1
            jnc    lbl_32D4
            A = 1
        lbl_32D4:
            difficulty = A
            remainingDelay = A
            A--
            A = ~A
            A &= 0b111
            A += 0x30
            saveregs (HL) {
                HL = 0x1F0B
                call    drawBlock(y: H, x: L, ch: A)
            }
        }
        ret
    }

    proc calcMove() {
        saveregs (BC) {
            saveregs (PSW) {
                notSkipDrawing = A = 0
            }
            saveregs (HL) {
                call    proc_3312
                saveregs (PSW) {
                    notSkipDrawing = A = 1
                }
                jc    lbl_3305
            }
            call    proc_3312
            push    HL
    lbl_3305:
            pop    HL
            figureCoordinates = HL
            saveregs (PSW) {
                call    drawCurrentFigureAt(FIGURE_CHAR)
            }
        }
        ret
    }

    ; Clear the figure at current location, and then check for collisions
    proc proc_3312() {
        call    clearCurrentFigure
    }

    ; Check the falling figure collisions
    ; Carry flag set if a collision is detected
    proc checkCollisions() {
        HL = figureCoordinates
        L = A = figureX + L
        H = A = figureY + H
        saveregs (HL) {
            call    getCell
            if (A != EMPTY_CHAR)    goto collision
            xchg
            HL = figureAddress
            xchg
            loop (B = 3) {
                L = A = mem[DE++] + L
                H = A = mem[DE++] + H
                call    getCell
                if (A != EMPTY_CHAR) goto collision
            }
        }
        A |= A
        ret

    collision:
        pop    HL
        L = A = ~figureX + 1 + L
        H = A = ~figureY + 1 + H
        stc
        ret
    }

    proc handleLeft() {
        A = -1
    }    

    proc handleMotion(dx: A) {
        figureX = A
        figureY = A = 0
        call    calcMove
        DE = 0x3676 ; &figureX
    }

    proc handleSpace() {
        B = A = remainingDelay*2
        C = 1
    cycle:
        BC--
        A = B
        A |= C
        jnz    cycle
        mem[DE] = A
        BC++
        jmp    noKeyInput()
    }

    proc handleRight() {
        jmp    handleMotion(dx: 1)
    }

    proc handleRotate() {
        currentRotation = A = (currentRotation + 1) & 0b11
        push    BC
        call    clearCurrentFigure
        HL = 0x3441        ; Base address of all figures     TODO ???????
        DE = 4*6            ; Single figure size (for all rotations)
        
        loop (A = currentFigureIndex) {
            HL += DE
        }

        DE = 6
        loop (A = currentRotation + 1) {
            HL += DE
        }
        DE = rotationPreviewBuffer
        xchg
        figureAddress = HL
        loop (B = sizeof(rotationPreviewBuffer)) {
            mem[HL++] = A = mem[DE++]
        }
        figureX = A = 0
        figureY = A
        call    checkCollisions
        figureAddress = HL = figureBuffer
        jnc    applyRotation
        currentRotation = A = (currentRotation - 1) & 0b11
        jmp    rotationExit
    }

    proc applyRotation() {
        DE = rotationPreviewBuffer
        loop (B = sizeof(rotationPreviewBuffer)) {
            mem[HL++] = A = mem[DE++]
        }
    }

    proc rotationExit() {
        call    drawCurrentFigure(FIGURE_CHAR)
        pop    BC
        jmp    proc_33F0
    }

    proc handleSpeedUp() {
        call    increaseDifficulty
    }

    proc proc_33F0() {
        jmp    handleMotion(dx: 0)
    }

    ; Блок имеет ширину в два символа. Координаты отсчитываются от нижнего левого угла
    ;
    ; The function does 2 things:
    ; - Updates the block on the screen
    ; - Stores the new value in the game buffer

    ; Arguments:
    ; H - logical Y coordinate of the block
    ; L - logical X coordinate of the block
    ; A - Character to print as a block
    proc drawBlock(y: H, x: L, ch: A) {
        saveregs (HL, DE, BC) {
            B = A
            call    calculateBlockAddress
            mem[HL] = B
            A = notSkipDrawing
            A |= A
            jnz    draw
            A = B
        }
        ret

    draw:
        ; курсор в точку (E, D)
        call    printChar(0x1B)
        call    printChar(0x59)
        call    printChar(D)        
        call    printChar(E)
        C = B
        A = B
        cpi    FIGURE_CHAR
        cz        printChar
        if (A != EMPTY_CHAR) goto skip
        call    printChar(' ')
        C = B
    skip:
        cpi    GLASS_CHAR
        cz        printChar
        A = B
        jmp    printCharInternal
    }

    ; Return the cell value 
    ;
    ; Arguments: HL - logical coordinates of the cell
    ; Return: value in A
    proc getCell(xy: HL) {
        saveregs (HL, DE) {
            call    calculateBlockAddress
            A = mem[HL]
        }
        ret
    }

    ; Calculate address of the given block
    ;
    ; Arguments:
    ; H - block vertical coordinate (bottom to top)
    ; L - block horizontal coordinate (left to right)
    ;
    ; Result:
    ; D - block vertical screen coordinate (top to bottom) + 0x20 (can be passed to Move cursor sequence)
    ; E - block horizontal screen coordinate + 0x20 (can be passed to Move cursor sequence)
    ; HL - address of the block byte in the game buffer
    ;
    ; Algorithm:
    ; Y = 0x20 - H      ; logic coordinates
    ; X = L
    ; D = 0x20 + Y      ; Screen coordinates
    ; E = 0x20 + 2*X
    ; HL = Y*0x40 + X + 0x367f  ; Block address in the buffer

    proc calculateBlockAddress(x: L, y: H) {
        saveregs (BC) {
            B = A = 0x20 - H
            
            C = A = L*2
            HL = 0x2020 + BC
            xchg
            HL = gameBuffer
            A >>= 1
            C = A
            B = A = B >> 2
            C = A = (A & 0xC0) | C
            B = A = B & 0x3F
            HL += BC
        }
        ret
    }

    byte[] {
        0, 0, 0
    ;    0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0
    }

    ;reset_cursor:
    ;byte[] {
    ;    CURSOR_TO(0, 0), 0
    ;}


    //$org(0x345F)

    ; Описаний фигур и их вращения.
    ; Каждая фигура состоит из 4х блоков. Один блок считается центром и имеет координаты (0, 0)
    ; Положение остальных блоков задаются в виде приращения координат от предыдущего блока.
    ; Записи из 6 байт (три пары приращений кооридинат) представляют собой все 4 варианта вращения.

    figure_I: 
    byte[] {
        -1, 0,   2, 0,   1, 0,   ; 1x23 ; 1    ; 1x23 ; 1    ; 
        0, -1,   0, 2,   0, 1,   ;      ; x    ;      ; x    ;
        -1, 0,   2, 0,   1, 0,   ;      ; 2    ;      ; 2    ;
        0, -1,   0, 2,      0, 1    ;      ; 3    ;      ; 3    ;
    }
    figure_L:
    byte[] {
        -1, 0,   2, 0,   0, -1,  ;   3  ; 1    ; 2x1  ; 31   ;
        0, -1,   0, 2,   1, 0,   ; 1x2  ; x    ; 3    ;  x   ;
        1, 0,    -2,0,   0, 1,   ;      ; 23   ;      ;  2   ;
        0, 1,    0,-2,   -1,0    ;      ;      ;      ;      ;
    }
    figure_J:
    byte[] {
        1, 0,   -2, 0,   0, -1,  ;  3   ;  23  ;      ;  1   ;
        0, 1,   0, -2,   1, 0,   ;  2x1 ;  x   ; 1x2  ;  x   ;
        -1,0,   2, 0,    0, 1,   ;      ;  1   ;   3  ; 32   ;
        0,-1,   0, 2,   -1, 0    ;      ;      ;      ;      ;
    }
    figure_Z:
    byte[] {
        1, 0,   -1, -1,   -1, 0, ; 32   ;   3  ; 32   ;   3  ;
        0, 1,   1, -1,    0, -1, ;  x1  ;  x2  ;  x1  ;  x2  ;
        1, 0,   -1, -1,   -1, 0, ;      ;  1   ;      ;  1  ;
        0, 1,   1, -1,    0, -1  ;      ;      ;      ;     ;    
    }
    figure_S:
    byte[] {
        -1, 0,   1, -1,   1, 0,  ;  23  ; 3    ;  23  ; 3    ;
        0, 1,   -1, -1,   0, -1, ; 1x   ; 2x   ; 1x   ; 2x   ;
        -1, 0,   1, -1,   1, 0,  ;      ;  1   ;      ;  1   ;
        0, 1,   -1, -1,   0, -1  ;      ;      ;      ;      ;
    }
    fugure_T:
    byte[] {
        -1, 0,   2, 0,   -1, -1, ;  3   ;  1   ;      ;  2   ;
        0, -1,   0, 2,   1, -1,  ; 1x2  ;  x3  ; 2x1  ; 3x   ;
        1, 0,   -2, 0,   1, 1,   ;      ;  2   ;  3   ;  1   ;
        0, 1,   0, -2,   -1, 1   ;      ;      ;      ;      ;
    }
    figure_O:
    byte[] {
        0, -1,   1, 0,   0, 1,   ;  12  ;  12  ;  12  ;  12  ;
        0, -1,   1, 0,   0, 1,   ;  x3  ;  x3  ;  x3  ;  x3  ;
        0, -1,   1, 0,   0, 1,   ;      ;      ;      ;      ;
        0, -1,   1, 0,   0, 1    ;      ;      ;      ;      ;
    }


    msg_keys_info:
    byte[] {
        ;0x1B, 0x59, 0x24, 0x20, 
        CURSOR_TO(0, 4),
        
        0x0E, "..7..     ..8..     ..9..", 0x0D, 0x0A, 
        
        "ВЛЕВО    ВРАЩАТЬ    ВПРАВО", 0x0D, 0x0A, 0x0A, 
        0x75, 0x77, 0x65, 
        "УВЕЛИЧИТЬ СКОРОСТЬ  ..6..", 0x0D, 0x0A, 0x0A, 
        "  ..PROBEL..     СБРОСИТЬ", 0x0D, 0x0A,     0x0F, 0x0A, 
        "    ..S..        ", 0x0E, "ПАУЗА", 0
    }

    msg_select_level:
    byte[] {
        CURSOR_TO(0, 1),
        "ВАШ УРОВЕНЬ(0-7) ?     ", CURSOR_LEFT, 0
    }

    msg_press_any_key:
    byte[] {
        CURSOR_TO(0, 2),
        "НАЖМИТЕ ЛЮБУЮ КЛАВИШУ !", 0
    }

    msg_full_lines:
    byte[] {
        CURSOR_TO(0, 2),
        "ЧИСЛО ПОЛНЫХ СТРОК   00", 0x0D, 0
    }

    msg_game_over_repeat:
    byte[] {
        CURSOR_TO(8, 0x16),
        "ИГРА ЗАКОНЧЕНА, ЖЕЛАЕТЕ ПОВТОРИТЬ?", 0x0F, " (Y/N)", 0
    }

    msg_pause:
    byte[] {
        CURSOR_TO(8, 0x16),
        "ВОДИТЕЛЬ, УСТАЛ - ОТДОХНИ !", 0
    }

    msg_clear_message:
    byte[] {
        CURSOR_TO(8, 0x16),
        "                           ", 0
    }

    byte[] {
        0, 0, 0, 0, 0, 0

    [свернуть]


    Компилятор написан на Котлине, последнюю сборку всегда можно скачать тут https://trolsoft.ru/content/soft/tro...io/the-rat.jar.

    Декомпиляция файла game.rkr делается командой
    PHP код:
    java -cp the-rat.jar ru.trolsoft.therat.i8085.decompiler.DecompilerKt game.rkr 
    У декомпилятора есть разные опции, в т.ч. для задачи дополнительных точек входа.

    Компиляция файла source.8080 делается командой

    PHP код:
    java -jar the-rat.jar source.8080 
    IDE позволяет создавать и компилировать проекты (8080, AVR и С/С++). После компиляции С-- можно перемещаться по исходнику и видеть ассемблерный результат.

    В целом всё это пока сыровато но вполне работоспособно.

    Если сиё поделие вдруг будет кому-то интересно, постараюсь сделать более подробное описание.

    Эти 3 пользователя(ей) поблагодарили Trol73 за это полезное сообщение:

    Oleg N. Cher(28.05.2024), parallelno(28.05.2024), svofski(28.05.2024)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Страница 12 из 12 ПерваяПервая ... 89101112

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ассемблер 8080
    от Kakos_nonos в разделе Утилиты
    Ответов: 0
    Последнее: 21.09.2011, 23:35
  2. Продам пару платок с процами 8080
    от RedLine в разделе Барахолка (архив)
    Ответов: 15
    Последнее: 23.12.2010, 18:39
  3. схема АОН на 8080/z80
    от sergey2b в разделе Разный софт
    Ответов: 7
    Последнее: 07.02.2010, 22:43
  4. An 8080/Z80 C Compiler
    от breeze в разделе Программирование
    Ответов: 1
    Последнее: 18.08.2005, 06:54

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •