Pinned Assemblercompo "Dreh das Wort"


  • BastetFurry
  • 25435 Views 111 replies

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

All users must confirm the minimum age (16) in their profile!<br /> <br /> From tomorrow the use of Forum64 will only possible after updating the profile data.<br /> The profile update is still possible after then.<br /> <br /> Thank you for your understanding.<br /> <br /> Team forum64.de

  • und hier in 29 bytes :)

    Source Code

    1. .C:1000 9A TXS
    2. .C:1001 A0 D8 LDY #$D8
    3. .C:1003 BF 28 03 LAX $0328,Y
    4. .C:1006 CA DEX
    5. .C:1007 E0 1A CPX #$1A
    6. .C:1009 B0 04 BCS $100F
    7. .C:100b 48 PHA
    8. .C:100c C8 INY
    9. .C:100d D0 F4 BNE $1003
    10. .C:100f BA TSX
    11. .C:1010 F0 02 BEQ $1014
    12. .C:1012 68 PLA
    13. .C:1013 88 DEY
    14. .C:1014 8D 28 04 STA $0428
    15. .C:1017 EE 15 10 INC $1015
    16. .C:101a 10 F0 BPL $100C
    17. .C:101c 02 JAM
    Display All
  • und hier noch ne schöne 28 Byte Version

    Source Code

    1. .C:1000 A0 28 LDY #$28
    2. .C:1002 48 PHA
    3. .C:1003 88 DEY
    4. .C:1004 30 0B BMI $1011
    5. .C:1006 B1 0E LDA ($0E),Y
    6. .C:1008 99 28 04 STA $0428,Y
    7. .C:100b F0 04 BEQ $1011
    8. .C:100d C9 1B CMP #$1B
    9. .C:100f 90 F1 BCC $1002
    10. .C:1011 CA DEX
    11. .C:1012 10 FE BPL $1012
    12. .C:1014 68 PLA
    13. .C:1015 F0 EB BEQ $1002
    14. .C:1017 9D 50 03 STA $0350,X
    15. .C:101a D0 F5 BNE $1011
    Display All
  • ich bleib bei Rückwärts ...

    28 !

    Source Code

    1. !to "dreh.prg", cbm
    2. !cpu 6510
    3. * = $1000
    4. txs
    5. ldy #$27
    6. loop: lax ($0e),y
    7. dex
    8. cpx #26
    9. bcs quit
    10. pha
    11. loop2:
    12. dey
    13. bpl loop
    14. quit: tsx
    15. beq store
    16. pla
    17. iny
    18. store: sta $044f
    19. dec store+1
    20. bne loop2
    21. !byte $02
    Display All


    @edit : Mist, der Post hat zu lange gedauert
  • peiselulli wrote:

    @ssda : Mach doch aus dem letztem JMP ein BVC und Du bist auch bei 32 ...
    Gut beobachtet! Ich hatte irrtümlich angenommen, dass auch der CMP-Befehl das V-Flag ändert; dann wäre der Status des V-Flags natürlich unbekannt gewesen. Man lernt nicht aus! ;)

    Roland wrote:


    Sehr schöner Ansatz.... und noch zu verbessern :)

    Mach so und wir sind bei 31 :D
    :thumbup: Ja, diese Idee hatte ich heute morgen unter der Dusche auch! Gestern abend bin ich nicht mehr drauf gekommen, weil meine vorherigen Lösungsversuche immer beim ersten Wort Fehler geliefert hatten, sobald X zu klein wurde. Daher hatte ich wohl 'ne Gehirnblockage gegenüber zu kleinen X-Werten.

    Sagt mal, eine richtige Compo ist das hier aber nicht mehr, oder? :huh:
  • Aber eine "dreckige" Version mit 27 Bytes habe ich noch ...

    Source Code

    1. !to "dreh.prg",cbm
    2. !cpu 6510
    3. * = $1000
    4. txs
    5. loop:
    6. dey
    7. lax $0328,y
    8. dex
    9. cpx #26
    10. bcs quit
    11. pha
    12. bvc loop
    13. quit: tsx
    14. beq store
    15. pla
    16. iny
    17. store: sta $044f
    18. dec store+1
    19. bne loop
    20. !byte $02
    Display All


    Oder als Disassembler Output :

    Source Code

    1. .C:1000 9A TXS
    2. .C:1001 88 DEY
    3. .C:1002 BF 28 03 LAX $0328,Y
    4. .C:1005 CA DEX
    5. .C:1006 E0 1A CPX #$1A
    6. .C:1008 B0 03 BCS $100D
    7. .C:100a 48 PHA
    8. .C:100b 50 F4 BVC $1001
    9. .C:100d BA TSX
    10. .C:100e F0 02 BEQ $1012
    11. .C:1010 68 PLA
    12. .C:1011 C8 INY
    13. .C:1012 8D 4F 04 STA $044F
    14. .C:1015 CE 13 10 DEC $1013
    15. .C:1018 D0 E7 BNE $1001
    16. .C:101a 02 JAM
    Display All
  • Oder in 26 :

    Source Code

    1. !to "dreh.prg",cbm
    2. !cpu 6510
    3. * = $1000
    4. txs
    5. quit: tsx
    6. kill = *+1
    7. beq store
    8. pla
    9. iny
    10. store: sta $0450
    11. dec store+1
    12. beq kill
    13. loop: dey
    14. lax $0328,y
    15. dex
    16. cpx #26
    17. bcs quit
    18. pha
    19. bvc loop
    Display All


    Source Code

    1. .C:1000 9A TXS
    2. .C:1001 BA TSX
    3. .C:1002 F0 02 BEQ $1006
    4. .C:1004 68 PLA
    5. .C:1005 C8 INY
    6. .C:1006 8D 50 04 STA $0450
    7. .C:1009 CE 07 10 DEC $1007
    8. .C:100c F0 F5 BEQ $1003
    9. .C:100e 88 DEY
    10. .C:100f BF 28 03 LAX $0328,Y
    11. .C:1012 CA DEX
    12. .C:1013 E0 1A CPX #$1A
    13. .C:1015 B0 EA BCS $1001
    14. .C:1017 48 PHA
    15. .C:1018 50 F4 BVC $100E
    Display All
  • ssdsa wrote:

    Sagt mal, eine richtige Compo ist das hier aber nicht mehr, oder?

    naja... bei den letzten ergebnissen hat halt jeder so die besten ideen des anderen mit verwendet.

    ...hier noch ne "ugly" weiterentwicklung auf 25 bytes (wobei mir das mit dem zerhacken der 1. zeile nicht wirklich gefällt)

    Source Code

    1. .C:1000 9A TXS
    2. .C:1001 48 PHA
    3. .C:1002 BF 28 03 LAX $0328,Y
    4. .C:1005 88 DEY
    5. .C:1006 CA DEX
    6. .C:1007 E0 1A CPX #$1A
    7. .C:1009 90 F6 BCC $1001
    8. .C:100b BA TSX
    9. .C:100c F0 02 BEQ $1010
    10. .C:100e 68 PLA
    11. .C:100f C8 INY
    12. .C:1010 8D 51 04 STA $0451
    13. .C:1013 CE 11 10 DEC $1011
    14. .C:1016 D0 EA BNE $1002
    15. .C:1018 02 JAM
    Display All
  • Hmm, da hätt ich auch selber drauf kommen können ...
    Ein unbedingter Sprung am Ende ist immer irgendwie überflüssig ...

    Sagt mal, eine richtige Compo ist das hier aber nicht mehr, oder?


    Die Deadline mit 1. Februar war wohl ein bischen zu lang, so daß schon vorher gepostet wurde.
    Dann gings los und dann wurden die Ideen gegenseitig übernommen.
  • Respekt, meine Herren! :thumbsup:

    Ich hätte nicht gedacht, das es unter 30 Bytes machbar wäre. Wenn das so weiter geht, gibt die Routine am Ende noch Bytes frei anstatt sie zu belegen :)
  • Hier noch mal ein "sauberer" 28er, vielleicht kann man daraus noch was machen ...

    Ich habe irgendewie den BVC nicht weggekriegt, ohne die "Sauberkeit" zu zerstören ...

    Source Code

    1. .C:1000 9A TXS
    2. .C:1001 88 DEY
    3. .C:1002 BF 28 03 LAX $0328,Y
    4. .C:1005 CA DEX
    5. .C:1006 E0 1A CPX #$1A
    6. .C:1008 B0 03 BCS $100D
    7. .C:100a 48 PHA
    8. .C:100b 50 F4 BVC $1001
    9. .C:100d BA TSX
    10. .C:100e F0 02 BEQ $1012
    11. .C:1010 68 PLA
    12. .C:1011 C8 INY
    13. .C:1012 A6 D5 LDX $D5
    14. .C:1014 9D 28 04 STA $0428,X
    15. .C:1017 C6 D5 DEC $D5
    16. .C:1019 10 E6 BPL $1001
    17. .C:101b 02 JAM
    Display All


    Die 25er Version ist doch nicht so trivial, wie ich erst dachte ... coole Idee !
  • peiselulli wrote:

    Ich habe irgendewie den BVC nicht weggekriegt, ohne die "Sauberkeit" zu zerstören ...

    mit ner 27er Version gehts recht einfach.

    Source Code

    1. .C:1000 E8 INX
    2. .C:1001 9A TXS
    3. .C:1002 48 PHA
    4. .C:1003 88 DEY
    5. .C:1004 BF 28 03 LAX $0328,Y
    6. .C:1007 CA DEX
    7. .C:1008 E0 1A CPX #$1A
    8. .C:100a 90 F6 BCC $1002
    9. .C:100c BA TSX
    10. .C:100d F0 02 BEQ $1011
    11. .C:100f 68 PLA
    12. .C:1010 C8 INY
    13. .C:1011 A6 D5 LDX $D5
    14. .C:1013 9D 28 04 STA $0428,X
    15. .C:1016 C6 D5 DEC $D5
    16. .C:1018 10 E9 BPL $1003
    17. .C:101a 02 JAM
    Display All
  • Hier noch mal eine andere 25er-Variante, die leider auch die Source-Zeile zerstört.
    Allerdings läßt sie den Screen hinter der Ausgabe-Zeile so wie sie war ...

    Source Code

    1. .C:1000 9A TXS
    2. .C:1001 C6 48 DEC $48
    3. .C:1003 88 DEY
    4. .C:1004 BF 28 03 LAX $0328,Y
    5. .C:1007 CA DEX
    6. .C:1008 E0 1A CPX #$1A
    7. .C:100a 90 F6 BCC $1002
    8. .C:100c BA TSX
    9. .C:100d F0 02 BEQ $1011
    10. .C:100f 68 PLA
    11. .C:1010 C8 INY
    12. .C:1011 A6 48 LDX $48
    13. .C:1013 9D 50 03 STA $0350,X
    14. .C:1016 30 E9 BMI $1001
    15. .C:1018 02 JAM
    Display All
  • 24 Bytes, sehr unsauber :->

    Source Code

    1. .C:1000 C6 48 DEC $48
    2. .C:1002 BF 28 03 LAX $0328,Y
    3. .C:1005 88 DEY
    4. .C:1006 CA DEX
    5. .C:1007 E0 1A CPX #$1A
    6. .C:1009 90 F6 BCC $1001
    7. .C:100b BA TSX
    8. .C:100c F0 02 BEQ $1010
    9. .C:100e 68 PLA
    10. .C:100f C8 INY
    11. .C:1010 A6 48 LDX $48
    12. .C:1012 9D 5B 03 STA $035B,X
    13. .C:1015 30 E9 BMI $1000
    14. .C:1017 02 JAM
    Display All
  • yo... an so "doppeltverwendung" von opcode hab ich auch schon gedacht.
    für die 24 bytes version aber nicht wirklich notwendig. denn letztendlich ist es ja nur das weglassen von dem txs (und dann anpassen des outputstarts)
    (geht also auch z.b. mit routine aus post 90).
    hatte auch schon routinen ohne txs, allerdings hatte ich das gefühl, dass ich nicht immer den selben startwert hatte. :huh:
  • Die Doppelverwendung habe ich ja auch nur gepostet um das ganze ein bischen zu variieren.
    Eventuell gibt das ja Anstöße für neue Ideen.

    Aber irgendwie dreht sich das jetzt alles für mich irgenwie im Kreis ...
    Ich habe zum Beispiel meine 26er versucht umzubauen, habe mich gefreut, daß ich auch die 25 erreicht habee, bis ich gemerkt habe, daß das exakt das gleiche war wie in Post 90.

    Stell jetzt einfach Deine saubere 20 Byte Lösung ein und mach dem Spuk ein Ende, ich bin kurz vorm Durchdrehen von dem Kram ;->
  • Ich hab noch eine 24 bytes version, mit einem ganz anderen ansatz (der vielleicht noch ne möglichkeit auf 23 bietet), auch relativ sauber bleibt und nicht mit einem JAM endet.
    die idee hatte ich schon lange, aber eben nicht vor deiner 24er version fertig geworden.

    Source Code

    1. .C:1000 48 PHA
    2. .C:1001 BD 28 03 LDA $0328,X
    3. .C:1004 F0 04 BEQ $100A
    4. .C:1006 C9 1B CMP #$1B
    5. .C:1008 90 08 BCC $1012
    6. .C:100a A9 99 LDA #$99
    7. .C:100c 29 03 AND #$03
    8. .C:100e 88 DEY
    9. .C:100f 68 PLA
    10. .C:1010 D0 F9 BNE $100B
    11. .C:1012 CA DEX
    12. .C:1013 D0 EB BNE $1000
    13. .C:1015 4C 6C E9 JMP $E96C
    Display All
  • Hallo ich wollte eigentlich auch bei der Compo mitmachen, aber zu mehr als zu peiselullis 27byte "sauberer" Version hat's bei mir von alleine nicht gereicht. Deshalb schnorre ich jetzt bei euch ein bisschen. Hier ist eine "dreckige" 24-Byte-Version aus den anderen zusammengestrickt:

    Source Code

    1. processor 6502
    2. org $1000
    3. txs
    4. loop .byte $c6 ;dec $48
    5. loop1 pha
    6. dey
    7. lax ($b2),y ;033c
    8. dex
    9. cpx #26
    10. bcc loop1
    11. tsx
    12. beq weiter
    13. pla
    14. iny
    15. weiter ldx $48
    16. sta $043c+$27-$ff,x
    17. bmi loop
    18. endl bpl endl ; .byte $02
    Display All